Sample receipt layout
Your receipt’s visual design is up to you, but the content and field set are fixed. The layout below shows an example with sample data filled in:When to send a receipt
Trigger receipt generation off the transaction completion event:OUTGOING_PAYMENT.COMPLETED— a send (the customer is the sender).INCOMING_PAYMENT.COMPLETED— a receive (the customer is the recipient).
Only completed transactions get a receipt. Transactions that end in
FAILED or EXPIRED do not. Once you send a receipt, freeze its contents — if the transaction is later reversed or refunded, the original receipt stays as issued and the reversal is tracked separately on the transaction record.What a receipt must contain
A compliant receipt combines Lightspark’s regulatory disclosures (fixed values and legal language) with data-driven fields populated from the specific transaction.Lightspark regulatory disclosures
Include these exactly as written on every receipt:Transaction fields
Mapping Grid data to receipt fields
Most receipt fields come directly from the transaction object — available on the completion webhook payload or by retrieving the transaction. All amounts are integers in the smallest unit of their currency (for example, cents), so format them using the currency’sdecimals.
Example: send a receipt on completion
Listen for the completion webhook, verify its signature, assemble the receipt fields, and send the receipt to your customer. See Webhooks for signature verification.Confirm delivery to Grid
After you deliver the receipt to your customer, confirm it with the Confirm receipt delivery endpoint. Grid stores the confirmation timestamp on the transaction’sreceiptDeliveryConfirmedAt field so it can be furnished to regulators on request.
cURL
receiptDeliveryConfirmedAt is optional — if you omit it, Grid records the current server time. Calling the endpoint again for the same transaction updates the stored confirmation time.