Trigger
Receive a paid order, workflow enrollment, event, or deliberate operator action.
Matterleaf turns a reliable event from the systems you already use into a letter, card, or approved custom mailing. Start with the provider-neutral API, then map the source fields that matter.
These pages document generic HTTP and middleware recipes. They do not claim native apps, platform OAuth, one-click installs, marketplace listings, or live platform testing. The API contract is the source of truth; platform-specific adapters are customer-configured until those surfaces are built and verified.
Commerce, CRM, lifecycle, and automation systems are useful sources of context. Matterleaf remains the canonical home for the mailing request, recipient snapshot, production state, and fulfillment history.
Receive a paid order, workflow enrollment, event, or deliberate operator action.
Resolve a product, validate the postal address, and build the canonical order payload.
Store the order ID, handle pending or failed payment, and reflect status back when useful.
Turn a paid order or a Shopify Flow event into one carefully mapped Matterleaf order.
Docs-only recipeThis recipe is not a Shopify app and does not include Shopify OAuth or an App Store listing. Flow’s HTTP action expects a fast response; use an intermediary when you need asset uploads, durable retries, or status polling.
Verification: Not smoke-tested against a live Shopify store from this checkout.
Let a workflow custom-code action or small integration service send a thoughtful note from a contact, company, or deal.
Docs-only recipeThis is not a HubSpot app, public OAuth connection, or Marketplace listing. Direct no-code delivery of the nested Matterleaf payload with a deterministic Idempotency-Key is unverified and not promised; the supported approach is a custom-code action or relay, especially when the workflow cannot safely retain the raw response or handle nested JSON.
Verification: No HubSpot portal execution has been verified from this checkout.
Use a flow event as the start of a physical touch, while keeping postal consent and order status explicit.
Docs-only recipeThis is not a native Klaviyo app or OAuth connection. Flow webhooks are POST-only and provider retries are controlled by Klaviyo; a separate receiver is needed for signed Matterleaf callbacks and raw-body verification. Email/SMS opt-in is not automatically postal consent.
Verification: No Klaviyo flow has been smoke-tested from this checkout.
Connect almost any trigger app with a JSON-capable HTTP step and a replay-safe send key.
Generic HTTP recipeThis is not a published Zapier app with a native connection. Webhooks by Zapier availability and credential visibility depend on the account and plan. A Catch Hook should not be assumed to provide a raw-byte verification boundary.
Verification: No live Zap has been smoke-tested from this checkout.
Compose a scenario from an HTTP module, a Data Store, and an optional custom webhook receiver.
Generic HTTP recipeThis is not a native Make app or published module. Use a Data Store for order IDs, batch IDs, cursors, and resource sequence numbers. Use an external receiver when the custom webhook cannot preserve raw bytes for HMAC verification.
Verification: No live Make scenario has been smoke-tested from this checkout.
For an internal service, serverless function, data pipeline, or a platform not listed above, call Matterleaf directly from a trusted server.
API documentedAuthorization: Bearer wl_… key, kept server-sideitems[].configuration.recipient, message, product-specific fields, external_reference, and metadataPOST /v1/orders
Authorization: Bearer wl_live_…
Idempotency-Key: source:record:event:v1
{
"items": [{
"product_id": "handwritten",
"configuration": {
"recipient": { "name": "Ada Lovelace", "address": "1 Main St", "city": "Denver", "state": "CO", "zip": "80202" },
"message": "A note from our team."
}
}]
}Verification: The public guide documents the API behavior; it does not make a provider-specific staging or production test claim.
All of the recipes use the same operational shape. Build the durable parts once, then keep each source adapter thin.
GET /v1/products.Derive the key from the source account, source event or object, and intended action:
shopify:store:1001:paid:v1 Reuse the exact key and body after a timeout. A changed body with the same key is an idempotency_conflict, not an invitation to create a second order.
Persist the returned request ID and resource IDs. Treat HTTP status plus error.code as the routing signal, not a generic “failed” flag.
| Outcome | What the integration should do |
|---|---|
| Accepted / scheduled | The API accepted and funded the order, or held it for a future release. Keep the returned order ID and poll for the production state. |
| Pending payment | The order is durable while funding is completed. Do not create another order for the same source event; recover the existing order if payment fails. |
| Batch accepted | A batch returns 202 and independently addressable child results. Persist the batch and item IDs; partial success and pending-payment children are expected. If interrupted, replay the exact same body with the original key; there is no autonomous batch recovery. |
| Error | Use error.code and request_id to decide whether to fix input, fund the account, retry transport, or ask for help. A same-key/different-body request is an idempotency conflict. |
auto_recharge_settings.enabled is true. A saved card or retry request alone is not consent to charge. When enabled, the saved top_up_amount_cents and monthly_limit_cents policy is used subject to per-charge and monthly guardrails, not a deficit override. A configured top-up that remains insufficient leaves the order recoverable without an unbounded loop. Cancellation restores the wallet allocation once; it is not a card refund.Tell us which system is the source, what should trigger the send, and what you need to write back. We’ll help choose the right product schema and first test path.