Error codes
permission_denied
403 Permission denied
- HTTP status
- 403
- Title
- Permission denied
- Code
- permission_denied
What it means
The credential is valid, but it is not allowed to do this: the key lacks the scope the operation needs (the API reference names it under each operation), or a member's role does not allow it. A cross-site browser request to a write is refused this way too.
It is also the catch-all of status 403: an error of that status that has no more specific code answers with this one.
What to do
Use a key that holds the scope, or an account whose role allows the action.
Example
Errors are RFC 9457 problem details, sent as application/problem+json. See Errors for every field.
{
"type": "https://docs.furniops.com/errors/permission_denied",
"title": "Permission denied",
"status": 403,
"code": "permission_denied",
"detail": "An explanation of this occurrence.",
"request_id": "req_…",
"doc_url": "https://docs.furniops.com/errors/permission_denied"
}Operations that answer it
GET /v1/agentsPATCH /v1/agents/{agent}GET /v1/agreement-acceptancesGET /v1/agreements/{kind}POST /v1/agreements/{kind}/acceptancesPOST /v1/assistant/conversationsDELETE /v1/assistant/conversations/{conversation}POST /v1/assistant/conversations/{conversation}/turnsPATCH /v1/assistant/mePOST /v1/assistant/memoriesDELETE /v1/assistant/memoriesPATCH /v1/assistant/memories/{memory}DELETE /v1/assistant/memories/{memory}GET /v1/assistant/settingsPATCH /v1/assistant/settingsGET /v1/assistant/spendGET /v1/audit-eventsPOST /v1/audit-events/{id}/undoGET /v1/billingPOST /v1/billing/cardGET /v1/billing/creditsGET /v1/billing/credits/entriesGET /v1/billing/credits/purchasesPOST /v1/billing/credits/purchasesGET /v1/billing/credits/purchases/{purchase}POST /v1/billing/credits/purchases/previewPATCH /v1/billing/credits/settingsPATCH /v1/billing/detailsGET /v1/billing/invoicesPOST /v1/billing/previewPOST /v1/billing/subscriptionPOST /v1/billing/subscription/cancelPOST /v1/billing/subscription/resumePOST /v1/billing/subscription/scheduled-change/cancelGET /v1/brandPATCH /v1/brandGET /v1/brand/claimsPOST /v1/brand/claimsGET /v1/brand/claims/{id}POST /v1/brand/claims/{id}/checkPOST /v1/brand/claims/{id}/withdrawPOST /v1/brand/invitations/previewGET /v1/catalogueGET /v1/catalogue/imagesGET /v1/catalogue/publication-runsGET /v1/catalogue/publication-runs/{id}POST /v1/catalogue/publishGET /v1/catalogue/variantsPOST /v1/catalogue/visibilityPOST /v1/catalogue/withdrawGET /v1/categoriesGET /v1/changesGET /v1/changes/recentPOST /v1/demandGET /v1/exportsPOST /v1/exportsGET /v1/exports/{id}GET /v1/mappings/{id}POST /v1/mappings/{id}/confirmGET /v1/match-pairsGET /v1/match-pairs/{id}POST /v1/match-pairs/{id}/dismissPOST /v1/match-pairs/{id}/mergePOST /v1/match-pairs/{id}/reopenGET /v1/matching/judge-settingsPATCH /v1/matching/judge-settingsGET /v1/media/{id}GET /v1/mergesGET /v1/merges/{id}POST /v1/merges/{id}/undoGET /v1/offersGET /v1/productsGET /v1/products/{id}GET /v1/proposalsGET /v1/proposals/{id}POST /v1/proposals/{id}/acceptPOST /v1/proposals/{id}/rejectGET /v1/request-logsGET /v1/request-logs/{id}GET /v1/runs/{id}GET /v1/source-probesPOST /v1/source-probesGET /v1/source-probes/{id}GET /v1/sourcesPOST /v1/sourcesGET /v1/sources/{id}PATCH /v1/sources/{id}GET /v1/sources/{id}/categoriesPOST /v1/sources/{id}/categoriesPUT /v1/sources/{id}/credentialsDELETE /v1/sources/{id}/credentialsPOST /v1/sources/{id}/inbound-address/rotateGET /v1/sources/{id}/inbound-messagesGET /v1/sources/{id}/mappingsPOST /v1/sources/{id}/recordsPOST /v1/sources/{id}/replayGET /v1/sources/{id}/runsPOST /v1/sources/{id}/runsPOST /v1/sources/{id}/testPOST /v1/sources/{id}/uploadsGET /v1/streamPOST /v1/test/eventsGET /v1/uploads/{id}POST /v1/uploads/{id}/completeGET /v1/usageGET /v1/usage/seriesPOST /v1/variants/{id}/checksGET /v1/vendor-profilesGET /v1/vendor-profiles/{id}GET /v1/vendor/statsGET /v1/vendor/stats/productsGET /v1/vendor/stats/seriesGET /v1/webhook-endpointsPOST /v1/webhook-endpointsGET /v1/webhook-endpoints/{id}PATCH /v1/webhook-endpoints/{id}DELETE /v1/webhook-endpoints/{id}GET /v1/webhook-endpoints/{id}/deliveriesGET /v1/webhook-endpoints/{id}/deliveries/{delivery}POST /v1/webhook-endpoints/{id}/deliveries/{delivery}/resendPOST /v1/webhook-endpoints/{id}/recoverPOST /v1/webhook-endpoints/{id}/rotate-secretPOST /v1/webhook-endpoints/{id}/test