Skip to main content

Base URL

https://api.signa.so/v1
All endpoints are prefixed with /v1/. The API follows additive-only evolution: new fields and endpoints may be added, but existing fields are never removed or renamed within v1.

Authentication

All requests require a Bearer token:
Authorization: Bearer sig_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
See Authentication for key formats and scopes.

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: literal strings true or false (values like 1, yes, or TRUE are rejected)
  • Dates: ISO 8601 (2026-03-19T12:00:00Z) or date-only (2026-03-19)

Response Format

Single-resource endpoints return the resource at the top level:
{
  "id": "tm_abc123",
  "object": "trademark",
  "mark_text": "SIGNA",
  "livemode": true,
  "request_id": "req_abc123"
}
List endpoints include has_more at the top level and a pagination object:
{
  "object": "list",
  "data": [...],
  "has_more": true,
  "pagination": {
    "cursor": "eyJ..."
  },
  "livemode": true,
  "request_id": "req_abc123"
}

Error Format

Errors follow an RFC 9457-inspired format:
{
  "error": {
    "type": "https://api.signa.so/errors/not_found",
    "title": "Resource not found",
    "status": 404,
    "detail": "Trademark tm_abc123 does not exist.",
    "instance": "/v1/trademarks/tm_abc123",
    "suggestion": "Check the trademark ID. Use GET /v1/trademarks?q=... to find marks by text.",
    "retryable": false,
    "retry_after": null
  },
  "request_id": "req_abc123"
}

Common Status Codes

CodeDescription
200Success
201Created
400Bad request (validation error)
401Unauthorized (missing or invalid API key)
403Forbidden (insufficient scopes)
404Not found
429Rate limited
500Internal server error