Skip to main content
The Signa API is a RESTful JSON API for trademark search, retrieval, and reference data. All endpoints are versioned under /v1/.

Base URL

Authentication

Add an Authorization header with your API key to every request:
Call the API from your server, never from client-side code. See Authentication to create and rotate keys.

Request Format

  • Content-Type: application/json for request bodies
  • Query params: snake_case (e.g., ?status_stage=registered)
  • Arrays: comma-separated values (e.g., ?jurisdictions=US,EU)
  • Date ranges: flat underscore operators (e.g., ?filing_date_gte=2020-01-01&filing_date_lt=2025-01-01)
  • Booleans: query parameters accept true, 1, yes, t or y for true and false, 0, no, f or n for false, in any case; any other value returns 400. Two take only the literal strings true or false: partial on the watch attestation and force on webhook secret rotation
  • Dates: query date filters such as filing_date_gte take a date only (2026-03-19); a datetime returns 400. Timestamp filters such as updated_at_gte also accept an ISO 8601 datetime (2026-03-19T12:00:00Z), and so do the date ranges in a POST /v1/trademarks body

Response Format

Single-resource endpoints return the resource at the top level:
List endpoints return object: "list" with the results in data. See Pagination. Every response includes a top-level request_id, except publicly cached reference data (such as offices, jurisdictions, classifications and design codes), which carries no per-request id so a shared cache never hands one caller’s id to another. Include request_id when contacting support; for a cached reference response, quote the x-amz-cf-id response header and the time of the request instead.

Status Codes

Idempotency

Mutating requests (POST, PATCH, DELETE that create or change a resource) require an Idempotency-Key header: any unique string, 1 to 255 characters of letters, numbers, dashes, and underscores.
  • Same key, same URL, same body: the cached response is replayed (safe to retry).
  • Same key with a different request body, or against a different URL: 409 conflict. A key is bound to the exact request it first ran, so reusing one key across DELETE /v1/watches/wat_1 and DELETE /v1/watches/wat_2 is a conflict, not a replay. Generate a fresh key per distinct request.
  • Same key while the original request is still in flight: 409 idempotency_processing; retry shortly.
Keys are scoped to your organization and expire after 24 hours. A handful of read-shaped POST endpoints (search, batch lookup, suggest, watch preview, alert lookup) don’t create anything and are exempt: the header is optional there, though its format is still validated if you send one. See Resilience for the full exemption list.

Next Steps

Pagination

Cursor-based iteration with stable ordering.

Rate Limits & Quotas

Monthly quota pools, per-minute limits, headers, and 429 handling.

Errors

RFC 9457-inspired error format and catalog.