Device login (people)
An RFC 8628 device-authorization flow: request a device login, approve it in the browser, poll for the credential. This is what the Claude plugin’s/addison:login and sumcli login do for you. If you’re a person using an agent or a shell, use the plugin or sumcli rather than implementing the flow yourself.
Machine-to-machine (automation)
Your Summation admin issues aclient_id and client_secret with scopes. Exchange them for an access token:
Scopes
Tokens carry scopes that gate access. A valid token missing a scope gets a403 with the missing scope named.
The default rule is the HTTP method:
GET needs agent:read, everything else needs agent:write. Identity endpoints (/v1/me, auth status, logout, org details) authenticate but require no scope at all.
Three sets of operations break that rule, and each one bites.
File imports are agent:write, not tables:append
The name suggests otherwise, but every file-import operation enforces agent:write:
tables:append will not open any of them.
Some GETs need tables:append
agent:read is not enough for these: they sit inside the append surface, so a read-only token gets a 403:
Some POSTs need only agent:read
These are reads exposed over POST because they take a body. A read-only token is sufficient:
The full
tables:append set is: POST/PUT /v1/tables/{table_id}/rows, all five /v1/tables/{table_id}/ingestion-batches operations, the three /v1/data-syncs/{sync_id} operations, and POST /v1/sum-apps / DELETE /v1/sum-apps/{slug}. Everything else follows the method rule above.Never paste a personal bearer token into client config. For MCP clients, headerless registration plus browser approval is the supported path for people. See MCP Server.