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.
- Base URL:
https://api.infusionsoft.com/crm/rest/v1 - Auth:
Authorization: Bearer <apiKey> - Credential type: none (
credentialBased: false) — pass the token as theapiKeyinput.
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:
- 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.
- 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/contactsreturns401 {"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.