The Trama API

A REST API over your organization's data: what it reaches, what it deliberately doesn't, and where to get a key.

Trama's REST API gives you your own operation's data — opportunities, customers, conversations, quotes, catalogue and team — from outside the dashboard. It's the same data your team sees, with the same organization boundary.

It's available on every plan, at no extra cost, the free one included.

The basics

Base URLhttps://api.trama.so
VersionEverything hangs off /v1
FormatJSON in, JSON out. Content-Type: application/json on any request with a body
AuthAn organization API key, as a bearer token — see Authentication
Specapi.trama.so/v1/openapi.json, OpenAPI 3.1, generated from the code that serves the traffic
curl https://api.trama.so/v1/opportunities \
  -H "Authorization: Bearer $TRAMA_API_KEY"

What it can do today

Read: opportunities, customers, conversations and their transcripts, quotes and their attachments, catalogue products, team members.

Write: customers (create, update, archive) and catalogue products (create, update, archive).

Everything else is read-only on purpose. The paths that create an opportunity or move a card are the ones the agent and the automations write to, and a second writer with no notion of the qualification cycle would put the board out of sync with the conversation. If you need to write there, the door is the MCP server, which goes through the Trama Agent and respects the same rules the dashboard does.

What isn't there yet

Worth knowing before you design your integration around it:

  • No webhooks. Nothing calls you: you poll. updatedAt on every resource and the Retry-After on a 429 are what make polite polling possible.
  • You can't send a message. Not on WhatsApp, not on any channel. Replying to a customer goes through Trama.
  • No cursor pagination. It's limit / offset with a total — see Pagination.

Conventions

  • Timestamps are ISO 8601 in UTC (2026-08-29T14:03:11.000Z). Dates without a time (a check-in, for example) are plain YYYY-MM-DD strings.
  • IDs are opaque strings. Don't parse them and don't assume a format.
  • Optional fields come back as null, not absent. A field that exists in the schema is always in the response.
  • stage is a key, not a title. Every agency renames its board columns, so the key is the stable thing to branch on.
  • Amounts travel with their currency next to them. Nothing is normalized for you.

Every key is bound to one organization. No request names an organization, and nothing you read or write ever leaves the one that issued the key. If you operate several, you need one key per organization.

On this page