Authorization: Bearer <token> flow used by human agents in the dashboard, and a dedicated Inbox API Token flow (Authorization: InboxToken <token>) used by external integrations and automation agents.
Base URL https://api.genuka.com · Auth Authorization: Bearer <token> + X-Company: <companyId> · See Getting Started for shared conventions, pagination & error formats.
Pagination note: All list endpoints in this domain use cursor-based pagination instead of the standard offset pagination. The response wrapper replaces thepaginationobject with ameta/linkscursor block from Laravel’s cursor paginator. Theper_pagequery parameter is honoured (default values vary per endpoint, commonly 25–50).
Endpoints at a glance
Automation Agents
Inbox Agents are automation bots that can receive webhook events and send messages via a scoped API token. When an agent is created, both thewebhook_secret and api_token (plain-text) are returned once in the response.
GET /2023-11/admin/inbox/agents
List automation agents for the authenticated company.
- Query parameters:
Request example
200 OK
400— MissingX-Companyheader (company_id_required)401— Invalid or expired token
POST /2023-11/admin/inbox/agents
Create a new automation agent. The response includes webhook_secret and api_token in plain text — these values are shown only once. Store them securely.
- Request body:
multipart/form-dataorapplication/json
Request example
200 OK
Same shape as the list item above, plus:
422— Validation failure (e.g. invalidwebhook_eventsvalue)
GET /2023-11/admin/inbox/agents/available-events
Return the list of event strings an agent may subscribe to via webhook_events.
Request example
200 OK
GET /2023-11/admin/inbox/agents/{agent}
Get a single automation agent.
- Path parameters:
Request example
200 OK
404— Agent not found or does not belong to the company
PATCH /2023-11/admin/inbox/agents/{agent}
Update an automation agent. After updating allowed_channels or allowed_connectables, any conversations where the agent is assigned but no longer has access are automatically unassigned.
- Path parameters:
- Request body:
multipart/form-dataorapplication/json— all fields optional
Request example
200 OK
404— Agent not found422— Validation failure
DELETE /2023-11/admin/inbox/agents/{agent}
Soft-delete an automation agent.
- Path parameters:
Request example
200 OK
404— Agent not found
GET /2023-11/admin/inbox/agents/{agent}/logs
List webhook delivery and inbound API call logs for an agent. Supports cursor-based pagination.
- Path parameters:
- Query parameters:
Request example
200 OK
GET /2023-11/admin/inbox/agents/{agent}/logs/{log}
Get a single log entry including full request and response payloads.
- Path parameters:
Success response —
200 OK
POST /2023-11/admin/inbox/agents/{agent}/regenerate-api-token
Revoke all existing API tokens for the agent and issue a new one. The plain token is returned once in api_token.
- Path parameters:
Request example
Request body: None — no body required for this action endpoint.
200 OK
POST /2023-11/admin/inbox/agents/{agent}/regenerate-secret
Regenerate the webhook signing secret for an agent and reset the failure counter. The new secret is returned in webhook_secret once.
- Path parameters:
Request body: None — no body required for this action endpoint.
Success response —
200 OK
GET /2023-11/admin/inbox/agents/{agent}/stats
Aggregated activity statistics for an agent over a time period.
- Path parameters:
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/agents/{agent}/test-webhook
Send a test payload to the agent’s webhook_url to verify connectivity.
- Path parameters:
Request body: None — the test payload is fully server-generated. The server sends the following shape to the agent’s
webhook_url:
200 OK
422— Agent has nowebhook_urlconfigured
Assignment Rules
Assignment rules automatically route incoming conversations to specific agents based on channel, connectable, customer tags, or conversation labels.GET /2023-11/admin/inbox/assignment-rules
List all assignment rules for the company.
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/assignment-rules
Create an assignment rule. All referenced agent_ids must belong to the authenticated company.
- Request body:
Request example
200 OK
422— Validation failure or referenced agents do not belong to the company
GET /2023-11/admin/inbox/assignment-rules/{rule}
Get a single assignment rule.
- Path parameters:
Success response —
200 OK
PATCH /2023-11/admin/inbox/assignment-rules/{rule}
Update an assignment rule. All fields are optional (sometimes).
- Path parameters:
- Request body: same fields as create, all optional.
Success response —
200 OK
DELETE /2023-11/admin/inbox/assignment-rules/{rule}
Delete an assignment rule.
- Path parameters:
Success response —
200 OK
Company Settings
GET /2023-11/admin/inbox/company-settings
Get the inbox settings for the authenticated company.
Request example
200 OK
PATCH /2023-11/admin/inbox/company-settings
Update inbox company settings. All fields are optional.
- Request body:
Request example
200 OK
Conversations
GET /2023-11/admin/inbox/conversations
List conversations for the company. By default excludes archived, spam, and snoozed conversations. Results are sorted by pinned status then most recent message.
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/conversations
Create a new agent-initiated conversation. For WhatsApp conversations, whatsapp_connection_id is required and a channel record is automatically created.
- Request body:
Request example
200 OK
422—customer_idnot found, invalidprimary_channel, missingwhatsapp_connection_idfor WhatsApp
GET /2023-11/admin/inbox/conversations/search
Full-text search across conversations (subject, customer info) and message content. Message body content is decrypted server-side.
- Query parameters:
Request example
200 OK
GET /2023-11/admin/inbox/conversations/unread-count
Return the total number of conversations with unread customer messages for the authenticated user.
Request example
200 OK
GET /2023-11/admin/inbox/conversations/{conversation}
Get a single conversation. Customer tags and related relations are eagerly loaded.
- Path parameters:
Success response —
200 OK
404— Conversation not found or does not belong to the company
PATCH /2023-11/admin/inbox/conversations/{conversation}
Update conversation metadata. Broadcasts InboxConversationUpdated to other connected agents.
- Path parameters:
- Request body:
Success response —
200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/archive
Archive a conversation.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/unarchive
Unarchive a conversation.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/pin
Pin a conversation.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/unpin
Unpin a conversation.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/spam
Mark a conversation as spam.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/snooze
Snooze a conversation until a future date/time.
- Request body:
Request example
200 OK
422—untilis not a future date
POST /2023-11/admin/inbox/conversations/{conversation}/unsnooze
Remove the snooze from a conversation.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/assign
Assign a conversation to a human user and/or an automation agent. Sends an in-app notification to the newly assigned user and dispatches a conversation.assigned webhook to the newly assigned agent.
- Request body:
Request example
200 OK
422— Referenced user or agent does not belong to the company
POST /2023-11/admin/inbox/conversations/{conversation}/labels
Attach one or more labels to a conversation (additive, does not detach existing labels).
- Request body:
Request example
200 OK
DELETE /2023-11/admin/inbox/conversations/{conversation}/labels/{label}
Detach a label from a conversation.
- Path parameters:
Success response —
200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/read
Mark a conversation as read by the authenticated agent. Updates the per-user read cursor and dispatches WhatsApp read receipts asynchronously (blue checkmarks for the customer).
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/typing
Broadcast an agent-is-typing indicator to the conversation channel (expires after 10 seconds). Also sends the typing event to the public webchat channel so the customer sees “typing…”.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
Messages
GET /2023-11/admin/inbox/conversations/{conversation}/messages
List messages in a conversation (cursor-based, oldest first by default). Internal notes are included for agents.
- Path parameters:
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/conversations/{conversation}/messages
Send a message from the authenticated agent in a conversation. Supports text, internal notes, media uploads, templates, location, and more. Uses a 5-second deduplication window to prevent duplicate sends on rapid clicks.
This endpoint accepts multipart/form-data when uploading files, or application/json for text/template/structured messages. The content field may be sent as a JSON string in multipart requests.
- Path parameters:
- Request body:
Content shapes by type:
Request example (text message)
200 OK
404— Conversation not found or not in this company422— Validation failure (e.g. unapproved template, missing required fields)500— Media upload failure
PATCH /2023-11/admin/inbox/messages/{message}
Edit the body of a text message. Only the message’s sender may edit it. Also propagates the edit to WhatsApp if the conversation uses WhatsApp.
- Path parameters:
- Request body:
Request example
200 OK
403— Caller is not the message sender422— Message is not of typetext
DELETE /2023-11/admin/inbox/messages/{message}
Soft-delete (revoke) a message. Caller must be the sender or the message must be an internal note. Also propagates revocation to WhatsApp if applicable.
- Path parameters:
Success response —
200 OK
403— Caller is not the sender and the message is not an internal note
POST /2023-11/admin/inbox/messages/{message}/reactions
Add or update an emoji reaction from the authenticated agent. Also dispatches the reaction to WhatsApp.
- Path parameters:
- Request body:
Request example
200 OK
DELETE /2023-11/admin/inbox/messages/{message}/reactions
Remove the authenticated agent’s reaction from a message. Sends an empty emoji to WhatsApp to clear the reaction.
- Path parameters:
Success response —
200 OK
POST /2023-11/admin/inbox/messages/{message}/retry
Retry sending a message that has status = failed. Resets delivery records and re-dispatches to the channel.
- Path parameters:
Request body: None — no body required for this action endpoint.
Success response —
200 OK
404— Message not found, not in this company, or not infailedstatus
Labels
Labels are coloured tags applied to conversations for categorisation and filtering.GET /2023-11/admin/inbox/labels
List all conversation labels for the company.
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/labels
Create a label.
- Request body:
Request example
200 OK
PATCH /2023-11/admin/inbox/labels/{label}
Update a label. Uses the same form request as create (all fields optional when updating).
- Path parameters:
- Request body: all fields optional
Success response —
200 OK
DELETE /2023-11/admin/inbox/labels/{label}
Delete a label.
- Path parameters:
Success response —
200 OK
Reply Templates
Reply templates are pre-written responses (with optional attachments) that agents can quickly insert. Templates may be shared company-wide or private to their creator.GET /2023-11/admin/inbox/reply-templates
List reply templates visible to the authenticated agent (shared templates + own private templates).
- Query parameters:
Request example
200 OK
POST /2023-11/admin/inbox/reply-templates
Create a reply template.
- Request body:
Request example
200 OK
PATCH /2023-11/admin/inbox/reply-templates/{template}
Update a reply template. Only the creator or shared templates may be updated.
- Path parameters:
- Request body: all fields optional (same fields as create)
Success response —
200 OK
404— Template not found or access denied
DELETE /2023-11/admin/inbox/reply-templates/{template}
Delete a reply template. Only the creator or shared templates may be deleted.
- Path parameters:
Success response —
200 OK
Sticker Packs
Sticker packs group small transparent images for use in conversations. Global packs (managed by Genuka) cannot be modified by company admins.GET /2023-11/admin/inbox/sticker-packs
List sticker packs available to the company (includes global packs).
- Query parameters:
Success response —
200 OK
POST /2023-11/admin/inbox/sticker-packs
Create a sticker pack. Stickers may be uploaded immediately via multipart form-data.
- Request body:
multipart/form-data
Success response —
200 OK
GET /2023-11/admin/inbox/sticker-packs/{pack}
Get a single sticker pack.
- Path parameters:
Success response —
200 OK
PATCH /2023-11/admin/inbox/sticker-packs/{pack}
Update a sticker pack’s metadata. Global packs (is_global = true) cannot be modified.
- Path parameters:
- Request body: all optional
Success response —
200 OK
403— Pack is a global pack
DELETE /2023-11/admin/inbox/sticker-packs/{pack}
Delete a sticker pack and all its stickers. Global packs cannot be deleted.
- Path parameters:
Success response —
200 OK
POST /2023-11/admin/inbox/sticker-packs/{pack}/stickers
Add stickers to an existing pack. Global packs cannot be modified.
- Path parameters:
- Request body:
multipart/form-data
Success response —
200 OK
DELETE /2023-11/admin/inbox/sticker-packs/{pack}/stickers/{media}
Remove a single sticker from a pack. Global packs cannot be modified.
- Path parameters:
Success response —
200 OK
403— Pack is global404— Sticker not found in this pack
GIPHY
These endpoints proxy the GIPHY API and require a valid GIPHY API key to be configured server-side.GET /2023-11/admin/inbox/giphy/search
Search GIFs via GIPHY.
- Query parameters:
Request example
200 OK
422— Missing requiredqparameter503— GIPHY API key not configured
GET /2023-11/admin/inbox/giphy/trending
Get trending GIFs. Results are cached for 5 minutes.
- Query parameters:
Success response —
200 OK
Public Webchat
These endpoints are used by the customer-facing webchat widget. They do not require the standardAuthorization: Bearer or X-Company headers — the conversation ID acts as the identifier.
Internal notes (type internal) are never returned to the customer.
GET /2023-11/inbox/chat/{conversation}/messages
List messages for a webchat conversation. Returns messages in descending order (newest first).
- Path parameters:
- Query parameters:
Success response —
200 OK
Messages in the standard MessageResource shape, with an additional conversation key in the response envelope:
POST /2023-11/inbox/chat/{conversation}/messages
Send a message from the customer via webchat.
- Path parameters:
- Request body:
Request example
200 OK
403— Attempted to send aninternalmessage type
POST /2023-11/inbox/chat/{conversation}/read
Acknowledge that the customer has read the conversation. No per-customer read tracking is performed; this is a no-op acknowledgement.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
POST /2023-11/inbox/chat/{conversation}/request-unlock
Request a WhatsApp unlock link. Returns a wa.me deep link the customer can tap to send the unlock code.
- Path parameters:
Request body: None — no body required for this action endpoint.
Success response —
200 OK
404— Conversation not found
POST /2023-11/inbox/chat/{conversation}/typing
Broadcast a customer-is-typing indicator to the conversation’s agent-side channel.
Request body: None — no body required for this action endpoint.
Success response — 200 OK
Inbox API (Agent / Integration Tokens)
These endpoints authenticate via a dedicated Inbox API token issued by the agent management flow. The token must be passed asAuthorization: InboxToken <token>. The token carries scopes (send_text, send_template, send_media, upload_media) and allowed channel/connectable restrictions. Billable message types (e.g. WhatsApp template messages) debit one credit from the company wallet.
GET /2023-11/inbox/me
Return information about the authenticated Inbox API token. Useful for credential health checks (n8n, Zapier, etc.).
Request example
200 OK
POST /2023-11/inbox/messages
Send a message to a recipient. Automatically creates the conversation if one does not already exist for this recipient on the given channel.
- Request body:
Request example
201 Created
402— Insufficient credits (insufficient_credits)403— Token not allowed to send on the requested channel (channel_not_allowed) or insufficient scope (insufficient_scope)422— Invalid recipient (invalid_recipient)502— Channel dispatch failed (message_failed)
POST /2023-11/inbox/conversations/{conversation}/messages
Send a message into an existing conversation using an Inbox API token.
- Path parameters:
- Request body: same as
POST /2023-11/inbox/messagesminuschannelandto(those are derived from the existing conversation).
Success response —
201 Created
402— Insufficient credits403— Channel not allowed for this token or insufficient scope404— Conversation not found for the token’s company (conversation_not_found)502— Channel dispatch failed
