Skip to content
Hardcount
Run it locally
Pre-1.0 · one maintainer · Stripe and cards only · no SDKs (client libraries) yet · no production users yet. Docs describe v0.9.1 (29 Oct 2026) · What’s new →

Get the customer's billing profile

GET
/v1/customers/{id}/billing-profile
curl --request GET \
--url http://localhost:8080/v1/customers/example/billing-profile \
--header 'Authorization: Bearer <token>'
id
required
string

The billing profile.

Media typeapplication/json
object
legal_name
string
phone

7 to 20 characters of digits, spaces, +, -, (, ).

string
address_line1
string
address_line2
string
city
string
state
string
postal_code
string
country

ISO 3166 alpha-2 code, such as US or IN.

string
currency

ISO 4217 code, such as USD. When set, invoices for this customer use it instead of the plan currency.

string
tax_status
required

Defaults to standard.

string
Allowed values: standard exempt reverse_charge
tax_exempt_reason

Required when tax_status is exempt.

string
tax_id
required

Buyer tax ID. Required when tax_status is reverse_charge.

string
tax_id_type
required

Tax ID kind, stored as its Stripe code (for example eu_vat, in_gst).

string
customer_id
required
string
tenant_id
string
profile_status
required

Set by the server. ready when legal name, address line 1, city and country are all set.

string
Allowed values: incomplete ready
created_at
required
string format: date-time
updated_at
required
string format: date-time

Example

{
"tax_status": "standard",
"profile_status": "incomplete"
}

The customer has no billing profile yet, or the customer does not exist. Both return billing profile not found.

Media typeapplication/json
object
error
object
type

One of invalid_request_error, authentication_error, rate_limit_error or api_error. Every error the API answers has this shape, including an unknown path (404, code route_not_found) and a method the path does not take (405, code method_not_allowed, with an Allow header). The few exceptions are listed in docs/api-surface.md.

string
code
string
message
string
request_id
string
param

The request field the error is about. Sent only when the error names one. A request body may hold only the fields its operation lists, spelled and cased as listed: any other field, or one the server sets (such as id), is refused with 422 and param naming it. An operation with no request body lists no fields: send no body, {} or null. The Stripe and Postmark webhooks and the LiteLLM callback take their sender’s body as it comes.

string

Example

{
"error": {
"type": "invalid_request_error"
}
}