Skip to main content
v2 is one API for every platform Inboxapp supports. v1 is frozen and stops responding on 3 December, 2026. Every v1 response carries a Sunset header with that date.
After 3 December, 2026, /api/v1 returns 410 Gone, and webhook subscriptions still on the legacy event format start receiving v2 events.

What stays the same

  • Tokens. Your API token works on both versions.
  • Rate limits. 300 requests a minute, 10,000 an hour and 100,000 a day per team, shared between v1 and v2.
  • Plans. Lists and campaigns need an outreach-enabled plan. Messaging someone who isn’t a contact yet needs the Advanced API add-on.
  • Webhook delivery. The same signature header, and the same 7-day replay window.

Start here

Five v1 endpoints have no v2 endpoint of the same shape. Most integrations use at least one.

Quick send

POST /threads/messages becomes POST /messages with a profile target.
The response is { message, thread }. Store thread.id: a later send can use { "type": "thread", "threadId": "…" }. platform is required and must be the account link’s platform. If you have an Inboxapp contact ID instead of a platform ID, use { "type": "contact", "accountLinkId": "…", "contactId": "…" }.

Lookup by username

GET /threads/lookup-by-username becomes two calls: find the contact, then its threads.
Pass username without its @.

Reactions

The doubled path segment is gone, and the thread ID leaves the path. Both return the message’s reactions instead of { success, messageId }.

Create thread

POST /threads is removed. A thread appears when its first message is sent, and POST /messages returns it.

The /campaigns/v2 alias

Removed. See Lists and campaigns.

What changes everywhere

Pagination

paginate.ts
A cursor is only valid with the filters it was issued for.

Errors

Each endpoint in the reference lists its codes. New codes can be added within v2, so handle unknown ones by status.

Endpoint map

Threads

Thread filters

Thread fields

Messages

Message fields

Prospects become contacts and profiles

v1’s prospect splits in two:
  • A profile is the person’s account on one platform: username, handle, displayName, avatarUrl, bio, follower counts, and platformData.
  • A contact is your team’s record of the person: statusId, tagIds, notes, valuation, assigneeId, and their profiles.
A contact has its own ID. v1 prospect IDs are not contact IDs, so look contacts up by platform identity once and store the new IDs. Reads never create a contact: a person your team has never talked to or imported has none. Message them with a profile target.

Profile fields

Tags, statuses, colors

Lists and campaigns

In v2, lists, leads, import jobs and campaigns are available to outreach-enabled plans only. On such a plan, their endpoints are listed in the API explorer in your team’s settings, and they keep their v1 request and response shapes. They can change or be removed within v2, and their errors use the v2 body.

Webhooks and events

A subscription receives one version. New subscriptions receive v2. To switch an existing one, open it in Settings → Webhooks and select Move to v2. You can’t move back to v1. v2 events are thin. They name the object that changed and carry only the values of the change. Read object.url for the current state.
Sequence numbers are shared by both versions and by webhooks. To backfill after downtime, call GET /events?afterSeq=… with the seq of the last event you processed. Signatures are unchanged: see Verifying webhook signatures.

Send safely

POST /messages takes an Idempotency-Key header. A retry with the same key and body returns the original result with 200 instead of sending twice.
send.ts

Checklist

  • Change the base URL to /api/v2
  • Read collections from data and page with nextCursor
  • Replace bracket query parameters with repeated keys
  • Branch on error code
  • Replace prospect IDs with contact IDs, and prospect fields with profile and contact
  • Send through POST /messages with an Idempotency-Key
  • Move lists and campaigns to their v2 endpoints, on an outreach-enabled plan
  • Switch webhook subscriptions to v2 and read object.url for state