Billing
Inspect pricing and usage, choose a plan, buy message packages, manage saved cards, and configure automatic credit top-ups.
Balance
The required production_blocked field reports the current production API-key and MCP credit restriction, including the existing recovery exemptions, even when this read uses a sandbox key. It is not a general send-eligibility verdict. Activation keeps an engaged block through partial top-ups and zero until the wallet becomes positive; a positive wallet may still be insufficient for the next rental fee.
held_brl is the credit set aside by outstanding production holds, such as a payment completion fee waiting for the payment outcome. A hold is already deducted from balance_brl, so balance_brl + held_brl is the balance with nothing held. A hold is not spend: it is either charged as a usage debit or released back to the wallet. Sandbox holds never move the wallet and are not counted.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "credit_balance" | |
production_blockedrequired | boolean | Whether the current production credit policy blocks restricted API-key and MCP operations. This is not a general send-eligibility verdict. |
organization_idrequired | string | |
balance_brlrequired | string | |
held_brlrequired | string | Credit held by outstanding production reservations, such as a payment completion fee awaiting the payment outcome, or a phone number's first month, held from the rental approval until the carrier delivers the number. A hold is already deducted from balance_brl, so balance_brl + held_brl is the balance with nothing held. A hold is not spend: it settles into a usage debit or is released back to the wallet. Sandbox holds never move the wallet and are not counted. Decimal string with four places. |
currencyrequired | "brl" | |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Rate-card history
Returns effective-dated BRL rate cards in reverse chronological order. Use the cursor fields to page through historical pricing.
Query
| Field | Type | Notes |
|---|---|---|
limitrequired | integer | range 1..100 |
starting_after | string | |
currency | "brl" |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null |
Current rate card
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "rate_card" | |
namerequired | string | |
currencyrequired | "brl" | |
effective_fromrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
effective_torequired | string<ISO-8601> | null | |
entriesrequired | object[] |
Available plans
Lists the purchasable plan catalog, including each plan's effective transport rate, throughput tier, and phone-number allowance.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] |
Current plan
Returns the organization's effective subscription. A status of none represents the free tier.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "subscription" | |
statusrequired | "active" | "past_due" | "canceled" | "none" | |
plan_offering_idrequired | string | null | |
display_namerequired | string | null | |
billing_railrequired | "stripe_card" | "pix_annual" | null | |
throughput_tierrequired | "starter" | "growth" | "scale" | |
max_phonesrequired | integer | null | |
platform_fee_multiplierrequired | string | |
net_transport_rate_brlrequired | string | |
monthly_fee_brlrequired | string | null | |
current_period_endrequired | string<ISO-8601> | null | |
cancel_at_period_endrequired | boolean | |
salvy_byok_enabledrequired | boolean |
Subscribe to a plan
Requires billing:write and supports Idempotency-Key. Card subscriptions charge the saved default card; annual Pix subscriptions return checkout details in pix.
Request body
| Field | Type | Notes |
|---|---|---|
plan_offering_idrequired | string | |
railrequired | "stripe_card" | "pix_annual" |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "subscription_checkout" | |
subscriptionrequired | object | |
pixrequired | object | null |
Change the current plan
Changes an active subscription to another catalog offering. Reuse one Idempotency-Key across retries. The switch is asynchronous: the response still shows the current plan, and the new plan's entitlement applies when the payment provider confirms the paid invoice — poll GET /v1/billing/plan to observe it.
Request body
| Field | Type | Notes |
|---|---|---|
plan_offering_idrequired | string |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "subscription" | |
statusrequired | "active" | "past_due" | "canceled" | "none" | |
plan_offering_idrequired | string | null | |
display_namerequired | string | null | |
billing_railrequired | "stripe_card" | "pix_annual" | null | |
throughput_tierrequired | "starter" | "growth" | "scale" | |
max_phonesrequired | integer | null | |
platform_fee_multiplierrequired | string | |
net_transport_rate_brlrequired | string | |
monthly_fee_brlrequired | string | null | |
current_period_endrequired | string<ISO-8601> | null | |
cancel_at_period_endrequired | boolean | |
salvy_byok_enabledrequired | boolean |
Cancel the current plan
Schedules cancellation according to the current billing period. The request has no JSON body and supports Idempotency-Key.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "subscription" | |
statusrequired | "active" | "past_due" | "canceled" | "none" | |
plan_offering_idrequired | string | null | |
display_namerequired | string | null | |
billing_railrequired | "stripe_card" | "pix_annual" | null | |
throughput_tierrequired | "starter" | "growth" | "scale" | |
max_phonesrequired | integer | null | |
platform_fee_multiplierrequired | string | |
net_transport_rate_brlrequired | string | |
monthly_fee_brlrequired | string | null | |
current_period_endrequired | string<ISO-8601> | null | |
cancel_at_period_endrequired | boolean | |
salvy_byok_enabledrequired | boolean |
Packages
Lists past package purchases and the package offerings currently available to the organization.
Query
| Field | Type | Notes |
|---|---|---|
limitrequired | integer | range 1..100 |
starting_after | string | |
status | "pending" | "succeeded" | "failed" | "refunded" | "expired" |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null | |
available_packagesrequired | object[] |
Purchases a package with a saved card. This write requires billing:write and supports Idempotency-Key.
Request body
| Field | Type | Notes |
|---|---|---|
package_coderequired | string | len 1..∞ |
payment_method | "card" | |
payment_method_id | string | len 1..∞ |
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "credit_topup" | |
kindrequired | "cash" | "package" | "x402" | |
statusrequired | "pending" | "succeeded" | "failed" | "refunded" | "expired" | |
amount_brlrequired | string | |
payment_methodrequired | "pix" | "card" | "x402" | "manual" | "promotion" | |
package_coderequired | string | null | |
quota_messagesrequired | integer | null | |
quota_remainingrequired | integer | null | |
stripe_payment_intent_idrequired | string | null | |
stripe_client_secretrequired | string | null | |
provider | "stripe" | "abacate_pay" | "manual" | "promotion" | |
abacate_charge_id | string | null | |
pix_copy_paste | string | null | |
pix_qr_code_base64 | string | null | |
pix_expires_at | string<ISO-8601> | null | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
completed_atrequired | string<ISO-8601> | null |
Saved payment methods
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | "false" | |
next_cursorrequired | null |
Creates a Stripe SetupIntent for collecting a card without charging it. The client secret is sensitive and is returned only for client-side confirmation.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "billing_payment_method_setup_intent" | |
stripe_customer_idrequired | string | |
stripe_setup_intent_idrequired | string | |
stripe_client_secretrequired | string | null |
Saves a payment method after the SetupIntent succeeds. The request supports Idempotency-Key. When a failed automatic top-up turned automatic top-up off, saving a card turns it back on and points it at that card, with no immediate charge. A configuration turned off with PUT /v1/billing/auto-topup, or by deleting its card, stays off.
Request body
| Field | Type | Notes |
|---|---|---|
stripe_payment_method_idrequired | string | len 1..∞ |
set_default | boolean |
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "billing_payment_method" | |
typerequired | "card" | |
brandrequired | string | null | |
last4required | string | null | |
exp_monthrequired | integer | null | |
exp_yearrequired | integer | null | |
is_defaultrequired | boolean | |
statusrequired | "active" | "deleted" | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Makes an active saved card the default for plan and package charges. The request has no JSON body and supports Idempotency-Key. Like saving a card, it turns back on only a configuration a failed automatic top-up turned off, pointed at that card, with no immediate charge.
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "billing_payment_method" | |
typerequired | "card" | |
brandrequired | string | null | |
last4required | string | null | |
exp_monthrequired | integer | null | |
exp_yearrequired | integer | null | |
is_defaultrequired | boolean | |
statusrequired | "active" | "deleted" | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Removes a saved card. The response preserves its public record with status: deleted; retries may reuse the same Idempotency-Key.
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "billing_payment_method" | |
typerequired | "card" | |
brandrequired | string | null | |
last4required | string | null | |
exp_monthrequired | integer | null | |
exp_yearrequired | integer | null | |
is_defaultrequired | boolean | |
statusrequired | "active" | "deleted" | |
created_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
updated_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
Automatic top-up
When an automatic top-up fails, enabled turns false without any write of yours, and you are notified once. Saving a card or making one default turns back on only a configuration a failure turned off, pointed at that card; PUT with enabled: true turns it on as well. None of these charges immediately: the next automatic top-up starts when a debit takes the balance from above threshold_brl to at or below it.
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "auto_topup_config" | |
enabledrequired | boolean | |
threshold_brlrequired | string | |
amount_brlrequired | string | |
payment_method_idrequired | string | null | |
last_triggered_atrequired | string<ISO-8601> | null | |
updated_atrequired | string<ISO-8601> | null |
Replaces the organization's auto-top-up configuration. An enabled configuration needs an active saved payment method and supports Idempotency-Key. enabled: true turns automatic top-up on, including a configuration a failure turned off; enabled: false keeps it off even when a card is saved later.
Request body
| Field | Type | Notes |
|---|---|---|
enabledrequired | boolean | |
threshold_brlrequired | string | pattern: ^\d+(\.\d{1,2})?$ |
amount_brlrequired | string | pattern: ^\d+(\.\d{1,2})?$ |
payment_method_id | string | null |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "auto_topup_config" | |
enabledrequired | boolean | |
threshold_brlrequired | string | |
amount_brlrequired | string | |
payment_method_idrequired | string | null | |
last_triggered_atrequired | string<ISO-8601> | null | |
updated_atrequired | string<ISO-8601> | null |
Ledger
Lists debits, credits, and payment completion-fee holds newest first. Only debit entries are spend. A payment fee shows as a payment.initiation debit when the payment is created, a hold for the completion fee, and later either a release that returns the hold or a payment.completion debit that charges it; the hold entry stays listed after it is charged. Each of these entries carries payment_fee with the payment's object and id and the fee reservation id, so you can match them to the payment. Other holds, such as a number's activation fee, appear only as the debit they settle into. Usage and holds default to production; pass environment=sandbox to list sandbox ones, which never move the wallet.
Query
| Field | Type | Notes |
|---|---|---|
limitrequired | integer | Maximum number of items to return. Defaults to 20; maximum 100. range 1..100 |
starting_after | string | Opaque cursor from the previous response next_cursor. |
environment | "sandbox" | "production" | Filter ledger entries to one environment kind. |
source_type | "usage" | "credit_topup" | "payment_fee_hold" | Filter by ledger source type. `payment_fee_hold` lists payment completion-fee holds and their releases. |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null |
Entry shape
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "ledger_entry" | |
typerequired | "debit" | "credit" | "hold" | "release" | `debit` is spend and `credit` a top-up. `hold` is credit set aside for a payment completion fee when the payment is created, and `release` returns that hold to the wallet; neither is spend. A settled hold is charged by a `debit` on `payment.completion` and its hold entry stays listed. Other reservations, such as phone-rental renewals, appear only as the `debit` they settle into. |
source_typerequired | "usage" | "credit_topup" | "payment_fee_hold" | `usage` (a usage record), `credit_topup` (a top-up), or `payment_fee_hold` (a payment completion-fee reservation, for `hold` and `release` entries). |
source_idrequired | string | The usage record, top-up, or reservation id. A hold and its release share the reservation id; their entry ids differ. |
meter_idrequired | string | null | |
amount_brlrequired | string | |
uncollected_brlrequired | string | null | |
currencyrequired | "brl" | |
environmentrequired | "sandbox" | "production" | null | |
recorded_atrequired | string<ISO-8601> | When the debit or credit was recorded, the hold was taken, or the hold was released. pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
trace_idrequired | string | null | Trace of the usage record or of the hold; null on top-ups. A release carries the trace of its hold. |
payment_feerequired | object | null | The payment a payment-service fee entry belongs to: set on its hold, its release and its `payment.initiation` and `payment.completion` debits; null on every other entry. |
Phone management coverage
Lists cursor-paginated management coverage for numbers imported from your own Salvy account, in the API key's exact project and environment. Coverage is plan while your Standard or Growth plan covers management at no fee, including the whole UTC month in which the plan ends; covered_until is then the 1st after the covered months, when the first fee is due. It is prepaid once one full monthly phone.management.month fee was charged for the current UTC month, with covered_until the next 1st, and none when neither applies, for example while the month is not charged yet, while management is suspended, or after the number was disabled for non-payment at 12:00 UTC on the month’s last UTC day. Sends from a none number fail with phone_service_suspended, and a disabled month reads none until it ends.
next_charge_at and next_charge_brl are the next scheduled charge and one full fee, never prorated. In production they are null when nothing is scheduled: management is suspended, or the number was not in service at the end of the previous month (including a number disabled this month) and your balance is below one full fee. In sandbox, management fees debit nothing: next_charge_brl reads 0.0000 and a sandbox number’s next charge never waits for the balance. summary counts only scheduled charges: retained_count, their monthly_total_brl (0.0000 in sandbox) and the earliest next_charge_at. This read never imports, enrolls, reconnects, or changes a phone. Charged coverage stays in billing history after a management exit.
current_month_payment_status is paid or unpaid for the current enrollment's funded UTC month, using durable unpaid-month evidence, and not_charged without a funded fee. Charged prepaid coverage alone does not prove payment. service_state distinguishes serving, disabled_unpaid_month_end, funding_required and not_serving; provider eligibility, enrollment fences and structural suspension affect service separately from payment. This is not a general send-eligibility verdict.
disable_at is the free-plan month-end deadline for live, unfenced, unended charged coverage whose month stays unpaid; paid plans have no deadline. It remains visible during the release window and is null from the 18:00 UTC cutoff. Provider eligibility and structural suspension do not remove billing disable exposure. Sandbox funded zero fees read paid, otherwise not_charged, with no unpaid state, deadline or unpaid-disable service state. summary.next_charge_brl totals only fees at summary.next_charge_at, or null without a scheduled charge; monthly_total_brl remains the total across all scheduled instants.
Query
| Field | Type | Notes |
|---|---|---|
limitrequired | integer | Maximum number of items to return. Defaults to 20; maximum 100. range 1..100 |
starting_after | string | Opaque cursor from the previous response next_cursor. |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null | |
summaryrequired | object |
Phone renewal decisions (deprecated)
Deprecated. Read the renewal field of GET /v1/phone-numbers and GET /v1/phone-numbers/{id} instead: it reports each rented number's current month (the next charge on the 1st, whether the month is unpaid, and on the free plan when the number is released). See Phone numbers. These two routes keep answering, and are marked deprecated in /openapi.json.
The list returns the renewal cycles recorded by the retired prepaid renewal design, cursor paginated, for the API key's exact project and environment. No new cycle is recorded, so a number rented or renewed under the current policy has none. A cycle's status and actions describe that recorded cycle, not the current month: a terminal cancelled cycle records an operational lifecycle closure, not a non-payment release, and a month charged on its 1st may show as cancelled. A query that fails validation returns 400 invalid_query. Provider details, reservation data, notification recipients, and raw evidence are never returned. This read remains available when production credit is exhausted.
Query
| Field | Type | Notes |
|---|---|---|
limitrequired | integer | Maximum number of items to return. Defaults to 20; maximum 100. range 1..100 |
starting_after | string | Opaque cursor from the previous response next_cursor. |
status | "scheduled" | "funding_required" | "funded" | "renewed" | "release_requested" | "released" | "cancelled" | Filter renewal cycles by durable billing status. |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null |
Retrieves one recorded cycle in the same scope. A missing or cross-scope cycle returns phone_renewal_not_found. The optional display identifier is the business phone resource when it is still retained; it is not a notification contact.
Nullable next_renewal_at, release_cutoff_at, grace_selected_at, and grace_ends_at preserve captured provider timing and retained grace. Later invalidation does not erase these historical dates. renewal_warning_48h_at and renewal_warning_24h_at are always null: those warnings are retired. A retained renewed cycle can still have wallet debt.
Response
| Field | Type | Notes |
|---|---|---|
idrequired | string | |
objectrequired | "phone_renewal" | |
statusrequired | "scheduled" | "funding_required" | "funded" | "renewed" | "release_requested" | "released" | "cancelled" | |
actionable_staterequired | "upcoming" | "at_risk" | "funded" | "renewed" | "release_pending" | "released" | "cancelled" | |
recommended_actionrequired | "none" | "add_credit_or_enable_auto_topup" | "monitor_release" | |
phone_number_idrequired | string | |
display_namerequired | string | null | |
phonerequired | string | null | |
period_startrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
period_endrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |
amount_brlrequired | string | |
currencyrequired | "brl" | |
upcoming_notice_atrequired | string<ISO-8601> | null | |
funding_scheduled_atrequired | string<ISO-8601> | null | |
funding_attempted_atrequired | string<ISO-8601> | null | |
next_funding_attempt_atrequired | string<ISO-8601> | null | |
funded_atrequired | string<ISO-8601> | null | |
next_renewal_atrequired | string<ISO-8601> | null | |
renewal_warning_48h_atrequired | string<ISO-8601> | null | |
renewal_warning_24h_atrequired | string<ISO-8601> | null | |
grace_selected_atrequired | string<ISO-8601> | null | |
grace_ends_atrequired | string<ISO-8601> | null | |
release_cutoff_atrequired | string<ISO-8601> | null | |
release_requested_atrequired | string<ISO-8601> | null | |
renewed_atrequired | string<ISO-8601> | null | |
released_atrequired | string<ISO-8601> | null | |
cancelled_atrequired | string<ISO-8601> | null | |
terminal_atrequired | string<ISO-8601> | null |
Dashboard-only billing actions
Custom-amount top-ups, invoice builds, and spend-limit updates are dashboard control-plane workflows, not public customer API endpoints. They are intentionally excluded from /openapi.json.
Invoices
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "list" | |
datarequired | object[] | |
has_morerequired | boolean | |
next_cursorrequired | string | null |
Response
| Field | Type | Notes |
|---|---|---|
objectrequired | "invoice_download" | |
invoice_idrequired | string | |
urlrequired | string | |
expires_atrequired | string<ISO-8601> | pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$ |