Skip to main content

order.paid

Announces that an order was paid. The payload below goes in the data field of the envelope, and follows the payload conventions.

When it is sent​

Once per order, when the order's first approved sale payment is recorded:

  • Later payments of the same order do not send it again. Subscription renewals do not send it.
  • A payment approved on an order that is already cancelled, expired, refunded or otherwise closed does not send it.
  • A shipping charge alone does not send it.

The idempotency key is order.paid:order:<order id>.

Payload​

{
"order": {
"id": "1001",
"uuid": "9b2f6c1e-4a7d-4e8b-9f3a-2c5d8e1f0a42",
"external_id": "ORD-1001",
"status": "approved",
"type": "internal",
"recurring": false,
"currency_id": "USD",
"amount_in_cents": 2248,
"tax_in_cents": 390,
"gateway_type": "stripe",
"payment_method": "card",
"created_at": "2026-01-15T14:30:00Z"
},
"user": {
"id": "501",
"uuid": "3e7a1d2c-8b4f-4c6e-a9d1-7f2b5c8e0d13",
"external_id": "USR-501",
"email": "[email protected]",
"name": "Jane Buyer",
"billing_information": {
"national_id": "20123456789",
"national_id_type": "CUIT",
"address_line_1": "Av. Example 123",
"address_line_2": null,
"city": "Buenos Aires",
"state": "CABA",
"country": "AR",
"postal_code": "C1001",
"other_information": null
}
},
"products": [
{
"id": "2001",
"type": "content",
"amount_in_cents": 1349,
"currency_id": "USD",
"content": {
"id": "301",
"external_id": "9780000000001",
"name": "An Example Book",
"file_type": "epub"
},
"plan": null,
"coupon": {
"code": "WELCOME10",
"discount_percentage": 10,
"shipping_discount_percentage": null,
"take_quantity": null,
"pay_quantity": null
}
},
{
"id": "2002",
"type": "content",
"amount_in_cents": 899,
"currency_id": "USD",
"content": {
"id": "302",
"external_id": "9780000000002",
"name": "Another Example Book",
"file_type": "pdf"
},
"plan": null,
"coupon": {
"code": "WELCOME10",
"discount_percentage": 10,
"shipping_discount_percentage": null,
"take_quantity": null,
"pay_quantity": null
}
}
],
"payments": [
{
"id": "4001",
"product_id": "2001",
"gateway_transaction_id": "pi_example_0001",
"status": "approved",
"sale_type": "retail",
"recurring_cycle": null,
"amount_in_cents": 1349,
"tax_in_cents": 234,
"tax_rate": 21,
"sale_country": "AR",
"sale_state": "CABA",
"currency_id": "USD",
"exchange_rate_to_usd": 1,
"tenant_payout_in_cents": 1003,
"payout_currency_id": "USD",
"paid_at": "2026-01-15T14:30:00Z",
"created_at": "2026-01-15T14:30:05Z"
},
{
"id": "4002",
"product_id": "2002",
"gateway_transaction_id": "pi_example_0001",
"status": "approved",
"sale_type": "retail",
"recurring_cycle": null,
"amount_in_cents": 899,
"tax_in_cents": 156,
"tax_rate": 21,
"sale_country": "AR",
"sale_state": "CABA",
"currency_id": "USD",
"exchange_rate_to_usd": 1,
"tenant_payout_in_cents": 669,
"payout_currency_id": "USD",
"paid_at": "2026-01-15T14:30:00Z",
"created_at": "2026-01-15T14:30:05Z"
}
]
}
Tax in amounts

Every amount_in_cents includes tax, with the tax it carries in tax_in_cents: the order's, each product's and each payment's. In the example, the payment of 1349 includes 234 of tax.

data.order​

FieldTypeDescription
idstringOrder id.
uuidstringOrder UUID.
external_idstring or nullYour own reference for the order.
statusstringAlways approved in this event.
typestringOrder type: internal for a store checkout, sale, permission, report or internal_report.
recurringbooleantrue when a product of the order bills again, such as a recurring subscription.
currency_idstring or nullISO 4217 currency code of the order.
amount_in_centsintegerOrder total, tax included.
tax_in_centsintegerTax included in the total.
gateway_typestringPayment gateway that processed the order, for example stripe.
payment_methodstring or nullPayment method as the gateway reports it. Set for Stripe, Mercado Pago and PayU, null for other gateways.
created_atstring or nullISO 8601 UTC time the order was created.

data.user​

FieldTypeDescription
idstringUser id.
uuidstringUser UUID.
external_idstring or nullYour own reference for the user.
emailstring or nullUser email address.
namestring or nullUser name.
billing_informationobject or nullThe billing details of the order, or null when the buyer gave none.

billing_information has these fields, each a string or null: national_id, national_id_type (for example CUIT), address_line_1, address_line_2, city, state, country, postal_code and other_information.

data.products​

One item per line of the order, sorted by id. A line links the buyer to a content item (type: content) or to a plan (type: subscription).

FieldTypeDescription
idstringLine id. Payments reference it in product_id. This is not the catalog id: that is content.id or plan.id.
typestringcontent or subscription.
amount_in_centsintegerLine amount, tax included.
currency_idstring or nullISO 4217 currency code of the line.
contentobject or nullThe content item, when type is content.
planobject or nullThe plan, when type is subscription.
couponobject or nullThe coupon applied to the line, or null.

content:

FieldTypeDescription
idstringContent id, as in the Content API.
external_idstring or nullYour own reference for the content, such as an ISBN.
namestringContent name.
file_typestring or nullFile format, for example epub or pdf.

plan:

FieldTypeDescription
idstringPlan id.
external_idstring or nullYour own reference for the plan.
typestringPlan type, for example recurring or prepaid.
namestring or nullPlan name.

coupon:

FieldTypeDescription
codestringCoupon code.
discount_percentagenumber or nullDiscount on the price, from 0 to 100.
shipping_discount_percentagenumber or nullDiscount on shipping, from 0 to 100.
take_quantityinteger or nullFor a "take X, pay Y" coupon, the X.
pay_quantityinteger or nullFor a "take X, pay Y" coupon, the Y.

data.payments​

The approved payments recorded by the charge that paid the order, sorted by id.

FieldTypeDescription
idstringPayment id.
product_idstring or nullThe products[].id this payment pays for. null on a shipping payment.
gateway_transaction_idstring or nullTransaction id at the payment gateway. Payments of one charge can share it.
statusstringAlways approved in this event.
sale_typestring or nullretail, subscription, external, shipping or publica_one_redemption. Nobody pays for a redemption, so its amount_in_cents is the issue's list price.
recurring_cycleinteger or nullBilling cycle number of a recurring subscription payment, starting at 1. null for other payments.
amount_in_centsintegerPayment amount, tax included.
tax_in_centsintegerTax included in amount_in_cents.
tax_ratenumberTax rate as a percentage. It reads 0 when the gateway computed the tax (Stripe Tax), so rely on tax_in_cents.
sale_countrystring or nullISO 3166-1 alpha-2 code of the country the sale is located in. It comes from the user's billing information when the payment was recorded, then from the payment gateway, then from the country your store signed up with.
sale_statestring or nullState or province of the sale, from the same source as sale_country. Usually a subdivision code without the country prefix, such as B, but it can be a name as the buyer entered it. Often null.
currency_idstring or nullISO 4217 currency code of the payment.
exchange_rate_to_usdnumber or nullUSD per unit of currency_id, as recorded with the payment. Multiply an amount in currency_id by it to get USD. For example, 1.11 on a EUR payment means 1 EUR = 1.11 USD.
tenant_payout_in_centsinteger or nullAmount that corresponds to your store.
payout_currency_idstringISO 4217 currency code of tenant_payout_in_cents.
paid_atstringISO 8601 UTC charge date, as the gateway reported it.
created_atstring or nullISO 8601 UTC time the payment was recorded. It can be later than paid_at, for example when the gateway notified the payment late.
  • Webhooks: Endpoints, request format, signature verification and delivery.
  • Orders API: The order types and fields this event mirrors.