SignSealShip Partner API · Authentication Profile

Signsealship Authentication

Authentication

SignSealShip Partner API secures its APIs with apiKey and http across 2 declared security schemes, as derived from its OpenAPI definitions.

notarizationremote online notarizationelectronic signaturedocument verificationlegal technologyreal estatetitle and escrowshipping
Methods: apiKey, http Schemes: 2 OAuth flows: API key in: cookie

Security Schemes

partnerKey http
scheme: bearer
sessionCookie apiKey
· in: cookie (__Host-session)

Source

Authentication Profile

Raw ↑
generated: '2026-09-01'
method: searched
source: >-
  https://docs.signsealship.com/api-reference/authentication (docs) reconciled against
  openapi/signsealship-partner-api-openapi.yml (contract) and
  https://signsealship.com/.well-known/api-onboarding.json (onboarding descriptor)
docs: https://docs.signsealship.com/api-reference/authentication
summary:
  types:
  - apiKey
  - http
  api_key_in:
  - cookie
  oauth2: false
  openid_connect: false
  mutual_tls: false
schemes:
- name: partnerKey
  type: http
  scheme: bearer
  bearerFormat: sss_pk_...
  header: Authorization
  description: 'Partner API key. Send as `Authorization: Bearer sss_pk_...`.'
  key_format:
    prefix: sss_pk_
    test_prefix: sss_pk_test_
    entropy: 256 bits after the prefix, lowercase base32
    prefix_rationale: >-
      Stated in the docs -- the prefix makes a leaked key recognizable in logs and secret
      scanners.
  storage: SHA-256 hash only; the raw key is never stored and cannot be recovered
  display: shown to the holder exactly once, at issue, by email
  env_var: SIGNSEALSHIP_PARTNER_KEY
  env_var_source: https://signsealship.com/.well-known/api-onboarding.json
  sources:
  - openapi/signsealship-partner-api-openapi.yml
  - https://docs.signsealship.com/api-reference/authentication
- name: sessionCookie
  type: apiKey
  in: cookie
  parameter: __Host-session
  description: >-
    SignSealShip dashboard login session cookie. Accepted by the /api/partner/webhooks
    management routes as an alternative to the partner key.
  cookie_prefix_note: >-
    The __Host- prefix is a real hardening choice -- it forces Secure, host-only scope and a path
    of /, so the cookie cannot be set by a subdomain.
  rate_limit: partner-portal, 120/min per session
  sources:
  - openapi/signsealship-partner-api-openapi.yml
anonymous_surface:
  operations: 8
  detail: >-
    Eight read operations require no credential at all: the public room view, Closing Passport
    verification and certificate download, and Proof Passport verification and document download.
    POST /api/partner/request is also public and unauthenticated.
  authorization_model: >-
    Possession of the code IS the authorization. Room codes (40 hex), order codes and verify codes
    (26 base32, 128 bits) are bearer credentials, not merely identifiers. They resolve one
    SignSealShip-issued record and cannot be used for arbitrary querying -- an unknown code returns
    404 {"verdict": "unknown"}, identical to a malformed one.
issuance:
  self_serve: true
  endpoint: POST https://signsealship.com/api/partner/request
  endpoint_auth: anonymous
  rate_limit: partner-request, 5 per hour per IP
  flow:
  - Submit firm name, work email, role, expected volume and intended use case.
  - >-
    A business email domain plus a coherent, on-topic use case is issued a trial key instantly.
    Anything else is queued for human review.
  - The raw key is emailed to the submitted work address, once.
  agent_blocker: >-
    BOTH OUTCOMES RETURN HTTP 200. The status code does not distinguish an instant issue from a
    queued review, and the key never appears in the response body -- only in an email. An agent
    cannot complete onboarding end to end without reading a mailbox. The provider names this
    itself in the gaps[] list of its own /.well-known/api-onboarding.json, alongside the absence
    of RFC 7591 dynamic client registration.
  console: https://signsealship.com/partner/settings/keys
rotation:
  api_keys:
    self_serve: false
    mechanism: >-
      NO self-serve key-rotation endpoint exists. To rotate -- routinely or after a suspected leak
      -- contact SignSealShip; a replacement is issued and the old key deactivated. Deactivation
      is immediate once actioned, but it is a human step.
    gap: >-
      This is the weakest link in an otherwise careful credential design. A hashed, prefixed,
      once-displayed key is good practice; requiring a human email to rotate it is not, and it
      means incident response has a person in the critical path.
  room_links:
    self_serve: true
    operation: POST /api/rooms/{roomCode}/rotate
    effect: Every previously shared link dies instantly. Irreversible.
  webhook_secrets:
    self_serve: true
    operation: POST /api/partner/webhooks/{id}/rotate
    display: shown exactly once; only the hash is stored
    overlap: >-
      24 hours of dual signing -- the SignSealShip-Signature header carries one v1 entry per
      active secret, and a consumer should accept when ANY entry matches. The machine-readable
      form is previousSecretExpiresAt on RotateWebhookResponse.
authorization:
  model: coarse permission strings, not machine-declared
  strings: [orders:read, orders:write, webhooks:read, webhooks:write]
  declared_in: operation descriptions only
  contradiction: >-
    /.well-known/api-onboarding.json states "There is no scope-string model. Access is gated by
    plan tier." The OpenAPI names four permission strings across nine operations. The two provider
    documents disagree, and no securityScheme exposes a scopes map either way -- so a caller
    cannot discover what its key is permitted to do until a call fails.
  plan_gate: >-
    Feature access really is tiered on top of this: the Order API and partner webhooks unlock at
    the $149/mo Pro Office plan.
failure_modes:
  '401': >-
    'A valid partner API key is required.' -- returned identically for a missing, malformed,
    revoked or unknown key. Deliberately indistinguishable.
  '403': >-
    Reserved for a valid dashboard session that has not yet been linked to a partner. Before
    2026-08-01, GET /api/partner/me also returned 403 for a missing credential; it now correctly
    returns 401.
transport:
  tls: TLSv1.3 observed on both hosts
  hsts: true, max-age 63072000
  see: security/signsealship-domain-security.yml
gaps:
- No OAuth 2.0, no OIDC, no dynamic client registration (RFC 7591).
- No self-serve API-key rotation.
- No machine-readable scope or permission discovery.
- Key delivery is out-of-band by email, which blocks fully programmatic onboarding.

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/signsealship-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.