Handwrite IO · OpenAPI Overlay 1.0.0

API Evangelist enhancements for Handwrite IO Orders API

5 actions 5 updates documentation extends openapi/handwrite-io-orders-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Handwrite IO's API. It is a proposal applied on top of the contract, not a document Handwrite IO publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-providerx-apievangelist-artifactsx-spec-provenancex-scheme-prefixx-key-modesdescriptionx-rate-limitx-agentic-access

Targets 5

$.info
$.components.securitySchemes.ApiKeyAuth
$.components.responses.RateLimited
$.paths['/order/{orderId}'].get
$.components.schemas.Order

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for Handwrite IO Orders API
  version: 1.0.0
  x-generated: '2026-08-13'
  x-method: generated
  x-source: >-
    Enhancements derived from https://documentation.handwrite.io/ and API Evangelist artifacts in
    this repo. Applies to openapi/handwrite-io-orders-api-openapi.yml — the original spec is never mutated.
extends: openapi/handwrite-io-orders-api-openapi.yml
actions:
  - target: $.info
    update:
      x-apievangelist-provider: handwrite-io
      x-apievangelist-artifacts:
        conventions: conventions/handwrite-io-conventions.yml
        errors: errors/handwrite-io-problem-types.yml
        rate-limits: rate-limits/handwrite-io-rate-limits.yml
        lifecycle: lifecycle/handwrite-io-lifecycle.yml
        authentication: authentication/handwrite-io-authentication.yml
        sandbox: sandbox/handwrite-io-sandbox.yml
        data-model: data-model/handwrite-io-data-model.yml
      x-spec-provenance: >-
        This OpenAPI is an API Evangelist derivation from Handwrite's published Slate
        documentation (documentation.handwrite.io, source at github.com/handwriteio/API-Docs).
        Handwrite does not publish an OpenAPI of their own — probed 2026-08-13.
  - target: $.components.securitySchemes.ApiKeyAuth
    update:
      x-scheme-prefix: none
      x-key-modes:
        test: test_hw
        live: live_hw
      description: >-
        Raw API key sent as the ENTIRE Authorization header value, with no "Bearer " prefix.
        Keys are prefixed test_hw (not billed, no mail produced) or live_hw (billed, mails a
        card). Content-Type must be application/json. Browser-side use is forbidden by the
        provider. Create keys at https://app.handwrite.io/integrations/api
  - target: $.components.responses.RateLimited
    update:
      x-rate-limit:
        limit: 60
        window: minute
        scope: api-key
        headers:
          - X-RateLimit-Limit
          - X-RateLimit-Remaining
          - X-RateLimit-Reset
        retry_after: false
        error_code: rate_limit_exceeded
        observed: '2026-08-13'
  - target: $.paths['/order/{orderId}'].get
    update:
      x-agentic-access:
        action-class: connected
        consequence: read
        subject: optional
        token:
          max-ttl: 3600
        audit: none
      x-observation-model: >-
        Polling only. Handwrite publishes no webhooks, callbacks or event stream, so fulfillment
        progress (processing -> written -> complete) can only be observed by re-fetching this
        operation. Respect the 60 requests-per-minute key limit when polling.
      x-no-list-endpoint: >-
        There is no list-orders operation. Orders are addressable one at a time by id only, so a
        client MUST persist every _id returned by POST /send or lose the ability to track it.
  - target: $.components.schemas.Order
    update:
      x-provider-payload-divergence: >-
        The provider's own documented response (documentation.handwrite.io/#get-an-order) uses
        `to` where this schema says `recipient`, `createdAt` where this schema says `created_at`,
        and returns `proofs` as an array of {job_type, image_url} objects (job_type is `card` or
        `envelope`) rather than a single `proof_url`. The provider payload also carries an
        `environment` field valued `live` or `test`, which this schema omits. The provider is
        authoritative; see data-model/handwrite-io-data-model.yml.
      x-status-semantics:
        processing: order accepted, not yet written
        written: written but not yet delivered
        complete: has been mailed; proof images available
        problem: rare — technical issue on Handwrite's end which they will resolve
        cancelled: rare — Handwrite does not typically allow cancellations