cypress.DOCS
Log inRegister
Cypress Docs
Developers

Due diligence & closing

What happens between an accepted offer and a sold vehicle — every step evented, every document as data.

TL;DRAI summary

After accepting an offer, this chapter explains the step-by-step closing process for a vehicle sale. You’ll see how money, legal documents, and physical release are handled, with events at each stage to keep you informed.

Dive deeper:

Acceptance is not the sale. A used vehicle changing hands involves money movement, legal paper, titles, and physical release — and deals genuinely fall through here. Cypress structures all of it as a step-by-step closing that both sides walk together, and your webhooks narrate every step, not just the bookends.

Why this matters to an integrator

A partner's back office usually reconciles three things: did the paper get signed, did the money arrive, and what were the exact figures. The closing events answer all three as structured data — including the full bill-of-sale payload — so nothing requires a human reading a PDF.

The closing pipeline

FEEBOSCONFIRM_FUNDSGATE_PASSTITLEPICKUPDOCUMENT.GENERATED+ SIGNED (full JSON)PAYMENT.RECEIVEDPURCHASED + COMPLETEDCLOSING.STEP.COMPLETED fires for EVERY step above — funds confirmation, gate pass, title chain included.CLOSING.STARTED opens the pipeline; CLOSING.CANCELLED reports a fallen-through deal with reason and culprit.

Deals opened before the six-step shape shipped still carry their original nine rows (BUYER_SIGN, PAYMENT and TITLE_RECEIPT among them) until they are migrated. Key your integration off each step's stepKey, never its number or the total count — the same number names different steps on the two shapes.

The steps, from a seller's perspective

Fee & data sheet. The commission settles and both sides confirm the deal's facts — parties, payment routing, delivery location — on a shared data sheet. That sheet becomes the single source every document renders from.

Bill of sale. Generated from your org's template against the data sheet — CLOSING.DOCUMENT.GENERATED fires with the complete data-sheet JSON the render used. Both parties sign in this one step, in the order the template declares; CLOSING.DOCUMENT.SIGNED delivers the executed copy (fresh presigned link) plus the same structured payload, and the last signature completes the step.

Payment & funds. The buyer pays against the instructions on the bill of sale, off the rail. The seller confirms receipt and records the method — CLOSING.PAYMENT.RECEIVED (with method and reference) plus the step's own STEP.COMPLETED. Confirming here also generates the gate pass.

Release & title. The gate pass authorizes physical release on the seller's signature, the title ships with tracking (a cheque deal holding until the funds are confirmed cleared), and pickup completes the deal: LISTINGS.PURCHASED + CLOSING.COMPLETED, sale price final.

The bill of sale as data

The document events carry the paper's contents, not just a link:

{
  "eventType": "CLOSING.DOCUMENT.SIGNED",
  "resource": "closing",
  "body": {
    "documentName": "bill-of-sale-v3.pdf",
    "documentUrl": "https://…presigned, ~1h…",
    "stepKey": "BOS",
    "data": {
      "sale.price": 21900,
      "sale.date": "2026-08-19",
      "vehicle.vin": "1FTFW1ET5DFC10312",
      "vehicle.odometer": 88500,
      "seller.legalName": "NU Relay LLC",
      "payment.recipient": "LENDER"
    },
    "provenance": {
      "sheetRevision": 4,
      "signaturePlan": [
        { "role": "SELLER", "order": 1 },
        { "role": "BUYER", "order": 2 }
      ]
    }
  }
}

data is the closing data sheet's field map — the exact values the template rendered. Field keys follow your org's document templates; treat unknown keys as forward-compatible.

Deals can fail

CLOSING.CANCELLED carries the reason, the responsible party (seller/buyer/Cypress), and the vehicle's next disposition — back to market, archived, or sold. Your listing row reflects the outcome with the matching lifecycle event.