Skip to main content
OAuth clients need no key. Everything else — scripts, CI, self-hosted agents — uses an API key created under Settings → API keys and sent as a bearer token:

Scopes

A key carries only the scopes you grant it. A route that forgets to declare a scope stays session-only rather than falling open to every key, so a key never reaches more than it was given. data:schema without data:read is a genuinely useful combination: an agent can learn the shape of your database and answer questions about it without ever reading a row.
docs:publish is the widest of these in effect. Published documentation is served to every agent querying that database, so a key with it can change how everyone’s queries get written. Grant it deliberately.

Handling keys

  • Keys are stored hashed. TeamDuo cannot show you one again after it’s created.
  • Treat a key as equivalent to the access its scopes allow across every exposed datasource the owning account can reach.
  • Revoke and reissue rather than sharing one between systems — the audit ledger records which key ran a query, and that’s only useful if a key means one thing.