InTouch Hub · Blue Isle Software

Keap

Manage contacts, orders, and campaigns in Keap (Infusionsoft) via its REST API.

keapinfusionsoftcrmmarketing

Keap

Manage contacts, orders, and campaigns in Keap (Infusionsoft) via its REST v1 API. A single InTouch tool that reads and writes core CRM and marketing records, grounded in the live API at developer.keap.com/docs/rest.

What it does

Branches on the operation input and calls the matching Keap REST endpoint. The raw JSON response body is returned as result, and the HTTP status as status. Non-2xx responses (e.g. a 401 for a bad token, or a 400 for an invalid payload) are returned rather than thrown, so a job can inspect them.

Operations

operation method & path inputs used
list_contacts GET /contacts limit, offset, email (all optional)
create_contact POST /contacts email, givenName, familyName
list_orders GET /orders limit, offset (optional)
list_campaigns GET /campaigns limit, offset (optional)

create_contact requires at least one of email, givenName, or familyName. When email is supplied it is sent as the contact's primary address (email_addresses: [{ email, field: "EMAIL1" }]).

apiKey setup

The apiKey is a Keap access token — either:

  1. A Personal Access Token (PAT), the simplest option for server-to-server automation. Generate one in the Keap Developer portal under your app's Keys / Personal Access Token section.
  2. An OAuth2 access token obtained via Keap's standard authorization-code flow.

Either way it is presented to the API as a Bearer token. A single string is all this tool needs — there is no separate client id/secret at call time. (If you use the OAuth2 flow, perform the token exchange/refresh outside this tool and pass the resulting short-lived access token as apiKey.)

Verified against the live API: a request with no token or a fake token to GET /crm/rest/v1/contacts returns 401 {"fault":{"faultstring":"Invalid Access Token"}}.

Examples

List the first 50 contacts:

{
  "apiKey": "KeapPAT_xxxxxxxxxxxxxxxx",
  "operation": "list_contacts",
  "limit": "50"
}

Look up contacts by email:

{
  "apiKey": "KeapPAT_xxxxxxxxxxxxxxxx",
  "operation": "list_contacts",
  "email": "[email protected]"
}

Create a contact:

{
  "apiKey": "KeapPAT_xxxxxxxxxxxxxxxx",
  "operation": "create_contact",
  "givenName": "Jane",
  "familyName": "Doe",
  "email": "[email protected]"
}

List recent orders:

{
  "apiKey": "KeapPAT_xxxxxxxxxxxxxxxx",
  "operation": "list_orders",
  "limit": "25"
}

List marketing campaigns:

{
  "apiKey": "KeapPAT_xxxxxxxxxxxxxxxx",
  "operation": "list_campaigns"
}

Outputs

field description
result The raw JSON response body from Keap (as a string).
status The HTTP status code as a string (e.g. "200", "401").

On a transport-level failure the tool emits {"result": "", "status": "0", "error": "<message>"} and exits non-zero so the job step is marked failed.