Format

Problem details
{ "type": "https://mutualtrust.io/problems/validation_failed", "title": "The request body does not match the command schema.", "status": 422, "code": "validation_failed", "instance": "/v1/services", "request_id": "req_8e1f3a9c2b7d4e60", "errors": [ { "path": "/route_templates/0/path", "message": "String does not match pattern" } ] }

Every problem has request_id, also sent as X-Request-Id. 429 responses carry Retry-After; 503 responses carry Retry-After: 5.

Authentication and authorization

Authentication errors
StatusCodeMeaning
401unauthenticatedNo valid session or credential; or an OIDC token failed verification.
401attestation_invalidEnrollment attestation invalid: sandbox token unknown, expired or used; workload unknown; workload issuer not approved.
403forbiddenAuthenticated but not allowed: missing role, missing or wrong CSRF token, sandbox guest attempting production, credential minting from a credential, or creating a production space without production access.
403production_onboarding_incompleteProduction spaces and services need a verified domain, approved production access and an active entitlement (subscription or approved invoice terms). missing lists what is outstanding; see production onboarding.
403production_access_requiredProduction trust spaces are provisioned by Sectigo PKI Operations once your organization is ready.
403high_risk_credential_requiredAn API credential without high_risk_allowed tried a high-risk change. Use a recently re-authenticated browser session, or a credential created with the flag (see step-up).
404not_foundDoes not exist, or belongs to an organization you are not a member of. Also returned for a failed renewal or reload proof.

Request and concurrency

Request errors
StatusCodeMeaning
409idempotency_key_reusedThe Idempotency-Key was used with a different body.
409invalid_transitionThe state machine does not allow this change (body includes from and to).
412revision_mismatchStale If-Match; re-read and retry.
415unsupported_media_typeBody sent without Content-Type: application/json.
422validation_failedBody failed the command schema or a domain rule (scope outside templates, bad CSR, bad proof, clock skew). See errors[].
428idempotency_key_requiredThis operation requires an Idempotency-Key.
428precondition_requiredThis operation requires If-Match.
429rate_limitedToo many requests; wait Retry-After seconds.
500internalUnexpected error. Quote the request ID.

Resources and lifecycle

Lifecycle conflicts
StatusCodeMeaning
409space_existsA space with that name exists in that environment.
409space_not_provisionedThe space has no trust anchor yet.
409service_existsA service with that name exists in the space.
409invitation_not_pendingThe invitation was already accepted, declined, canceled, or lost a race.
409invitation_expiredThe invitation expired.
409capacity_exceededNo remaining production connections on the sponsor’s plan.
409last_ownerThe change would leave the organization without an owner. Make another member an owner first.
409grant_not_activeThe grant is not active; enrollment, renewal and issuance are blocked.
409grant_expiringThe grant expires too soon to issue a certificate.
409attestation_replayedAn enrollment token was redeemed concurrently.
409enrollment_usedThe enrollment challenge was already used.
409challenge_expiredThe enrollment challenge expired (5 minutes).
409serial_collisionSerial collision during issuance; retry.
409issuance_refusedThe signer refused the issuance intent (code in the title).
409issuance_failedA previous attempt for this issuance request failed; start a new enrollment.
409certificate_revokedRenewal of a revoked certificate.
409certificate_expiredRenewal of an expired certificate; re-enroll.
409already_revokedThe certificate is already revoked.
409subscription_existsThe organization already has a subscription; use the billing portal.
409stripe_errorStripe rejected the request.
409mcp_request_usedThis MCP connection request was already approved.
409domain_existsYour organization already added this domain.
409domain_limitYour organization has 10 domains. Remove one before adding another.
409verification_openA legal-entity verification is already awaiting review.
409origin_check_closedThe origin check already has a result or has expired (one hour). Start a new check.
422origin_check_signature_invalidThe origin check result signature does not verify with the check token.

Integration adapters

Integration adapter errors
StatusCodeMeaning
422adapter_unknownThe adapter id or version is not in the adapter catalog.
409integration_existsThis organization already has an integration for that adapter and endpoint in that environment.
422integration_scope_invalidThe space, service or partner connection is not this organization’s, or is in another environment.
409integration_disabledThe integration is disabled; plans, approvals and runs are refused.
422plan_target_mismatchThe plan or run names another tenant, integration, adapter, endpoint or version.
422plan_hash_mismatchThe plan was modified after mt-adapt sealed it.
409desired_state_mismatchThe plan was computed against an older desired state. Fetch it again and plan again.
403step_up_requiredApproving needs a sign-in or passkey confirmation from the last 15 minutes (or less, when an approval policy says so; see max_age_seconds). Relaxing a production approval policy and every other high-risk change needs one too; high_risk_action names the change.
403second_approver_requiredYou submitted this plan, or created the invitation behind this pending grant; another service owner or trust administrator must approve it.
403approver_too_newThe approval policy needs an approver who has been a member for longer (min_age_hours). See Approval policies.
422approval_policy_below_floorAn approval policy value is looser than the floor an enclosing scope sets; fields[] names each value, its floor and where the floor comes from.
409approval_unavailableThe plan is still awaiting approval, or it was rejected.
409approval_expiredThe 24-hour approval window ended. Plan and approve again.
409approval_staleThe desired state changed after approval. Plan and approve again.
409plan_not_approvedAn apply or rollback run must reference an approved plan of this integration.
503sso_secret_store_unconfiguredThe deployment cannot seal or open identity provider client secrets. Use a public client (PKCE only) or retry later.
409sso_domain_claimedOne of the domains already routes to another organization identity provider.
409sso_not_testedSign in once through the identity provider before enforcing SSO-only sign-in; the person enabling it must keep access.
409sso_break_glass_requiredSSO-only sign-in needs at least one break-glass owner who keeps passkey sign-in.
409sso_break_glass_limitThe organization already has five break-glass owners.
409scim_token_limitThe organization already has five active SCIM tokens. Revoke one first.
409owner_recovery_openAn owner recovery for this organization is already open.
409owner_recovery_evidence_missingStaff only: the owner recovery has no fresh, verified DNS TXT challenge yet.
409delegation_openStaff only: an open delegation between these organizations already exists.
409payer_account_missingStaff only: the reseller has no billing account in that Stripe mode yet.
403support_case_requiredStaff only: support sees tenant details only with an open case assigned to them or a customer-approved support grant.

Dependencies

Dependency errors
StatusCodeMeaning
503signer_unavailableThe signing service is unavailable. Existing certificates keep working.
503provider_timeoutSigning provider timeout (never falls back to software).
503provider_unavailableSigning provider unavailable.
503provider_quotaSigning provider quota exceeded.
503provider_key_disabledThe signing key version is disabled.
503provider_key_not_foundThe signing key version is unknown or not allowlisted.
503provider_invalid_encodingThe provider response failed integrity checks.
503issuer_unavailableThe issuing CA is suspended.
503signature_verification_failedA signed certificate failed independent verification; retry.
503serial_mismatchA signed certificate did not match the approved intent.
503policy_not_publishedNo policy revision exists yet for the gateway’s service.
503jwks_unavailableCould not fetch keys from the approved workload issuer.
503idp_unavailableThe organization identity provider is unavailable.
503idp_issuer_mismatchThe identity provider’s discovery document names a different issuer.
503oidc_unconfiguredOrganization sign-in is not configured on this deployment.
503billing_unconfiguredBilling is not configured on this deployment.
503billing_misconfiguredLive Stripe keys outside production.
503plan_unavailableThat capacity band is not available for purchase.
503stripe_unavailableStripe is unavailable or rate limiting.
503mcp_unconfiguredThe MCP server is not configured on this deployment.

Webhook responses

POST /webhooks/stripe answers Stripe directly: 400 {"code":"invalid_signature"} when the signature or timestamp fails, and 200 {"ignored":"mode_mismatch"} for events from the other Stripe mode.

Gateway deny codes

Gateways return 403 problem documents with their own codes: uninitialized, manifest_expired, no_client_certificate, tls_verification_failed, unknown_issuer, malformed_san, missing_client_auth_eku, certificate_expired, certificate_revoked, grant_revoked, grant_suspended, grant_expired, no_matching_grant, route_not_permitted, ambiguous_route, plus 502 origin_unavailable. Causes and fixes: Troubleshooting.