AIMERICAAPI · Developers

Scopes

Every route needs a scope; a token carries only the ones it was granted.

ScopeWhat it opensThird-party apps
users:readSee the people in your companyat once
users:writeChange people's names, extensions and rolesat once
numbers:readSee your phone numbersat once
numbers:writeAssign your phone numbersat once
devices:readSee your phones and appsat once
devices:writeManage your phones and appsat once
calls:readRead your call historyat once
calls:writePlace calls as youat once
calls:controlHold, transfer, record and hang up your live callsneeds approval
recordings:readListen to your call recordingsneeds approval
transcripts:readRead your call transcriptsneeds approval
presence:readSee who is availableat once
presence:writeChange your status and do-not-disturbat once
messages:readRead your text messagesat once
messages:writeSend text messages as youat once
voicemails:readListen to your voicemailsat once
voicemails:writeMark and delete your voicemailsat once
faxes:readSee your faxesat once
faxes:writeSend faxes as youat once
webhooks:manageBe told when calls and messages happenat once
account:readSee your company's name and planat once

Scopes marked needs approval touch what a person says on the phone: controlling a live call, listening to a recording, reading a transcript. An API key of your own company gets them at creation; an OAuth app used in a company other than the one that registered it must request them first (Developer → Apps → Request) and be approved by AIMERICA. Until then /oauth/authorize refuses those scopes with error=invalid_scope.

Each route names its scope in the reference (x-scope). A request without it answers 403 insufficient_scope:

HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer error="insufficient_scope", scope="calls:read"
{"error": {"type": "insufficient_scope", "message": "This token does not have the calls:read scope", "request_id": "…"}}

Keys created before 25 September 2026 keep their old names (calls:read, calls:write, messages:read, messages:write, numbers:read, contacts:read, contacts:write); the first five are accepted as they are by API v1, contacts stay on the app's older API.