Handwrite IO · OpenAPI Overlay 1.0.0

API Evangelist enhancements for Handwrite IO Send API

5 actions 5 updates documentation extends openapi/handwrite-io-send-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['/send'].post
$.components.schemas.Recipient

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for Handwrite IO Send 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-send-api-openapi.yml — the original spec is never mutated.
extends: openapi/handwrite-io-send-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['/send'].post
    update:
      x-agentic-access:
        action-class: acting
        consequence: physical
        subject: required
        audience: null
        token:
          max-ttl: 300
          exchange: true
          purpose-required: true
        escalation:
          human-in-the-loop: conditional
          triggers:
            - abnormal
            - high-value
        audit: required
      x-idempotency:
        supported: false
        hazard: high
        guidance: >-
          Handwrite publishes no idempotency key. This operation writes and mails a physical
          card and cancellations are not typically allowed, so a retry after a timeout or 5xx
          can duplicate real mail at real cost. Treat as at-most-once: capture the returned
          order _id and reconcile with GET /order/{orderId} rather than resending.
      x-batch:
        supported: true
        mechanism: request body accepts a single SendRequest object OR an array of them
        max_orders_per_request: 1000
        order_definition: 1 message x 1 recipient
        partial_failure_semantics: not documented by the provider
      x-billing:
        model: per mailed card
        currency: USD
        bands_source: plans/handwrite-io-plans-pricing.yml
        note: >-
          Every recipient in a live-mode request is a separately billed card, priced $2.99 down
          to $2.45 by volume band. Test-mode keys are not billed and do not mail.
  - target: $.components.schemas.Recipient
    update:
      x-geography: US only — `state` must be a capitalized two-letter US abbreviation and `zip`
        must be exactly 5 characters. There is no country field.
      x-company-behavior: >-
        When `company` is present it prints on the first address line, with attention-to on the
        second.