Box’a’Fox

Requests and responses

Envelopes, pagination, filters, units, idempotency and rate limits.

The base URL is https://api.boxafox.com. Requests and responses are JSON with snake_case fields.

Envelopes

A single object:

{ "data": { "id": "…" }, "message": "Proxy user created." }

A list:

{ "data": [], "message": "OK", "page": 1, "per_page": 25, "total_count": 137 }
  • A create answers 201 with the full object.
  • A delete answers 200 with { "data": { "id": "…", "deleted": true } }.
  • 204 is never used: every answer has a body.
  • Every response carries an X-Request-Id header (req_…). Include it when you contact support.

Errors have their own shape: see Errors.

Pagination and sorting

ParameterValuesDefault
page1 or more1
per_page1–10025
sort_byA field name, or the name with _desccreated_at_desc

total_count is exact. Each list endpoint names the fields it can sort by.

Filters

Filters are query parameters named after the field:

FormMeaningExample
<field>=Exact matchstatus=active
min_<field>=, max_<field>=Range, for numbers and datesmin_created_at=2026-10-01T00:00:00Z
like_<field>=Contains, case-insensitive; % is a wildcardlike_username=scraper
not_<field>=Not equalnot_status=disabled
metadata.<key>=Match a metadata valuemetadata.project=shop
metadata.exists_<key>=1The metadata key is setmetadata.exists_project=1

A parameter the endpoint does not know is refused with 400 validation_error, so a typo never silently returns everything.

Units and formats

ThingFormat
MoneyWhole cents, with currency: "EUR".
DataWhole bytes. 1 GB is 1,073,741,824 bytes.
TimeRFC 3339 in UTC, for example 2026-10-05T14:03:00Z. Dates alone are YYYY-MM-DD.
IdsUUIDs. Proxy users can also be addressed by username, orders by number (ORD-2026-000123).
CountriesISO 3166-1 alpha-2 in lowercase (de).
EnumsLowercase snake_case strings.

Idempotency

POST /v1/checkout needs an Idempotency-Key header (1–255 characters); other POST requests accept one. Use a new random value for each purchase and repeat the same value when you retry.

  • The same key with the same body within 24 hours returns the first response again, without buying twice.
  • The same key with a different body answers 409 idempotency_conflict.
  • A repeat while the first request is still running answers 409 idempotency_in_flight with Retry-After: 2.

Rate limits

The public API allows 20 requests per 2 seconds per account. Every response says where you stand:

HeaderMeaning
X-RateLimit-LimitRequests allowed in the window.
X-RateLimit-RemainingRequests left in the window.
X-RateLimit-ResetWhen the window resets, in Unix seconds.

Over the limit the API answers 429 rate_limited with a Retry-After header. A call to a list endpoint counts as one request whatever its count.

On this page