Manage Billing and Refunds for Integrations
When a Vercel user installs your native integration, you manage billing through the Vercel API billing endpoints. Each integration operates its own independent billing lifecycle, allowing Vercel users to configure different payment methods for each integration.
You can choose between two billing models:
- Installation-level billing: Charges apply to the entire installation. A single billing plan covers all resources provisioned under that installation.
- Resource-level billing: Charges are scoped to individual products or resources. Each resource can have its own billing plan.
You determine which model to use. You can only submit one invoice per resource per billing period, but a single invoice can include multiple line items for the same resource.
You control the billing cycle through the field in your API calls. There's no required day of the month for billing cycles to align across integrations. Each integration can bill on its own schedule.
Vercel users can configure a different payment method for each integration installation, independent of their Vercel plan payment method and other integrations.
Invoices move through several states as they're processed:
| State | Description |
|---|---|
| pending | Default state after you submit an invoice. Vercel queues it for immediate processing. |
| scheduled | Queued for future processing based on the billing plan's timing (at signup, period start, or period end). |
| invoiced | Vercel processed and sent the invoice to the Vercel user. |
| paid | Vercel received payment successfully. |
| notpaid | Payment failed on first attempt. Vercel continues retrying up to 9 times while the invoice remains in this state. |
| refunded | Vercel fully or partially refunded the invoice. |
When an invoice enters status, Vercel does not automatically restrict access to deployments, teams, or products. The webhook fires on each failed payment attempt, not just the final one. Since Vercel retries payment up to 9 times, you may receive multiple webhooks before payment eventually succeeds. Wait at least 15 days before taking any destructive actions like deleting databases. In the meantime, you may choose to degrade service or pause fulfillment (for example, stop issuing tokens) until payment succeeds.
You have flexibility in how you structure charges. A single invoice can include multiple line items covering:
- Flat fees: Fixed monthly or periodic charges
- Usage-based charges: Costs calculated from actual resource consumption
- Tiered pricing: Different rate tiers (for example, tier 1 usage at one rate, tier 2 at another)
Each line item can specify a unit, quantity, rate, and detailed description. This gives Vercel users a clear breakdown of charges.
We recommend consolidating all resource billing under a single invoice and keeping resources on the same billing cycle. This reduces the number of invoices Vercel users receive each month, but it's not a requirement.
When working with billing data:
- Decimal precision: All monetary values use 2 decimal places
- Minimum threshold: Vercel won't send invoices totaling less than $0.50. You should still submit billing data for transparency so Vercel users can confirm no additional costs accrued
To bill customers, call the Vercel billing API endpoints. All requests require the from the Upsert Installation request body for authorization.
Call the Submit Billing Data endpoint () at least once a day, ideally once per hour.
This data is for display purposes only, helping Vercel users understand their expected charges throughout the billing period. Vercel does not generate invoices or process payments from this data. Actual billing happens only when you submit an invoice.
The following example shows a request with billing items and usage metrics:
- period.start / period.end: The full billing period (for example, to for a monthly cycle)
- eod: The end-of-day timestamp for this data snapshot, representing a single day within the billing period
- usage values: Submit running totals for the entire period, not incremental usage since your last report. Vercel uses the latest values you submit.
At the end of a billing period, call the Submit Invoice endpoint () to charge the customer.
The following example shows a request with multiple line items:
We recommend including an in your invoice requests. This lets you tie invoices to your internal billing records for easier reconciliation.
The response includes an you can use to track status or request refunds.
To check invoice status, call the Get Invoice endpoint (). You can also subscribe to billing webhooks to receive real-time updates when invoice states change.
You can use test mode to validate your billing integration before going live. Test mode uses the object in the Submit Invoice API with a field:
- : Runs full validation including date checks, item validation, discount validation, and duplicate detection
- : Skips these validations
Outside of test mode, Vercel always runs validation and you cannot override it.
Test-mode invoices don't appear in the Integration Console or Dashboard. This is because test invoices bypass the backend billing processes where invoices are normally retrieved for display.
To test with live payment methods during the pre-launch phase:
- Remove the object from your Submit Invoice calls
- Submit the invoice
- Wait for the and webhooks
- Issue a refund using the Invoice Actions API
When you request a refund, Vercel handles it as follows:
- If Vercel hasn't charged the invoice yet, it cancels the invoice
- If Vercel already charged the invoice, it attempts to refund the original payment method
- If the payment method isn't working, Vercel creates a support ticket
- If anything goes wrong with the refund attempt, Vercel creates a support ticket
For invoices in status, a refund request will succeed and move the status to , then to once the funds are returned. Only invoices already in status are blocked from additional refund requests.
With installation-level billing, the installation goes through finalization after deletion. This gives you time to calculate any remaining charges and submit final invoices. Finalization follows these rules:
- Open invoices exist: Vercel blocks finalization until invoices are settled. You can refund these invoices during this time.
- Finalization window: By default, you have 24 hours after deletion to submit any final invoices. If you submit invoices during this window, the installation goes back to step 1. To skip this window, return in your Delete Installation endpoint response.
- Installation finalized: Refunds must be processed manually through Vercel customer support.
Vercel handles all taxation since Vercel issues the invoices. You only submit raw service charges to the billing APIs. You don't need to calculate or add tax to your charges.
Only Vercel users with Owner or Billing roles can view invoices for your integration. They can view their invoices by:
- Going to the Integrations tab in their Vercel dashboard
- Selecting Manage next to your integration
- Navigating to the Invoices section
Was this helpful?