Skip to main content
Every request to the Topo API must be authenticated with an API key. Keys are scoped to the exact permissions your integration needs, so you can grant read-only access to one key and full write access to another — all within the same workspace.

Create an API key

1

Open your workspace settings

Navigate to Settings → Developers → API Keys in the Topo dashboard.
2

Create a new key

Click Create Key, give it a descriptive name (e.g. crm-sync-production), and select the scopes your integration requires.
3

Copy and store the key securely

Your key is shown once immediately after creation. Copy it to a secure secret store (such as your CI/CD secrets manager or a vault). Topo does not store the raw key value — if you lose it, you must rotate to a new one.
API keys are only displayed once at creation time. Store your key in a secrets manager immediately — you cannot retrieve it again from the Topo dashboard.

Pass the key in requests

Include your API key as a Bearer token in the Authorization header of every request:
Requests without a valid Authorization header are rejected with a 401 Unauthorized response before they reach any endpoint logic.

Available scopes

Scopes follow a resource:action naming convention. Grant only the scopes your integration actually uses.
The ApiKeyScope enum also declares signals:read, crm:read, tools:execute, exclusions:read, and exclusions:write for Topo AI agent capabilities. None of those scopes gate a /v1 REST endpoint today — the REST exclusion endpoints use the split contact_exclusions:* and account_exclusions:* scopes.
Every endpoint names the scope it requires in its own reference page. GET /v1/me is the one exception — it needs a valid key but no particular scope, so you can always use it to inspect a key.

Verify your key with GET /v1/me

The /v1/me endpoint returns the identity and permissions of the calling key — useful for confirming your key is valid and that it carries the scopes you expect.
Response
string (UUID)
required
Unique identifier of the API key.
string (UUID)
required
The workspace this key belongs to.
string
required
The human-readable name you gave this key at creation time.
string
required
The leading characters of the raw key value — safe to display in logs or UIs to identify which key was used.
string[]
required
List of permission scopes granted to this key.
string (ISO 8601)
required
Timestamp of when the key was issued.
string (ISO 8601) | null
required
Timestamp of the last request made with this key, or null if it has never been used.
Example response

Authentication error responses

See Errors & Rate Limits for the full error response shape.

Security best practices

One key per integration. Create a separate API key for each integration or deployment environment (e.g. crm-sync-staging vs crm-sync-production). This limits the blast radius if a key is compromised and makes it easier to audit usage.
  • Least privilege — only request the scopes your integration needs. A read-only reporting tool should never have write scopes.
  • Rotate regularly — retire old keys and issue fresh ones periodically, or immediately after any suspected exposure.
  • Never commit keys to source control — use environment variables or a secrets manager to inject keys at runtime.
  • Monitor last_used_at — keys that haven’t been used recently may be safe to revoke.