Docs

POST /billing/plan

Console: choose Free on the plan step. Paid plans go through POST /billing/checkout. Idempotent; owner only.

Parameters

  • Idempotency-Key header · string · optional — Makes this call safe to retry. Send the same key with the same body and the original response is replayed instead of the work happening twice. Keys are 1-256 characters and are remembered for 7 days. While the first attempt is still running, a second call with that key returns 409 idempotency_in_flight (Resend calls this concurrent_idempotent_requests); the same key with a different body returns 409 idempotency_payload_mismatch (Resend: invalid_idempotent_request). Resend-Idempotency-Key is accepted as the same header.
  • Resend-Idempotency-Key header · string · optional — Alias of Idempotency-Key. Idempotency-Key wins if both are sent.

Request body

FieldTypeRequiredNotes
tierstringyes

Responses

  • 201 — Success
  • 400 — Validation error
  • 401 — Missing API key
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 429 — Rate limited
  • 500 — Internal server error

Response headers

  • ratelimit-limit — Messages this API key may spend in one 60-second window.
  • ratelimit-remaining — Messages left in the current window.
  • ratelimit-reset — Seconds until the current window resets and the budget refills.

201 body

FieldTypeRequiredNotes
billing_configuredbooleanyes
billing_term"month" | "year" | nullyes
entitlementsobjectyes
entitlements.included_emails_per_monthintegeryes
entitlements.max_domainsinteger | nullyes
entitlements.max_seatsintegeryes
entitlements.overage_minor_per_1000_emailsinteger | nullyes
entitlements.retention_daysintegeryes
entitlements.tier"free" | "starter" | "pro" | "scale"yes
needs_plan_selectionbooleanyes
plan_status"none" | "trialing" | "active" | "past_due" | "canceled"yes
plansarray<object>yes
plans[].featuredbooleanyes
plans[].included_emails_per_monthintegeryes
plans[].max_domainsinteger | nullyes
plans[].max_seatsintegeryes
plans[].namestringyes
plans[].pricesobjectyes
plans[].retention_daysintegeryes
plans[].tier"starter" | "pro" | "scale"yes
plans[].volume_rungsarray<object>yes
purchasablearray<object>yes
purchasable[].included_emails_per_monthintegeryes
purchasable[].monthly_price_minorintegeryes
purchasable[].tier"starter" | "pro" | "scale"yes
subscriptionobject | nullyes
terms_on_salearray<"month" | "year">yes
tier"free" | "starter" | "pro" | "scale"yes
viewerobjectyes
viewer.can_purchasebooleanyes
viewer.role"owner" | "admin" | "viewer" | nullyes

Errors

Codes in the catalogue that answer with one of this operation’s error statuses. Every one of them carries a fix.