{
"event_id": "evt_01hv8xqmb9e8y66q4hb54cfsf9",
"event_type": "transaction.billed",
"occurred_at": "2024-04-12T10:30:27.945096Z",
"notification_id": "ntf_01hv8xqmdrrnsp7rvaf1264cp2",
"data": {
"id": "txn_01hv8m0mnx3sj85e7gxc6kga03",
"items": [
{
"price": {
"id": "pri_01gsz8x8sawmvhz1pv30nge1ke",
"name": "Monthly (per seat)",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 999,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-02-23T13:55:22.538367Z",
"product_id": "pro_01gsz4t5hdjse780zja8vvr7jg",
"unit_price": {
"amount": "3000",
"currency_code": "USD"
},
"updated_at": "2024-04-11T13:54:52.254748Z",
"custom_data": null,
"description": "Monthly",
"trial_period": null,
"billing_cycle": {
"interval": "month",
"frequency": 1
},
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 10,
"proration": null
},
{
"price": {
"id": "pri_01h1vjfevh5etwq3rb416a23h2",
"name": "Monthly (recurring addon)",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 100,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-06-01T13:31:12.625056Z",
"product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
"unit_price": {
"amount": "10000",
"currency_code": "USD"
},
"updated_at": "2024-04-09T07:23:00.907834Z",
"custom_data": null,
"description": "Monthly",
"trial_period": null,
"billing_cycle": {
"interval": "month",
"frequency": 1
},
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 1,
"proration": null
},
{
"price": {
"id": "pri_01gsz98e27ak2tyhexptwc58yk",
"name": "One-time addon",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 1,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-02-23T14:01:28.391712Z",
"product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
"unit_price": {
"amount": "19900",
"currency_code": "USD"
},
"updated_at": "2024-04-09T07:23:10.921392Z",
"custom_data": null,
"description": "One-time addon",
"trial_period": null,
"billing_cycle": null,
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 1,
"proration": null
}
],
"origin": "api",
"status": "billed",
"details": {
"totals": {
"fee": null,
"tax": "5315",
"total": "65215",
"credit": "0",
"balance": "65215",
"discount": "0",
"earnings": null,
"subtotal": "59900",
"grand_total": "65215",
"currency_code": "USD",
"credit_to_balance": "0"
},
"line_items": [
{
"id": "txnitm_01hv8wt98jahpbm1t1tzr06z6n",
"totals": {
"tax": "2662",
"total": "32662",
"discount": "0",
"subtotal": "30000"
},
"product": {
"id": "pro_01gsz4t5hdjse780zja8vvr7jg",
"name": "AeroEdit Pro",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/bT1XUOJAQhOUxGs83cbk_pro.png",
"created_at": "2023-02-23T12:43:46.605Z",
"updated_at": "2024-04-05T15:53:44.687Z",
"custom_data": {
"features": {
"sso": false,
"route_planning": true,
"payment_by_invoice": false,
"aircraft_performance": true,
"compliance_monitoring": true,
"flight_log_management": true
},
"suggested_addons": [
"pro_01h1vjes1y163xfj1rh1tkfb65",
"pro_01gsz97mq9pa4fkyy0wqenepkz"
],
"upgrade_description": "Move from Basic to Pro to take advantage of aircraft performance, advanced route planning, and compliance monitoring."
},
"description": "Designed for professional pilots, including all features plus in Basic plus compliance monitoring, route optimization, and third-party integrations.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01gsz8x8sawmvhz1pv30nge1ke",
"quantity": 10,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "266",
"total": "3266",
"discount": "0",
"subtotal": "3000"
}
},
{
"id": "txnitm_01hv8wt98jahpbm1t1v1sd067y",
"totals": {
"tax": "887",
"total": "10887",
"discount": "0",
"subtotal": "10000"
},
"product": {
"id": "pro_01h1vjes1y163xfj1rh1tkfb65",
"name": "Analytics addon",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/97dRpA6SXzcE6ekK9CAr_analytics.png",
"created_at": "2023-06-01T13:30:50.302Z",
"updated_at": "2024-04-05T15:47:17.163Z",
"custom_data": null,
"description": "Unlock advanced insights into your flight data with enhanced analytics and reporting features. Includes customizable reporting templates and trend analysis across flights.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01h1vjfevh5etwq3rb416a23h2",
"quantity": 1,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "887",
"total": "10887",
"discount": "0",
"subtotal": "10000"
}
},
{
"id": "txnitm_01hv8wt98jahpbm1t1v67vqnb6",
"totals": {
"tax": "1766",
"total": "21666",
"discount": "0",
"subtotal": "19900"
},
"product": {
"id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
"name": "Custom domains",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/XIG7UXoJQHmlIAiKcnkA_custom-domains.png",
"created_at": "2023-02-23T14:01:02.441Z",
"updated_at": "2024-04-05T15:43:28.971Z",
"custom_data": null,
"description": "Make AeroEdit truly your own with custom domains. Custom domains reinforce your brand identity and make it easy for your team to access your account.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
"quantity": 1,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "1766",
"total": "21666",
"discount": "0",
"subtotal": "19900"
}
}
],
"payout_totals": null,
"tax_rates_used": [
{
"totals": {
"tax": "5315",
"total": "65215",
"discount": "0",
"subtotal": "59900"
},
"tax_rate": "0.08875"
}
],
"adjusted_totals": {
"fee": "0",
"tax": "5315",
"total": "65215",
"earnings": "0",
"subtotal": "59900",
"grand_total": "65215",
"currency_code": "USD"
}
},
"checkout": {
"url": null
},
"payments": [],
"billed_at": "2024-04-12T10:30:27.198043152Z",
"address_id": "add_01hv8gq3318ktkfengj2r75gfx",
"created_at": "2024-04-12T07:40:38.00704Z",
"invoice_id": "inv_01hv8m0nn5nbvdejcvv9cpg8jf",
"updated_at": "2024-04-12T10:30:27.584874645Z",
"revised_at": null,
"business_id": null,
"custom_data": null,
"customer_id": "ctm_01hv6y1jedq4p1n0yqn5ba3ky4",
"discount_id": "dsc_01gtgztp8fpchantd5g1wrksa3",
"currency_code": "USD",
"billing_period": {
"ends_at": "2025-04-11T23:59:00Z",
"starts_at": "2024-04-12T00:00:00Z"
},
"invoice_number": null,
"billing_details": {
"payment_terms": {
"interval": "day",
"frequency": 14
},
"enable_checkout": false,
"purchase_order_number": "PO-123",
"additional_information": null
},
"collection_mode": "manual",
"subscription_id": null
}
}Occurs when a transaction is billed. Its status field changes to billed and billed_at is populated.
Marking a transaction as billed is typically used when working with manually-collected transactions to issue an invoice. It’s not typically part of checkout workflows, where collection mode is automatic.
Transactions are marked as billed when:
billed using the API.Billed transactions get an invoice number. They’re considered legal records, so they can’t be deleted or changed.
transaction.updated events occur immediately after to add:
invoice_number, and invoice_id if not already present.subscription_id for any recurring items.{
"event_id": "evt_01hv8xqmb9e8y66q4hb54cfsf9",
"event_type": "transaction.billed",
"occurred_at": "2024-04-12T10:30:27.945096Z",
"notification_id": "ntf_01hv8xqmdrrnsp7rvaf1264cp2",
"data": {
"id": "txn_01hv8m0mnx3sj85e7gxc6kga03",
"items": [
{
"price": {
"id": "pri_01gsz8x8sawmvhz1pv30nge1ke",
"name": "Monthly (per seat)",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 999,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-02-23T13:55:22.538367Z",
"product_id": "pro_01gsz4t5hdjse780zja8vvr7jg",
"unit_price": {
"amount": "3000",
"currency_code": "USD"
},
"updated_at": "2024-04-11T13:54:52.254748Z",
"custom_data": null,
"description": "Monthly",
"trial_period": null,
"billing_cycle": {
"interval": "month",
"frequency": 1
},
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 10,
"proration": null
},
{
"price": {
"id": "pri_01h1vjfevh5etwq3rb416a23h2",
"name": "Monthly (recurring addon)",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 100,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-06-01T13:31:12.625056Z",
"product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
"unit_price": {
"amount": "10000",
"currency_code": "USD"
},
"updated_at": "2024-04-09T07:23:00.907834Z",
"custom_data": null,
"description": "Monthly",
"trial_period": null,
"billing_cycle": {
"interval": "month",
"frequency": 1
},
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 1,
"proration": null
},
{
"price": {
"id": "pri_01gsz98e27ak2tyhexptwc58yk",
"name": "One-time addon",
"type": "standard",
"status": "active",
"quantity": {
"maximum": 1,
"minimum": 1
},
"tax_mode": "account_setting",
"created_at": "2023-02-23T14:01:28.391712Z",
"product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
"unit_price": {
"amount": "19900",
"currency_code": "USD"
},
"updated_at": "2024-04-09T07:23:10.921392Z",
"custom_data": null,
"description": "One-time addon",
"trial_period": null,
"billing_cycle": null,
"unit_price_overrides": [],
"import_meta": null
},
"quantity": 1,
"proration": null
}
],
"origin": "api",
"status": "billed",
"details": {
"totals": {
"fee": null,
"tax": "5315",
"total": "65215",
"credit": "0",
"balance": "65215",
"discount": "0",
"earnings": null,
"subtotal": "59900",
"grand_total": "65215",
"currency_code": "USD",
"credit_to_balance": "0"
},
"line_items": [
{
"id": "txnitm_01hv8wt98jahpbm1t1tzr06z6n",
"totals": {
"tax": "2662",
"total": "32662",
"discount": "0",
"subtotal": "30000"
},
"product": {
"id": "pro_01gsz4t5hdjse780zja8vvr7jg",
"name": "AeroEdit Pro",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/bT1XUOJAQhOUxGs83cbk_pro.png",
"created_at": "2023-02-23T12:43:46.605Z",
"updated_at": "2024-04-05T15:53:44.687Z",
"custom_data": {
"features": {
"sso": false,
"route_planning": true,
"payment_by_invoice": false,
"aircraft_performance": true,
"compliance_monitoring": true,
"flight_log_management": true
},
"suggested_addons": [
"pro_01h1vjes1y163xfj1rh1tkfb65",
"pro_01gsz97mq9pa4fkyy0wqenepkz"
],
"upgrade_description": "Move from Basic to Pro to take advantage of aircraft performance, advanced route planning, and compliance monitoring."
},
"description": "Designed for professional pilots, including all features plus in Basic plus compliance monitoring, route optimization, and third-party integrations.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01gsz8x8sawmvhz1pv30nge1ke",
"quantity": 10,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "266",
"total": "3266",
"discount": "0",
"subtotal": "3000"
}
},
{
"id": "txnitm_01hv8wt98jahpbm1t1v1sd067y",
"totals": {
"tax": "887",
"total": "10887",
"discount": "0",
"subtotal": "10000"
},
"product": {
"id": "pro_01h1vjes1y163xfj1rh1tkfb65",
"name": "Analytics addon",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/97dRpA6SXzcE6ekK9CAr_analytics.png",
"created_at": "2023-06-01T13:30:50.302Z",
"updated_at": "2024-04-05T15:47:17.163Z",
"custom_data": null,
"description": "Unlock advanced insights into your flight data with enhanced analytics and reporting features. Includes customizable reporting templates and trend analysis across flights.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01h1vjfevh5etwq3rb416a23h2",
"quantity": 1,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "887",
"total": "10887",
"discount": "0",
"subtotal": "10000"
}
},
{
"id": "txnitm_01hv8wt98jahpbm1t1v67vqnb6",
"totals": {
"tax": "1766",
"total": "21666",
"discount": "0",
"subtotal": "19900"
},
"product": {
"id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
"name": "Custom domains",
"type": "standard",
"status": "active",
"image_url": "https://paddle.s3.amazonaws.com/user/165798/XIG7UXoJQHmlIAiKcnkA_custom-domains.png",
"created_at": "2023-02-23T14:01:02.441Z",
"updated_at": "2024-04-05T15:43:28.971Z",
"custom_data": null,
"description": "Make AeroEdit truly your own with custom domains. Custom domains reinforce your brand identity and make it easy for your team to access your account.",
"tax_category": "standard",
"import_meta": null
},
"price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
"quantity": 1,
"tax_rate": "0.08875",
"unit_totals": {
"tax": "1766",
"total": "21666",
"discount": "0",
"subtotal": "19900"
}
}
],
"payout_totals": null,
"tax_rates_used": [
{
"totals": {
"tax": "5315",
"total": "65215",
"discount": "0",
"subtotal": "59900"
},
"tax_rate": "0.08875"
}
],
"adjusted_totals": {
"fee": "0",
"tax": "5315",
"total": "65215",
"earnings": "0",
"subtotal": "59900",
"grand_total": "65215",
"currency_code": "USD"
}
},
"checkout": {
"url": null
},
"payments": [],
"billed_at": "2024-04-12T10:30:27.198043152Z",
"address_id": "add_01hv8gq3318ktkfengj2r75gfx",
"created_at": "2024-04-12T07:40:38.00704Z",
"invoice_id": "inv_01hv8m0nn5nbvdejcvv9cpg8jf",
"updated_at": "2024-04-12T10:30:27.584874645Z",
"revised_at": null,
"business_id": null,
"custom_data": null,
"customer_id": "ctm_01hv6y1jedq4p1n0yqn5ba3ky4",
"discount_id": "dsc_01gtgztp8fpchantd5g1wrksa3",
"currency_code": "USD",
"billing_period": {
"ends_at": "2025-04-11T23:59:00Z",
"starts_at": "2024-04-12T00:00:00Z"
},
"invoice_number": null,
"billing_details": {
"payment_terms": {
"interval": "day",
"frequency": 14
},
"enable_checkout": false,
"purchase_order_number": "PO-123",
"additional_information": null
},
"collection_mode": "manual",
"subscription_id": null
}
}Signature for this request. Use to verify that webhooks come from Paddle.
"ts=1671552777;h1=eb4d0dc8853be92b7f063b9f3ba5233eb920a09459b6e6b2c26705b4364db151"
Occurs when a transaction is billed. Its status field changes to billed and billed_at is populated.
Marking a transaction as billed is typically used when working with manually-collected transactions to issue an invoice. It's not typically part of checkout workflows, where collection mode is automatic.
Transactions are marked as billed when:
billed using the API.Billed transactions get an invoice number. They're considered legal records, so they can't be deleted or changed.
transaction.updated events occur immediately after to add:
invoice_number, and invoice_id if not already present.subscription_id for any recurring items.Show child attributes
Respond with an HTTP 200 status code within 5 seconds to let Paddle know that you successfully received the message.
If your server sends another kind of status code or doesn't respond, Paddle automatically retries using an exponential backoff schedule.