For AI agents: markdown of this page — /docs-content-en/infra/access/audience-proposals.md documentation index — /llms.txt
Check or cancel an audience request
GET /v1/infra/servers/:id/audience-proposals/:proposalId
POST /v1/infra/servers/:id/audience-proposals/:proposalId/cancel
Let the original API key read or cancel its own request to change application access. The original operation returns proposalId in error.details.proposalId with 409 AUDIENCE_APPROVAL_REQUIRED. Another key belonging to the same owner cannot access the request.
An API key cannot approve a request. A signed-in person makes that decision in their account. APPROVED means consent has been given, not that the change has been applied: retry the original operation with the same key, exact parameters and approvalId. Cancellation itself does not change access.
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
Parameterid |
Inpath | Typestring (UUID) | Requiredyes | DescriptionServer ID from the original operation; see List servers |
ParameterproposalId |
Inpath | Typestring (UUID) | Requiredyes | DescriptionRequest ID from error.details.proposalId |
The cancellation body is optional. If provided, it must be an empty object {}. The verified X-Api-Key identifies the caller; body fields cannot supply an identity.
Examples
curl — check
curl "https://vibecode.bitrix24.com/v1/infra/servers/SERVER_ID/audience-proposals/PROPOSAL_ID" -H "X-Api-Key: YOUR_API_KEY"
curl — cancel
curl -X POST "https://vibecode.bitrix24.com/v1/infra/servers/SERVER_ID/audience-proposals/PROPOSAL_ID/cancel" -H "X-Api-Key: YOUR_API_KEY"
JavaScript — check
const response = await fetch(
`https://vibecode.bitrix24.com/v1/infra/servers/${serverId}/audience-proposals/${proposalId}`,
{ headers: { 'X-Api-Key': apiKey } },
)
const { proposal } = await response.json()
console.log(proposal.state)
JavaScript — cancel
const response = await fetch(
`https://vibecode.bitrix24.com/v1/infra/servers/${serverId}/audience-proposals/${proposalId}/cancel`,
{ method: 'POST', headers: { 'X-Api-Key': apiKey } },
)
const { proposal } = await response.json()
console.log(proposal.state)
Response fields
A successful response is { "proposal": ... }, without a success or data envelope. The table lists the main fields; the response also includes the exact operation, original, proposed and current access snapshots, participant labels and differences.
| Field | Type | Description |
|---|---|---|
Fieldproposal.id |
Typestring (UUID) | DescriptionRequest ID |
Fieldproposal.state |
Typestring | DescriptionPENDING, APPROVED, APPLIED, REJECTED, CANCELLED, EXPIRED or STALE |
Fieldproposal.baseRevision |
Typestring | DescriptionAccess revision when the request was created; a decimal string |
Fieldproposal.currentRevision |
Typestring | DescriptionCurrent access revision; a decimal string |
Fieldproposal.expiresAt |
Typestring | DescriptionRequest expiry in ISO 8601 |
Fieldproposal.canDecide |
Typeboolean | DescriptionAlways false for an API key |
Fieldproposal.canCancel |
Typeboolean | DescriptionWhether the request can be cancelled now |
Fieldproposal.resultEntityId |
Typestring (UUID), optional | DescriptionID of the record created when applied; not a token or secret URL |
Response example
Only the ID, state and revisions from the status response are shown below:
{
"proposal": {
"id": "00000000-0000-4000-8000-000000000001",
"state": "PENDING",
"baseRevision": "0",
"currentRevision": "0"
}
}
Successful cancellation returns the CANCELLED state.
Error response example
404 — the request does not exist or belongs to another caller:
{
"success": false,
"error": { "code": "NOT_FOUND", "message": "Proposal not found" }
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeVALIDATION_ERROR |
DescriptionInvalid UUID or a nonempty cancellation body |
| HTTP401 | CodeMISSING_API_KEY |
DescriptionNo key was supplied |
| HTTP401 | CodeINVALID_API_KEY |
DescriptionThe key was not recognized |
| HTTP403 | CodeAUDIENCE_APPROVAL_FORBIDDEN |
DescriptionThe current key, its owner or portal binding no longer permits the operation |
| HTTP404 | CodeNOT_FOUND |
DescriptionNo server or request in the required portal, or the request was created by another caller |
| HTTP409 | CodeAUDIENCE_APPROVAL_REPLAY |
DescriptionCancellation: the request was already applied, cancelled or completed by another decision |
| HTTP409 | CodeAUDIENCE_APPROVAL_STALE |
DescriptionCancellation: the access revision changed |
| HTTP410 | CodeAUDIENCE_APPROVAL_EXPIRED |
DescriptionCancellation: the request expired |
For common API errors, see Errors.
Known specifics
- The original key is still required. Issuing another key to the same owner does not transfer the request. Even a key with the
vibe:coworkscope can check and cancel its own request if the other current checks pass; this does not authorize it to perform infra write operations. - Reading detects an outdated request. A status check may return
STALEorEXPIRED. That consent cannot be used; create a new request through the original operation. - The report does not return secrets. Only the original operation receives Bearer/JWT credentials or secret URLs after application, not these methods.