Docs · Errors

Error Codes — Suite Profit

Every non-2xx response from the Suite Profit v2 API carries a JSON body of the shape { "error": "<string>", "code": "SP-<domain>-<reason>", "message": "<human-readable>" }. The code is stable and machine-parseable; the message may change between releases. Log the code; surface the message.

4xx — authentication and authorization

CodeHTTPMeaningRemediation
SP-AUTH-INVALID-TOKEN401Bearer token missing, malformed, or revokedRe-issue the OAuth client credentials token; rotate through the Suite Profit admin console.
SP-AUTH-EXPIRED-SAML401SAML assertion expired on a user-scoped endpointRe-authenticate through the identity provider; re-federate against Okta / Entra ID / PingFederate.
SP-AUTH-INSUFFICIENT-ROLE403Principal lacks the role required for this portfolio or propertyGrant the missing role through SCIM or the admin console; roles are portfolio-scoped.
SP-RATELIMIT-EXCEEDED429Per-portfolio rate limit exceededHonour Retry-After and back off. See rate limits.

4xx — Profitroom integration

CodeHTTPMeaningRemediation
SP-PR-API-MISMATCH422Profitroom Suite API version mismatch or schema drift on the propertyRe-run the Profitroom compatibility probe from the admin console; re-register the property token.
SP-PR-DEPENDENCY-FAIL424A dependency on the Profitroom side failed — Booking Engine unavailable, Rate Manager frozenRetry once Profitroom Suite recovers. Queued writes replay automatically.

4xx — business state

CodeHTTPMeaningRemediation
SP-DECISION-CONFLICT409Conflicting rate decision on the same property/room/date rangeGET the current decision, reconcile, resubmit with the latest version.
SP-PROPERTY-FROZEN409Property is temporarily frozen — governance freeze or fiscal batch in flightWait for the freeze to lift; check /portfolios/{id}/properties for status.
SP-ENTITY-DISABLED410The addressed entity was disabled by an operatorRe-enable through the admin console or contact the portfolio administrator.

5xx — Suite Profit and upstream

CodeHTTPMeaningRemediation
SP-INTERNAL500Internal Suite Profit errorRetry with exponential backoff. Persistent occurrences are covered by the Enterprise SLA credit rule below.
SP-PR-UPSTREAM502Profitroom Suite upstream returned a non-recoverable errorWait for recovery. Queued writes replay automatically once Profitroom is healthy.
SP-CIRCUIT-OPEN503Circuit breaker open on the affected module — protecting the portfolio from cascading upstream failureWait for the half-open probe; state transitions are on the status page and mirrored to the audit stream.
SP-PR-TIMEOUT504Profitroom Suite timed out on the write pathRetry with an Idempotency-Key; queued writes replay automatically.

Error body examples

An authorization failure (SP-AUTH-INSUFFICIENT-ROLE) carries the missing role and the portfolio it was evaluated against:

{
  "error": "insufficient_role",
  "code": "SP-AUTH-INSUFFICIENT-ROLE",
  "message": "Principal lacks role portfolio.rate.publish",
  "details": {
    "portfolio_id": "prt_motlawa_estates",
    "required_role": "portfolio.rate.publish",
    "granted_roles": ["portfolio.rate.read", "portfolio.reputation.read"]
  }
}

A Profitroom dependency failure (SP-PR-DEPENDENCY-FAIL) surfaces the upstream sub-code:

{
  "error": "profitroom_dependency_failed",
  "code": "SP-PR-DEPENDENCY-FAIL",
  "message": "Profitroom Rate Manager unavailable for property",
  "details": {
    "property_id": "prop_gdansk_marina",
    "profitroom_status": 503,
    "profitroom_reason": "rate_manager_maintenance"
  }
}

SLA credit on 5xx availability breach

Enterprise plans carry a 99.95% monthly availability SLA on the v2 API. Every 0.1% breach below the SLA earns a 5% credit on the monthly Enterprise fee, capped at 30% per calendar month. Availability is measured on 5xx codes attributable to Suite Profit (SP-INTERNAL, SP-CIRCUIT-OPEN); SP-PR-UPSTREAM and SP-PR-TIMEOUT breaches are surfaced separately and covered by the Profitroom dependency clause of the master agreement. Every incident is written to the audit stream so verification does not require a support ticket.

Which errors are safe to retry

Retry-safe (idempotent, transient): SP-RATELIMIT-EXCEEDED, SP-INTERNAL, SP-PR-UPSTREAM, SP-CIRCUIT-OPEN, SP-PR-TIMEOUT. Retry after resolving state: SP-DECISION-CONFLICT, SP-PROPERTY-FROZEN. Never retry as-is: SP-AUTH-INVALID-TOKEN, SP-AUTH-EXPIRED-SAML, SP-AUTH-INSUFFICIENT-ROLE, SP-PR-API-MISMATCH, SP-ENTITY-DISABLED — these require correcting the request, the identity, or the surrounding state first.

When to page the account team

If you see sustained SP-INTERNAL or SP-CIRCUIT-OPEN for more than 10 minutes and the status page is green, page your named account manager or email noc@suiteprofit.org. Enterprise plans have a 15-minute NOC response SLA during CET business hours and a 60-minute out-of-hours SLA.