Skip to main content
Fieldnode RPC APIs use Connect’s standard error model. For unary JSON requests, errors are returned as JSON with a Connect error code and human-readable message.

Error JSON format

Typical error response:
{
  "code": "permission_denied",
  "message": "permission denied for part",
  "details": [
    {
      "type": "google.rpc.BadRequest",
      "value": "Ci4KLAoFcGFydHMSI211c3QgYmUgcHJvdmlkZWQ"
    }
  ]
}

Fields

  • code - Machine-readable Connect error code in snake_case.
  • message - Human-readable description of the failure.
  • details - Optional structured error details.
    • type: protobuf message type name.
    • value: base64-encoded protobuf payload.

HTTP status and Connect code mapping

For unary Connect JSON responses, the HTTP status is derived from the Connect error code.
Connect codeHTTP statusDescription
invalid_argument400Request argument is invalid.
failed_precondition400System state does not satisfy operation preconditions.
out_of_range400Operation attempted past valid range.
unauthenticated401Request is missing valid authentication credentials.
permission_denied403Caller is authenticated but not allowed to perform the operation.
not_found404Requested resource was not found.
already_exists409Resource already exists.
aborted409Operation aborted, commonly due to concurrency conflict.
resource_exhausted429Resource limit or quota exhausted.
canceled499Operation was canceled, typically by the caller.
unknown500Unknown error.
internal500Internal server error caused by broken invariants or unexpected failures.
data_loss500Unrecoverable data loss or corruption.
unimplemented501Operation is not implemented or not enabled.
unavailable503Service is temporarily unavailable; retries may succeed.
deadline_exceeded504Deadline expired before completion.

Notes

  • Use code for programmatic behavior (retry, prompt login, user messaging).
  • Treat message as informational; do not parse it for control flow.
  • 499 is used for canceled and is not part of the standard HTTP status registry, but it is the Connect mapping for this code.