API REFERENCE

API error reference

The short answer

Every error the SealDeal API returns is `application/problem+json` following RFC 7807, and its `type` field is a link to the page describing exactly that error. If you landed here from a `type` URL in a response, the page you want is linked below under the matching status code. Each one states what the error means, what causes it, and, the part most error references leave out, whether retrying the same request can ever succeed.

The shape of an error

Read `detail` first: it is specific to your request and usually names the exact field, scope or count that caused the failure. `type` is stable and safe to switch on in code; `title` and `detail` are human-facing and may be reworded.

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json

{
  "type": "https://sealdeal.ai/errors/insufficient-scope",
  "title": "Insufficient scope",
  "status": 403,
  "detail": "The API key is missing required scopes: contacts.write."
}

Authentication

The request could not be attributed to a valid key, or to a person behind that key.

  • 401 Missing API key
    The request arrived with no Authorization header at all.
    /errors/missing-authorization · Retry only after changing the request
  • 401 Invalid API key
    The key presented does not resolve to a live key. A malformed key and an unknown-but-well-formed key both return this identical response, deliberately, so the API cannot be used to probe which key prefixes exist.
    /errors/invalid-api-key · Retry only after changing the request
  • 401 API key expired
    The key was valid but has passed its expiry date.
    /errors/expired-api-key · Retry only after changing the request
  • 401 API key has no actor
    The key is valid but is not linked to an active team member, so any write it performed could not be attributed to a person.
    /errors/api-key-no-actor · Retry only after changing the request

Authorization

The key is valid, but either the token lacks a scope or the person behind it lacks a role. Both must permit the operation.

  • 403 Insufficient scope
    The key is valid but was not granted a scope this endpoint requires. The `detail` field names exactly which scopes are missing.
    /errors/insufficient-scope · Retry only after changing the request
  • 403 Forbidden
    The key had the right scope, but the acting team member is not allowed to perform this operation on this resource.
    /errors/forbidden · Retrying will not help
  • 403 Erasure requires an org admin
    GDPR erasure is restricted by ROLE as well as by scope, and the acting member does not hold a qualifying role.
    /errors/erasure-forbidden · Retrying will not help
  • 403 Outbound not included
    The organization's plan does not include outbound sending.
    /errors/outbound-not-entitled · Retry only after changing the request

Request and state

The call was understood but cannot be performed as sent, or against the resource in its current state.

  • 404 Not found
    No resource with that id exists inside your organization. The API never distinguishes a missing record from one belonging to another tenant.
    /errors/not-found · Retrying will not help
  • 400 Bad request
    The request body or query was malformed or failed validation. `detail` says which field.
    /errors/bad-request · Retry only after changing the request
  • 409 Conflict
    The resource exists and you may touch it, but its current state does not permit this operation.
    /errors/conflict · Retry only after changing the request
  • 409 List has in-flight sequences
    Deleting this list would strand sequences that are mid-cadence: the list disappears while its prospects keep receiving later steps.
    /errors/list-has-in-flight-sequences · Retry only after changing the request
  • 422 Stage gate not met
    The deal cannot advance because your organization's qualification methodology has an unmet exit condition on the current stage.
    /errors/stage-gate-blocked · Retry only after changing the request

Limits

Two different 429s. They mean different things and need different handling.

  • 429 Rate limit exceeded
    The key exceeded 60 requests per 60 seconds. The limit applies to every endpoint.
    /errors/rate-limit-exceeded · Safe to retry after a backoff
  • 429 Research budget exceeded
    The organization hit its daily cap on new research runs. This is a different 429 from the request rate limit.
    /errors/research-budget-exceeded · Safe to retry after a backoff

Server

Nothing the client sent is wrong.

  • 503 Erasure is not configured
    The server cannot write a tamper-resistant suppression tombstone, so it refuses to erase rather than erase weakly.
    /errors/erasure-unavailable · Retry only after changing the request
  • 500 Internal error
    Something failed server-side. The response carries a stable error code and no internal detail.
    /errors/internal-error · Safe to retry after a backoff

See also: API documentation · OpenAPI 3.1 schema · Integrations