About
Every developer-API call runs as the key’s owning user. Two things then decide whether a call is allowed to proceed:- Your scopes — is the key permitted to run this kind of operation at all?
- Your organization’s access — does your org own (or have shared access to) the specific records the call references?
403 before any data is read
or written. You never get back a record your organization can’t see.
Request checks
Under the hood, an authorized call passes these checks in order. They map to the two questions above plus the always-on identity and visibility guarantees:
Authentication, scopes, and subscription access are covered in the
Overview. This page is about
organization access, which is what keeps one org’s data invisible
and untouchable to another.
Organization access
Each operation declares which of its variables are resource ids — thedealId, contactId, pipelineId, or destination stageId it acts on. Those
are checked against your organization before the operation runs, at one of two
levels:
Most operations accept owned or shared access. A call that references an id
your org can neither own nor reach returns
403 forbidden. The same response
also covers missing or deleted guarded records; it does not reveal which case
applies. Where an operation guards a list of ids (for example the userIds
and contactIds on
createDeal / updateDeal), one foreign id fails the whole call rather than
being partially applied.
Not every id is a pre-checked resource idThe gateway pre-checks the ids an operation declares as resource ids — which
varies by operation. A secondary id an operation doesn’t declare (for
example a tag id on a contact write) isn’t a preflight
403; it’s validated
by the operation as it runs and surfaces its own error (an unknown tag comes
back as NOT_FOUND, not forbidden). Each area’s page notes what it guards.Structure edits require ownershipA few operations require owned access, not just shared — editing the
structure of a pipeline (renaming or reordering its stages, deleting it) is
the pipeline owner’s prerogative, so those calls return
403 forbidden on a
pipeline that’s merely shared with you. Reading and moving deals within a
shared pipeline works normally.What a 403 means
There are two distinct403s — the code tells you which check failed:
A guarded id with a malformed UUID spelling or a value shape that cannot be
an id returns
400 bad_request. Values that could name a record still undergo
the access check; an empty guarded id list can be refused with 403.