Start

Messages

Send a message with POST /api/messages.

Endpoint

POST https://appkeepr.com/api/messages

Use a workspace API token and an existing channel. Follow Quickstart to create both.

Headers

HeaderRequiredValue
AuthorizationYesBearer <workspace-api-token>
Content-TypeYesapplication/json
Idempotency-KeyNoStable event ID for safe retries.

Send a message

Request
curl https://appkeepr.com/api/messages \
  -H "Authorization: Bearer $APPKEEPR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: signup-1044" \
  -d '{
    "channel": "signups",
    "body": "Ada created an account.",
    "title": "New signup",
    "icon": "๐Ÿ‘‹",
    "fields": [{"label": "Customer", "value": "Ada"}],
    "actions": [{"label": "Open profile", "url": "https://example.com/users/1044"}]
  }'

Responses

201 Created โ€” a new message was created.

{ "messageId": "0f6211b8-9d26-4af1-83b2-a8cbd64a0378", "outcome": "created" }
StatusMeaning
400Invalid input.
401Missing, invalid or revoked token.
404Channel or project does not exist in this workspace.
409Idempotency key was already used for different content.
413Body exceeds 32 KiB.
415Content type is not JSON.
429Workspace capacity exceeded; honor Retry-After.
503Could not accept the message. Retry with the same key and content.

Request body

Only channel and body are required. Send JSON; unknown properties are rejected and the body limit is 32 KiB.

FieldMeaning
channelRequired existing channel name.
bodyRequired text, 1โ€“4,000 Unicode code points after trimming.
titleOptional title, up to 180 code points after trimming. An empty title is omitted.
projectOptional existing project name. Omitted or null means no project.
iconOptional single emoji sequence.
fieldsUp to 10 {label,value} pairs: label 80 and value 1,000 code points. Defaults to [].
actionsUp to 3 {label,url} links: label 40 and URL 2,048 code points. HTTP(S) only, with no URL credentials. Defaults to [].
occurredAtOptional RFC3339 timestamp with UTC or an explicit offset. Defaults to the time the message is first accepted.

Channel and project must already exist in the token's workspace. Use their exact names: 1โ€“120 lowercase ASCII letters, numbers and single hyphens between words.

Idempotency

Set the optional Idempotency-Key header to your stable event ID. It accepts 1โ€“220 visible ASCII characters without spaces.

Retry with the same key, channel, project and content, including occurredAt if you supplied it. Reusing a key with different content returns 409.

Keys are scoped to a channel and remain valid after token changes or monthly resets.

Retry safely

A timed-out request may have succeeded. Retry with the same key and content.

OpenAPI schema ยท Node.js SDK ยท Troubleshooting

On this page