Automations
Durable accounting recipes and their execution model.
Queue a recipe with POST /v1/automations:
{
"connection_id": "00000000-0000-0000-0000-000000000000",
"recipe": "quote.accept_and_create_invoice",
"input": {
"quote_resource_id": "00000000-0000-0000-0000-000000000000",
"external_reference": "deal_814"
}
}Recipes
| Recipe | Result |
|---|---|
contact.upsert | Creates or reconciles a contact |
quote.draft | Creates a draft quote |
quote.accept_and_create_invoice | Accepts a quote, then creates a linked draft invoice |
invoice.create | Creates an invoice |
invoice.record_payment | Records a payment against an invoice |
purchase_order.create | Creates a purchase order |
document.fetch | Fetches an invoice, quote, or purchase-order PDF |
Operations are claimed with row locks and leases, retried with bounded exponential backoff, and
moved to dead_letter when attempts are exhausted. The Railway MVP runs an embedded worker that
claims work directly from PostgreSQL. An in-process signal minimizes latency, while periodic polling
recovers missed signals, retries, and interrupted deployments. Cloud Tasks can own delivery later
without changing the operation ledger or processing path.
An automation run is metered once after successful completion. Failed attempts do not create duplicate usage events.