Handwrytten
MARKETING · MARKETING
Order real handwritten cards, mailed from the account they connected.
Connecting Handwrytten in practice
Handwrytten writes and posts physical cards, so a bad call costs postage rather than a row: POST /orders/singleStepOrder creates and submits a whole order in one request, charging a stored credit card id, and the only rehearsal space is an account-level test mode that authorizes payment without capturing it and accepts orders without fulfilling them. Test mode is a property of the account, not of the request.
Scopes that draw scrutiny
Authorization: <API key>Sent raw, with no Bearer prefix, and created on the Integrations page. The same key that lists fonts also places orders that cost real money.login and password via /auth/authorizationDeprecated username-and-password authentication that remains supported for existing integrations, so a credential removed from one path may still work through the other.
Worth knowing
- Because test mode is toggled per account — on the Integrations page or through POST /auth/setTestMode — a staging agent and a production agent sharing one account cannot differ.
- singleStepOrder requires font_label, card_id, message and both addresses, and font_label is the colloquial font name such as "Chill Charity" rather than an id, so it has to be resolved from GET /fonts/list before the first order.
- sender_state and recipient_state are required only for country ids 1 and 2 (United States and Canada), and stamp_option_id applies to US orders and is ignored internationally — so validation rules change with the destination.
- The spec lists two production servers, api.handwrytten.com/v2 and api2.handwrytten.com/api/v1/user/, so the base URL depends on the endpoint rather than on a version you pick once.
Checked against Handwrytten API documentation (2026-09-29), OpenAPI specification (2026-09-29)
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
Often connected alongside
Put Handwrytten behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.