Scopes matrix

The current endpoint-to-scope mapping for the live API

View as Markdown

This page summarizes the current scope policy for the public API.

Live scope requirements

EndpointMethodRequired scope(s)Conditional scope(s)Summary
/api/v1/oauth/tokenPOSTNoneNoneExchange OAuth credentials for an access token
/api/v2/transcript_comments/{transcript_comment_id}GETengagements:read, transcript_comments:readNoneGet transcript comment
/api/v2/transcript_comments/{transcript_comment_id}PATCHengagements:read, transcript_comments:writeNoneUpdate transcript comment
/api/v2/transcript_comments/{transcript_comment_id}DELETEengagements:read, transcript_comments:writeNoneDelete transcript comment
/api/v2/companiesGETcompanies:readNoneList companies
/api/v2/companiesPOSTcompanies:writeNoneCreate company
/api/v2/companies/{company_id}GETcompanies:readNoneGet company
/api/v2/companies/{company_id}PATCHcompanies:writeNoneUpdate company
/api/v2/companies/{company_id}DELETEcompanies:writeNoneDelete company
/api/v2/companies/{company_id}/crm_associationPUTcompanies:writeNoneSet company CRM association
/api/v2/companies/{company_id}/crm_associationDELETEcompanies:writeNoneClear company CRM association
/api/v2/companies/{company_id}/engagementsGETengagements:readIf expand=companies: companies:read; if expand=contacts: contacts:read; if expand=owner: users:readList company engagements
/api/v2/contactsGETcontacts:readNoneList contacts
/api/v2/contactsPOSTcontacts:writeNoneCreate contact
/api/v2/contacts/{contact_id}GETcontacts:readNoneGet contact
/api/v2/contacts/{contact_id}PATCHcontacts:writeNoneUpdate contact
/api/v2/contacts/{contact_id}DELETEcontacts:writeNoneDelete contact
/api/v2/contacts/{contact_id}/crm_associationPUTcontacts:writeNoneSet contact CRM association
/api/v2/contacts/{contact_id}/crm_associationDELETEcontacts:writeNoneClear contact CRM association
/api/v2/contacts/{contact_id}/engagementsGETengagements:readIf expand=companies: companies:read; if expand=contacts: contacts:read; if expand=owner: users:readList contact engagements
/api/v2/engagementsGETengagements:readIf expand=companies: companies:read; if expand=contacts: contacts:read; if expand=owner: users:readList engagements
/api/v2/engagements/{engagement_id}GETengagements:readIf expand=companies: companies:read; if expand=contacts: contacts:read; if expand=owner: users:readGet engagement
/api/v2/engagements/{engagement_id}/transcript_commentsGETengagements:read, transcript_comments:readNoneList engagement transcript comments
/api/v2/engagements/{engagement_id}/transcript_commentsPOSTengagements:read, transcript_comments:writeNoneCreate engagement transcript comment
/api/v2/engagements/{engagement_id}/contactsPUTengagements:writeNoneReplace engagement contacts
/api/v2/engagements/{engagement_id}/tagsPUTengagements:writeNoneReplace engagement tags
/api/v2/engagements/{engagement_id}/transcript_timelineGETtranscript_timelines:readNoneGet engagement transcript timeline
/api/v2/tagsGETtags:readNoneList tags
/api/v2/tagsPOSTtags:writeNoneCreate tag
/api/v2/tags/{tag_id}GETtags:readNoneGet tag
/api/v2/tags/{tag_id}PATCHtags:writeNoneUpdate tag
/api/v2/tags/{tag_id}DELETEtags:writeNoneDelete tag
/api/v2/usersGETusers:readNoneList users
/api/v2/users/{user_id}GETusers:readNoneGet user

Notes

  • A valid credential without the route’s required or conditional scope returns 403.
  • workspace:admin can be used for full access across the current public API surface.
  • Engagement reads with expand=companies, expand=contacts, or expand=owner require the additional scopes shown above.