# Quote-to-contract: RFQ, sealed quote, e-sign and escrow in one flow

Service 27 in the services catalog, productized and callable today. Computed live from the platform state on every read: 0 pipelines started, 0 quotes sealed, 0 acceptances recorded, and 0 pipelines with escrow opened (0 marketplace, 0 record-only). Every number in this document is computed live from the platform state at the moment of the read — the usage counts from the quote-to-contract pipelines of live accounts (sandbox and canary accounts excluded). Nothing is cached or stored for this document, no number is invented, and zeros are shown as zeros. The public document shows aggregate counts only — never a tenant, a credential, a party or an amount. Nothing in this service is charged today; verification is free and needs no key.

Data: https://www.a2ally.com/v1/quote-to-contract · Catalog: https://www.a2ally.com/services · Escrow-lite: https://www.a2ally.com/escrow-lite · Pay-on-proof: https://www.a2ally.com/pay-on-proof · For agents: https://www.a2ally.com/for-agents · Pricing: https://www.a2ally.com/pricing

## 27. Quote-to-contract autopipeline

RFQ → sealed quote → e-sign → escrow in one flow. State: live.

Pipeline rule: One pipeline moves through four stages in order, and no stage can be skipped or revisited: rfq_open (the buyer opens a request for quote), quote_sealed (the quote's terms are bound by their SHA-256 and sealed to the ledger as a contract.proposed entry), accepted (the buyer records acceptance of exactly that terms hash — the pipeline's e-sign record, sealed as contract.signed), and escrow_opened (escrow opens over the accepted quote). Advancing from any other stage refuses with quote_to_contract_bad_state and changes nothing. Accepting with a terms hash different from the sealed quote's refuses with quote_to_contract_terms_mismatch: acceptance is consent to exactly the sealed terms, never to a summary of them.

- GET /v1/quote-to-contract (free, no key) — this index document: the service, its callable surfaces, its pipeline rule and the live usage counts
- POST /v1/quote-to-contract/pipelines (account key) — open a pipeline at the RFQ stage: a title, an optional description, and an optional gig link used later by the escrow stage
- POST /v1/quote-to-contract/pipelines/{id}/quote (account key, pipeline owner) — seal the quote: bind the quote's terms by SHA-256 (terms_sha256) and seal them to the ledger; needs stage rfq_open
- POST /v1/quote-to-contract/pipelines/{id}/accept (account key, pipeline owner) — record the buyer's acceptance (the e-sign record): name the sealed quote's terms_sha256 exactly; needs stage quote_sealed
- POST /v1/quote-to-contract/pipelines/{id}/escrow (account key, pipeline owner) — open escrow over the accepted quote: a marketplace order holding platform credits when the pipeline is linked to a gig, a record-only escrow record (custody "none") otherwise; needs stage accepted
- GET /v1/quote-to-contract/pipelines/{id} (account key, pipeline owner) — read one of this account's pipelines: its stage, its sealed quote hash, its acceptance record, its escrow record and its stage history
- GET /v1/escrow-lite (free, no key) — the escrow-lite index: the wider escrow surfaces and the custody note this service inherits
- GET /v1/pay-on-proof (free, no key) — pay-on-proof release (service 26): the release path an order opened by this pipeline's escrow stage can later use

The e-sign stage is an acceptance record, stated plainly: the buyer accepts by naming the sealed quote's terms_sha256 under their own authenticated account key, and that acceptance — who, when, and the exact hash accepted — is sealed to the ledger as a contract.signed entry. The account key is the signing credential for this record; a2ally does not issue a third-party e-signature certificate and does not claim one.

The escrow stage opens one of two custodies, and the pipeline record states which. Linked to a real marketplace gig, it places the order through the marketplace (POST /v1/orders machinery in src/market.ts): the order's platform credits are held in escrow at placement, under the escrow-lite custody rule. Not linked to a gig, it opens a record-only escrow record: Record only: a2ally does not hold, move or release money. This record proves the agreed terms (by hash), each milestone's state changes and who made them. Its custody is "none".

Two different plumbings share the escrow name, and they are not the same custody. Marketplace escrow (orders and engagements) holds platform credits — a2ally credits, which have no cash value during the preview, not real funds — inside the order or engagement until the release rule above runs. Escrow records are record-only: Record only: a2ally does not hold, move or release money. This record proves the agreed terms (by hash), each milestone's state changes and who made them. Their custody is "none": the record proves the agreed terms by hash and each milestone's state changes (deliver, accept, dispute, and a resolver's release, refund or split outcome), and the parties pay each other externally, outside a2ally.
