Handwrite IO · Authentication Profile

Handwrite Io Authentication

Authentication

Handwrite IO secures its APIs with apiKey across 1 declared security scheme, as derived from its OpenAPI definitions.

Direct MailHandwrittenHandwritten NotesCardsMarketingNotesPrintFulfillmentCustomer Engagement
Methods: apiKey Schemes: 1 OAuth flows: API key in: header

Security Schemes

ApiKeyAuth apiKey
· in: header (Authorization)

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: >-
  https://documentation.handwrite.io/#getting-started ;
  https://raw.githubusercontent.com/handwriteio/API-Docs/master/source/includes/_intro.md ;
  live 401 observed from https://api.handwrite.io/v1/handwriting on 2026-08-13 ; baseline
  derived from openapi/handwrite-io-*-openapi.yml
docs: https://documentation.handwrite.io/#getting-started
summary:
  types:
  - apiKey
  api_key_in:
  - header
  oauth: false
  openid_connect: false
  mutual_tls: false
schemes:
- name: ApiKeyAuth
  type: apiKey
  in: header
  parameter: Authorization
  scheme_prefix: none
  bearer: false
  description: >-
    The raw API key is sent as the ENTIRE value of the Authorization header, with no "Bearer "
    or other scheme prefix — e.g. `Authorization: live_hw_...`. Content-Type must be
    application/json. Handwrite explicitly forbids calling the API from a browser, and issues no
    publishable/CORS-safe key, so every call must be server-side.
  key_format: '<mode>_hw_<random>'
  key_modes:
    test:
      prefix: test_hw
      billed: false
      mails: false
    live:
      prefix: live_hw
      billed: true
      mails: true
  provisioning:
    self_serve: true
    requires_account: true
    dashboard: https://app.handwrite.io/integrations/api
    signup: https://app.handwrite.io/signup
  rotation_policy: not published
  expiry: none published (static key)
  scopes: none — the key is all-or-nothing across all four operations
  applied_to:
    - getHandwritings
    - getStationery
    - sendLetter
    - getOrder
  sources:
  - https://documentation.handwrite.io/#getting-started
  - openapi/handwrite-io-handwriting-api-openapi.yml
  - openapi/handwrite-io-orders-api-openapi.yml
  - openapi/handwrite-io-send-api-openapi.yml
  - openapi/handwrite-io-stationery-api-openapi.yml
failure_behavior:
  status: 401
  observed: '2026-08-13'
  probe_url: https://api.handwrite.io/v1/handwriting
  body: >-
    {"message":"No token provided. Please make sure to include it in your headers, e.g.
    Authorization: test_HW_..."}
  note: >-
    The API distinguishes a missing token from a wrong one in the human-readable message only;
    both are 401 and neither carries a machine-readable error code.
oauth:
  supported: false
  discovery_probed:
    - path: /.well-known/oauth-authorization-server
      status: 404
    - path: /.well-known/openid-configuration
      status: 404
  hosts_probed: api.handwrite.io, handwrite.io, www.handwrite.io, documentation.handwrite.io
observations:
  - >-
    A single static, unscoped key that can mail physical billed cards is a meaningful blast
    radius. There is no way to issue a read-only credential for the two list operations or the
    order lookup, so any integration that only needs to check order status still holds a key
    that can spend money.
  - >-
    Test-mode isolation is the one mitigating control: a test_hw key exercises the same
    endpoints without billing or mailing. Grant test keys to anything that does not need to send.
maintainers:
  - FN: Kin Lane
    email: kin@apievangelist.com