Home
Overlays
PostalForm
Postalform Com Machine Payments Overlay
API Evangelist enhancements for the PostalForm Machine Payments API
24 actions
24 updates
documentation
extends ../openapi/postalform-com-machine-payments-openapi.json
Generated by API Evangelist
Written by API Evangelist tooling for PostalForm's API. It is a proposal applied on top of the contract, not a document PostalForm publishes.
What the actions change
tags x-side-effects x-agentic-consequence x-dry-run-for headers x-agent-card x-mcp-server x-api-catalog
Targets 23 · first 16 shown; the file carries all of them
$.info
$
$.paths['/api/machine/forms'].get
$.paths['/api/machine/forms/{slug}/schema'].get
$.paths['/api/machine/orders/validate'].post
$.paths['/api/machine/orders'].post
$.paths['/api/machine/orders/{id}'].get
$.paths['/api/machine/flower-letters/validate'].post
$.paths['/api/machine/flower-letters'].post
$.paths['/api/machine/flower-letters/{id}'].get
$.paths['/api/machine/mpp/orders/validate'].post
$.paths['/api/machine/mpp/orders'].post
$.paths['/api/machine/mpp/orders/{id}'].get
$.paths['/api/machine/mpp/flower-letters/validate'].post
$.paths['/api/machine/mpp/flower-letters'].post
$.paths['/api/machine/mpp/flower-letters/{id}'].get
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for the PostalForm Machine Payments API
version: 1.0.0
extends: ../openapi/postalform-com-machine-payments-openapi.json
x-generated: '2026-09-19'
x-method: generated
x-source: >-
Generated from openapi/postalform-com-machine-payments-openapi.json plus the probed and searched artifacts
in this repo. Captures API Evangelist annotations without mutating the provider's contract. The provider
already declares operationIds and summaries on all 17 operations; the gaps this overlay fills are tags
(none declared), an externalDocs link, the undeclared `help` block observed on every live error, the
rate-limit and reversal facts that live in prose, and the 402 headers the flow depends on.
actions:
- target: $.info
description: Link the provider's other machine-readable surfaces and record the payment gate from the contract.
update:
x-agent-card: https://postalform.com/.well-known/agent-card.json
x-mcp-server: https://postalform.com/mcp
x-api-catalog: https://postalform.com/.well-known/api-catalog
x-apis-json: https://postalform.com/apis.json
x-x402-manifest: https://postalform.com/.well-known/x402
x-llms-txt: https://postalform.com/llms.txt
x-skill: https://postalform.com/skill.md
x-payment:
protocols: [x402, mpp]
x402: {asset: USDC, network: 'eip155:8453', facilitator: 'https://api.cdp.coinbase.com/platform/v2/x402', challenge_header: PAYMENT-REQUIRED, retry_header: PAYMENT-SIGNATURE, receipt_header: PAYMENT-RESPONSE}
mpp: {methods: [tempo, stripe_spt, card], challenge_header: 'WWW-Authenticate: Payment', retry_header: 'Authorization: Payment', receipt_header: Payment-Receipt}
challenge_status: 402
settlement_pending_status: 202 settled_pending_webhook
x-idempotency: {mechanism: 'request_id (body, UUID)', coverage: 'every POST on this contract', drift_response: '409 request_id_mismatch'}
x-rate-limits:
- {scope: unpaid order creation, limit: unpublished, exhaustion_status: 429, code: rate_limited, headers: []}
- {scope: address searches (MCP), limit: unpublished, exhaustion_status: 429, code: rate_limited, headers: []}
x-reversibility: {cancel_operation: none, window: 'before printing or carrier handoff begins (discretionary); Express orders cannot be canceled after payment', contact: 'support@postalform.com', docs: 'https://postalform.com/terms#5'}
- target: $
description: The contract declares no externalDocs; point at the agent guide.
update:
externalDocs: {description: PostalForm agents guide (x402 / MPP flows), url: 'https://postalform.com/agents'}
- target: $
description: Declare the tags the operations below are grouped under (the provider declares none).
update:
tags:
- {name: Forms, description: Workflow-form catalog and schemas}
- {name: Orders (x402), description: Document mail orders paid through x402}
- {name: Orders (MPP), description: Document mail orders paid through MPP}
- {name: Flower letters (x402)}
- {name: Flower letters (MPP)}
- {name: Shipping labels (MPP)}
- target: $.paths['/api/machine/forms'].get
update: {tags: [Forms]}
- target: $.paths['/api/machine/forms/{slug}/schema'].get
update: {tags: [Forms]}
- target: $.paths['/api/machine/orders/validate'].post
update: {tags: ['Orders (x402)'], x-side-effects: none, x-dry-run-for: createMachineOrder}
- target: $.paths['/api/machine/orders'].post
update:
tags: ['Orders (x402)']
x-agentic-consequence: physical
x-human-in-the-loop: 'provider recommends owner approval and a spend cap before answering the 402'
- target: $.paths['/api/machine/orders/{id}'].get
update: {tags: ['Orders (x402)'], x-id-accepts: 'canonical order_id or any aliased request_id'}
- target: $.paths['/api/machine/flower-letters/validate'].post
update: {tags: ['Flower letters (x402)'], x-side-effects: none}
- target: $.paths['/api/machine/flower-letters'].post
update: {tags: ['Flower letters (x402)'], x-agentic-consequence: physical}
- target: $.paths['/api/machine/flower-letters/{id}'].get
update: {tags: ['Flower letters (x402)']}
- target: $.paths['/api/machine/mpp/orders/validate'].post
update: {tags: ['Orders (MPP)'], x-side-effects: none, x-dry-run-for: createMppMachineOrder}
- target: $.paths['/api/machine/mpp/orders'].post
update: {tags: ['Orders (MPP)'], x-agentic-consequence: physical}
- target: $.paths['/api/machine/mpp/orders/{id}'].get
update: {tags: ['Orders (MPP)']}
- target: $.paths['/api/machine/mpp/flower-letters/validate'].post
update: {tags: ['Flower letters (MPP)'], x-side-effects: none}
- target: $.paths['/api/machine/mpp/flower-letters'].post
update: {tags: ['Flower letters (MPP)'], x-agentic-consequence: physical}
- target: $.paths['/api/machine/mpp/flower-letters/{id}'].get
update: {tags: ['Flower letters (MPP)']}
- target: $.paths['/api/machine/mpp/shipping-labels/validate'].post
update: {tags: ['Shipping labels (MPP)'], x-side-effects: none}
- target: $.paths['/api/machine/mpp/shipping-labels'].post
update: {tags: ['Shipping labels (MPP)'], x-agentic-consequence: physical}
- target: $.paths['/api/machine/mpp/shipping-labels/{id}'].get
update: {tags: ['Shipping labels (MPP)']}
- target: $.paths['/api/machine/orders'].post.responses['402']
description: The x402 challenge header is documented in prose but not declared on the response.
update:
headers:
PAYMENT-REQUIRED: {description: 'x402 payment requirements (scheme exact, USDC, eip155:8453). Retry the identical request with PAYMENT-SIGNATURE.', schema: {type: string}}
- target: $.paths['/api/machine/mpp/orders'].post.responses['402']
description: The MPP challenge header is documented in prose but not declared on the response.
update:
headers:
WWW-Authenticate: {description: 'One "Payment ..." challenge per configured MPP method (tempo, stripe, card). Retry the identical request with Authorization: Payment <credential>.', schema: {type: string}}
- target: $.components.schemas.MachineErrorResponse.properties
description: Every live error response carried an undeclared `help` object (observed 2026-09-19 on 422 and 404). Declared here so agents can rely on it; not a mutation of the provider's schema.
update:
help:
type: object
description: Machine-readable pointers returned with every error (observed, not declared by the provider).
properties:
docs: {type: string, format: uri}
developer_docs: {type: string, format: uri}
openapi: {type: string, format: uri}
mcp_server: {type: string, format: uri}
infra_console: {type: string, format: uri}
support_email: {type: string, format: email}
- target: $.components.schemas.MachineErrorResponse
description: 'Two 404 shapes were observed: orders return {"message"}, forms return {"error"}; neither carries the required "code". Flagged for the provider.'
update:
x-observed-inconsistency: 'GET /api/machine/forms/{slug}/schema 404 body uses "error" instead of "message" and omits "code".'