Errors

Errors use conventional HTTP status codes, with a JSON body:

{ "detail": "Order 6c1f… not found" }

Status codes

StatusMeaningWhat to do
400The request is well-formed but cannot be carried out as sentRead detail, fix the request
401The access token or staff token is missing, expired or invalid, or the PIN is wrongRefresh the token, or sign the staff member in again
403Authenticated, but not allowed: the property is not in the token, the staff and access tokens belong to different properties, or the operation needs management accessUse a token with the right access
404Not found at this propertyCheck the id and x-property-id
409Conflicts with the current state: paying a cancelled order, deleting a role still in use, freeing a table with an open order, reusing an idempotency key with a different payloadReload the resource, then decide
422Validation faileddetail lists each failing field
429Too many failed PIN attempts on this deviceWait a few minutes
502A Cloudbeds service the operation depends on failedRetry later
503A dependency is temporarily unavailable, for example tax rates when pricing a cartRetry later; the API does not return estimates

Operations that need an approval reject an
approval_token that is missing, expired, already used, or granted for a
different action or record. Ask for a new approval.

Validation errors

{
  "detail": [
    {
      "loc": ["body", "items", 0, "quantity"],
      "msg": "Input should be greater than or equal to 1",
      "type": "greater_than_equal"
    }
  ]
}

Charge to Room error codes

The /pos/charges operations return a structured detail:

{
  "detail": {
    "code": "idempotency_conflict",
    "message": "This charge is still being processed. Try again in a moment.",
    "retryable": true
  }
}

retryable says whether sending the same request again could succeed. message
is written for the person at the terminal and can be shown as is.

codeStatusMeaning
missing_idempotency_key400The Idempotency-Key header is missing
unknown_target400The reservation or group was not found
blocked_target400The target cannot be charged right now, for example because the guest has checked out
nothing_to_charge400The order has nothing to post
mapping_error400The provider's order could not be read
account_property_mismatch403The terminal's merchant belongs to a different property
integration_disconnected403The terminal's merchant is not connected to this property
not_found404No charge exists for this order (void and gratuity)
idempotency_conflict409Another request with this key is still in progress (retryable: true), or the key was used for a different charge (retryable: false)
charge_voided409The charge was voided. Charge again with a new key.
folio_post_failed502Cloudbeds did not accept the posting. Nothing was posted. Check retryable.