Docs

Overview

The TrulyInbox Public API — a key-authenticated REST surface over your warmup and deliverability data, and how to make your first request.

The TrulyInbox Public API gives external consumers — automation tools (n8n, Zapier), AI agents, and partner integrations — programmatic access to your TrulyInbox workspaces.

Every endpoint lives under a workspace-scoped path:

/v2/workspaces/{workspaceId}/...

What you can do

DomainCapabilities
AccountsConnect, list, read, disconnect, and delete email accounts; inspect DNS and setup score; bulk operations across up to 50 accounts.
WarmupRead and update warmup settings; enable, pause, and resume warmup per account; read per-message send history.
TagsList and create tags; set the tags on an account.
AnalyticsRead workspace overview, trends, leaderboard, deliverability, and per-account stats.
NotificationsList notifications; mark one as read; mark all as read.
WorkspaceRead and rename the workspace; list, invite, re-role, and remove its members.
Provider workspacesConnect a Google Workspace or Microsoft 365 tenant and bulk-import its mailboxes.
BillingRead the organization plan, usage against limits, and resolved capabilities.

Base URL

https://api-norma.trulyinbox.com

The base URL mirrors the backend's PUBLIC_API_BASE_URL configuration. The interactive Try it playground on each endpoint page targets the same base URL, so you can exercise requests without leaving the docs.

Get an API key

API keys are created from the TrulyInbox web app:

  1. Open Settings → API keys at /settings.
  2. Create a key. Choose its type and scopes (see Authentication).
  3. Copy the plaintext key immediately — it is shown exactly once and cannot be retrieved again. Store it somewhere safe.

There are two key types:

  • Workspace key (ti_ws_…) — bound to a single workspace.
  • Personal key (ti_pk_…) — acts as your user across any workspace you belong to.

Find your workspace id

Every path is workspace-scoped — /v2/workspaces/{workspaceId}/… — so a request needs the numeric id of the workspace you are reading or changing.

To read it from the web app: open Settings → Workspaces and select the workspace you want. The id appears in the address bar as the workspaceId search parameter:

https://app.trulyinbox.com/settings?section=workspaces&workspaceId=123
                                                                   ↑
                                                          your workspace id

If you created a workspace key, it is already bound to one workspace — the one it was created for — and calling any other workspace with it returns Api.WorkspaceForbidden (403). A personal key works against every workspace you are a member of, so you choose the id per request.

A personal key granted the workspace:provision scope can also read the ids over the API with GET /v2/workspaces, and create new ones with POST /v2/workspaces. Both additionally require that the key belongs to an organization owner, so for most integrations reading the id from the app as above — or storing it alongside the key in your configuration — remains the simpler path.

Your first request

Every request needs an Authorization: Bearer <key> header. Replace :workspaceId with the numeric id of your workspace.

curl https://api-norma.trulyinbox.com/v1/workspaces/123/tags \
  -H "Authorization: Bearer ti_ws_your_key_here"

A successful response uses the standard envelope:

{
  "success": true,
  "data": [
    { "id": 1, "name": "production" },
    { "id": 2, "name": "cold-outreach" }
  ],
  "errorCode": null,
  "errorMessage": null
}

The shape of data is documented per endpoint in the API reference. The envelope itself — and the error codes that can appear in errorCode — are documented once under Errors.

How it fits together

  • Authentication is via an API key passed as a bearer token. See Authentication.
  • Authorization is enforced by scopes stamped on the key, intersected with the key's role in the target workspace. See Scopes.
  • Rate limiting is applied per key on a fixed window, with limits that vary by your plan tier. See Rate limits.
  • Responses use a uniform envelope and 6-digit error codes. See Errors.
  • Changes are recorded with dates, and breaking ones are announced 90 days before they take effect. See Changelog.
  • Partner integrations — where you run the OAuth consent screen and keep the refresh token — follow their own contract. See Partner integration.

Ready to go deeper? Browse the full endpoint reference under Public API.