Skip to main content

API Key

You must first create an API Key in Wavelength. It is located under “Manage Integrations”, then scroll to the bottom and click “Manage API Keys”. Here, you can see your existing keys, their names and expiration. You can delete existing ones. When creating a new API key, the name must be unique in your organization. Once the key has been created, you will be shown a one-time dialog box with your new API key. You should copy this down somewhere safe — we will not show this again. If you lose your API key, you will need to make a new one. For these endpoints, set the Authorization header to your API key value directly (for example Authorization: <API_KEY>). Do not add a Bearer prefix; the full header value is validated as the key.

List Interactions

GET /interactions

Returns a paginated list of interactions (top-level tickets) for your organization.

Query Parameters

Example: List all interactions

Example: Filter by status

Example: Filter by multiple statuses

Example: Filter by source

Example: Filter by source (multiple)

Example: Filter by category

Example: Filter by tag

Example: Filter by team owner

Example: Incremental sync (interactions updated in the last 24 hours)

Response

Error Responses


Get Interaction with History

GET /interactions/:id

Returns a single interaction and its full reply/message thread.

Path Parameters

Example

Response

The history array contains all messages, replies, and internal notes for the interaction in chronological order. The from field identifies the message author. For Gmail interactions, to and cc are included when available.

Error Responses


List Teams

GET /teams

Returns all teams in your organization. Use team IDs with the team_owner_id filter on GET /interactions.

Example

Response

Error Responses


List Categories

GET /categories

Returns all categories in your organization. Use category IDs with the category_id filter on GET /interactions.

Example

Response

Error Responses


List Tags

GET /tags

Returns all account tags in your organization. Use tag IDs with the tag_id filter on GET /interactions.

Example

Response

Error Responses


Create Interaction

POST /interactions

Creates a new interaction (a top-level ticket) in Wavelength from your own integration. This is the endpoint to use for tracking how your customers interact with your product. The interaction is created with source API, attributed to the integration linked to the API key you authenticate with.

Headers

  • Content-Type: multipart/form-data (required)
  • Authorization: <API_KEY> (required; raw key, no Bearer prefix)

Request Body (multipart/form-data)

user, additional_properties, and any other object field are sent as JSON-encoded strings inside the multipart form.

User Object

*If you include a user object at all, it must contain at least one of email, id, or source_specific_id. Omit user entirely to create the interaction as Anonymous. How the user is resolved:
  • id and source_specific_id must match a customer that already exists in your organization. If no match is found, the request fails with a 400.
  • email alone does not require a pre-existing customer — if no matching Wavelength contact exists, one is created.

Example: Minimal request

query is the only required field.

Example: With a user and a source-specific ID

You can then add replies to this ticket using the same source_specific_id:

Example: Attaching to a company by source-specific ID

Example: Attaching to a company by Wavelength ID

Example: Attaching files

Upload files directly with files:
Attach multiple files by repeating the field:
Or have Wavelength fetch images from URLs (comma-separated):

Response

Error Responses

Errors take the following format in JSON:

Important Notes

  • File Size Limit: 4MB per file.
  • Supported Image Types: JPG and PNG.
  • Rate Limiting: 30 events per second. Exceeding this returns a 429. If you need a higher rate, please let us know.
  • Anonymous Interactions: Unlike POST /interactions/reply, the user field is optional here — omit it and the interaction is attributed to Anonymous.

Create Interaction Reply

POST /interactions/reply

Creates a new reply/message for an existing ticket. Supports multiple ticket identification methods and file attachments.

Query Parameters

Exactly one of the following is required:

Headers

  • Content-Type: multipart/form-data (required for file uploads)
  • Authorization: <API_KEY> (required; raw key, no Bearer prefix)

Request Body (multipart/form-data)

User Object

*At least one of id or email is required. If only email is provided, it will be used as the user identifier.

Ticket Identification

The endpoint requires exactly one query parameter for ticket identification:
  • id - Wavelength ULID of the ticket
  • source_specific_id - Source-specific ID of the ticket
Both parameters cannot be provided simultaneously, and at least one is required.

Example Request (with Wavelength ULID)

Example Request (with source_specific_id)

Example Request (with file uploads)

Response

Error Responses

400 Bad Request

404 Not Found

409 Conflict (Duplicate)

413 Payload Too Large

Important Notes

  • File Size Limit: 32MB per file
  • Supported File Types: Any file type can be uploaded
  • Deduplication: Duplicate source_specific_id values are rejected for Slack/Community Slack sources
  • User Requirement: User object with user.id is now mandatory (no anonymous users)
  • Query Parameter Exclusivity: Exactly one of id or source_specific_id must be provided, not both
  • Rate Limiting: Subject to rate limiting (60 requests per minute per API key/IP)