OdyDocs

Scopes

Narrow an API key to exactly what an integration needs. One scope table governs both the REST API and the MCP server.

Scopes narrow a key within its creator's access. They never grant anything the member who created the key couldn't do themselves. The same scope gates a REST endpoint and its MCP twin, so a read-only key produces a genuinely read-only AI assistant.

#Scope reference

ScopeLabel in the appREST endpointsMCP tools
contacts:readRead contactsGET /contacts, GET /contacts/:idlist_contacts
contacts:writeManage contactsPOST /contacts, PATCH /contacts/:id, DELETE /contacts/:idcreate_contact, update_contact, delete_contact
conversations:readRead conversationsGET /conversations, GET /conversations/:id, GET /calls, GET /messages/searchlist_conversations, get_conversation, search_messages, workspace_summary, wait_for_message
conversations:writeUpdate conversationsPATCH /conversations/:idset_conversation_status
messages:sendSend messagesPOST /messagessend_message
numbers:readRead numbersGET /numberslist_numbers
numbers:manageBuy numbers & 10DLCGET /numbers/available, POST /numbers, /messaging*search_numbers, buy_number, get_messaging_status, submit_10dlc_registration
calls:placePlace AI callsPOST /callsplace_call
agent:manageManage AI agentGET/PATCH /agent, POST /agent/publish, POST /numbers/:e164/connect, …/disconnectget_agent, configure_agent, connect_agent_to_number
webhooks:manageManage webhooks/webhooks*, GET /webhook-events—

All paths are relative to https://api.ody.co/v1/api. GET /openapi.json needs no key at all.

#How scopes behave

  • Full access by default. A key created with every scope selected — or before scopes existed — has full access, including scopes added later. The app shows it as Full access.
  • Narrowed keys get exactly their list. An explicit subset grants only those scopes. A key with zero scopes can't be created.
  • REST: an out-of-scope call returns 403 permission_denied naming the missing scope.
  • MCP: tools the key can't use are not advertised in tools/list, so the assistant never sees them. If a client calls one anyway, it gets a tool error naming the scope. See MCP safety.
IntegrationScopes
Read-only AI assistantcontacts:read, conversations:read, numbers:read
Inbox assistant that can replythe above + messages:send, conversations:write
CRM contact synccontacts:read, contacts:write
Order-notification sendermessages:send
Event-driven backendwebhooks:manage + whatever it reads
Agent Phone provisioning (numbers → 10DLC → Astra → calls)numbers:read, numbers:manage, agent:manage, calls:place
Analytics exportconversations:read
Last updated Wed Oct 14 2026 00:00:00 GMT+0000 (Coordinated Universal Time)Something wrong on this page? Tell us