Start here
Availability
This is a source-backed reference for the HTTP routes present in the application. The endpoint list below is generated from the same OpenAPI document the API serves, so it cannot drift from what actually exists. There is still no public Blendwave SDK, and the API is closed by default: a workspace is enrolled before its keys work.
Credentials
Authentication
Every workspace route takes an Authorization: Bearer header carrying a workspace API key, which begins bwsk_. A key belongs to one workspace and holds a fixed set of scopes chosen when it was created. Scopes cannot be edited afterwards: to change what a key may do, revoke it and create another. Keys are secret and belong on your server, never in a browser. Access is granted per workspace, so a key only works once Blendwave has enrolled that workspace.
Generic API channel credential
Connecting a Generic API channel creates a separate bearer secret scoped to that channel, shown on the channel screen under Server credentials. It is a different credential from a workspace API key and does a different job: it accepts inbound messages on that one channel and unlocks nothing else. Like the workspace key, it belongs on your server.
Current surface
Endpoints
Generated from the OpenAPI document at /api/v1/openapi.json, which is the machine-readable version of this page and needs no credentials to read. Each entry names the scope it requires.
Workspace API
- GET
/api/oauth/authorizeStart the consent flow in a browser.
- POST
/api/oauth/revokeHand back a token you no longer need.
- POST
/api/oauth/tokenExchange a code for tokens, or rotate a refresh token.
- GET
/api/v1/audit-logRead the tamper-evident audit trail.
- GET
/api/v1/contactsList contacts.
- POST
/api/v1/contactsCreate or update a contact by your own user id.
- GET
/api/v1/contacts/{id}Read one contact.
- PATCH
/api/v1/contacts/{id}Update a contact, or bind one of your user ids to it.
- GET
/api/v1/conversationsList conversations.
- GET
/api/v1/conversations/{id}Read one conversation with its thread.
- PATCH
/api/v1/conversations/{id}Change status, priority or assignee.
- GET
/api/v1/conversations/exportBackfill historical conversations with their messages.
- GET
/api/v1/data-requestsList subject-rights requests for this workspace.
- POST
/api/v1/data-requestsRaise an export or deletion request for a contact.
- GET
/api/v1/help-center/articlesList published help articles.
- GET
/api/v1/help-center/articles/{slug}Read one published article by slug.
- GET
/api/v1/meValidate a key and read back what it may do.
- GET
/api/v1/messagesDescribe the send endpoint.
- POST
/api/v1/messagesSend an outbound reply, or add an internal note.
Generic API channel, guided setup
- POST
/api/v1/inboundIngest a message through a configured Generic API channel.
Generic inbound payloads
The inbound route is tied to a configured Generic API channel and its scoped bearer. Its payload schema is not published in this minimum guide. Do not guess a universal payload. Use the route only with a channel contract supplied by Blendwave.
Safe retries
Idempotency
The developer-preview POST /api/v1/messages route and guided POST /api/v1/inbound route accept an optional Idempotency-Key header. Send a unique, stable key for each logical request. Repeating the same key with the same body can return the cached result. Reusing it with a different body returns 409. A request already in progress can return 425.
Current request caching is not documented as durable across deployments. Keep your own stable request identifier and reconciliation record.
Failure contract
Errors
Error responses use an error code and may include a human-readable message. Rate limits return 429, aRetry-After header, and retry_after_ms when available. Handle status codes first, then the machine-readable error code.
- 400
- Invalid JSON, identifier, payload, or idempotency key.
- 401
- Missing or invalid credentials.
- 404
- The scoped resource was not found.
- 409
- An idempotency key was reused with a different body.
- 425
- The matching request is still in progress.
- 429
- The applicable rate limit was reached.
- 503
- The requested prelaunch surface is unavailable.
Scope boundary
Service routes are not customer API routes
Provider status callbacks, payment webhooks, scheduled jobs, authentication callbacks, and internal operator streams are service routes. Do not call them as application endpoints. Their signature and verification contracts belong to the matching provider configuration, not this public guide.
Need an endpoint enabled or a contract clarified? Contact Blendwave.