Respond.io node reference - all 35 operations, the credential it needs, and a worked example.
Respond.io API v2 (Messaging). 35 operations: contacts (get, create, upsert, update, delete, list/search, merge), tags, lifecycle stages and contact channels; messages (text, attachment, quick replies, WhatsApp template, email, custom payload, get, list); conversations (open, close, assign, unassign); internal comments; and workspace reads and writes for users, custom fields, tags, channels, message templates and closing notes.
Credential: Respond.io per-channel access token - see Credentials.
The respond.io API v2 has no scope system and no OAuth flow. A workspace access token (Settings > Integrations > Developer API, up to 10 per workspace) can call every endpoint below within the workspace it was created in - so the grant question is which WORKSPACE the token belongs to, not which boxes are ticked on it. The one gate that does exist is a plan gate on the whole credential rather than a per-operation one: the Developer API is available on respond.io's Business plan and above.
| Operation | What it does |
|---|
getContact | Get contact |
createContact | Create contact |
upsertContact | Create or update contact (upsert) |
updateContact | Update contact |
deleteContact | Delete contact |
listContacts | List / search contacts |
mergeContacts | Merge two contacts |
| Operation | What it does |
|---|
addTags | Add tags to contact |
removeTags | Remove tags from contact |
updateLifecycle | Set or clear lifecycle stage |
listContactChannels | List a contact's channels |
| Operation | What it does |
|---|
sendMessage | Send text message |
sendAttachment | Send attachment (image, video, audio, file) |
sendQuickReply | Send quick replies |
sendWhatsAppTemplate | Send WhatsApp template |
sendEmail | Send email message |
sendCustomPayload | Send custom channel payload |
getMessage | Get message |
listMessages | List a contact's messages |
| Operation | What it does |
|---|
openConversation | Open conversation |
closeConversation | Close conversation |
assignConversation | Assign conversation |
unassignConversation | Unassign conversation |
| Operation | What it does |
|---|
createComment | Add internal comment |
| Operation | What it does |
|---|
listSpaceUsers | List workspace users |
getSpaceUser | Get workspace user |
| Operation | What it does |
|---|
listCustomFields | List custom fields |
getCustomField | Get custom field |
createCustomField | Create custom field |
| Operation | What it does |
|---|
createTag | Create workspace tag |
updateTag | Update workspace tag |
deleteTag | Delete workspace tag |
| Operation | What it does |
|---|
listSpaceChannels | List workspace channels |
listChannelTemplates | List a channel's message templates |
listClosingNotes | List closing-note categories |
Upsert a contact — the operation whose name finally matches what it does
Until the operation wave upsertContact posted to the strict CREATE path, so for a contact that already existed it returned an error and never updated. It now calls POST /contact/create_or_update/{identifier}. No working configuration changed behaviour: for a new contact both paths did the same thing, and for an existing one the old call simply failed. Strict create is still available as createContact.
Set Operation to upsertContact, then fill in:
| Field | Value | Notes |
|---|
idField | email | id, email or phone — respond.io addresses contacts by a typed identifier, not a bare id |
idValue | {{ myTrigger.email }} | The identifier value |
firstName | {{ myTrigger.firstName }} | |
lastName | {{ myTrigger.lastName }} | |
customFields | {"plan": "{{ myTrigger.plan }}"} | Must already exist in the workspace |
Sets {{contact.id}} and {{contact.contact}}. The API needs respond.io's Business plan or above — a 403 here is the plan, not a permission.