Developer docs v0.1.0

Prices

Recurring amounts attached to products.

GET /v1/prices

List prices

Cursor-paginated (limit, starting_after).

Authentication
Merchant API key
Effect
Read-only.

Query parameters

NameTypeRequiredDescription
limitintegernoPage size (1–100). · ≥ 1, ≤ 100, default 20
starting_afterstringnoObject ID; return objects after it (ascending ID order). · 26 chars
productstringnoFilter by product ID. · 26 chars
activebooleannoFilter by true/false.

Responses

StatusMeaningBody / error codes
200Success.object
400Invalid filter.invalid_query_param
401Missing or invalid API key.authentication_error
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "list",
  "url": "string",
  "has_more": false,
  "data": [
    {
      "object": "price",
      "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
      "merchant_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
      "product_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
      "active": false,
      "amount": 1,
      "currency": "RON",
      "recurring": {
        "interval": "day",
        "interval_count": 1
      },
      "metadata": {},
      "created_at": "2026-10-25T18:00:00.000Z"
    }
  ]
}

POST /v1/prices

Create a price

Amount, currency and interval are immutable; create a new price and deactivate the old one to change them.

Authentication
Merchant API key
Effect
Creates a price.

Headers

NameTypeRequiredDescription
Idempotency-KeystringnoMakes retries safe: same key + body replays the stored response (idempotency-replayed: true); a different body returns 409 idempotency_key_in_use. · ≤ 96 chars

Request body

FieldTypeRequiredDescription
product_idstringyesULID · 26 chars
amountintegeryesMinor units. · > 0
currency"RON" | "EUR" | "USD"yesCurrency. Case-insensitive on input, stored uppercase.
recurringobjectyes
recurring.interval"day" | "week" | "month" | "year"yes
recurring.interval_countintegernoe.g. 3 + month = quarterly. · ≥ 1, default 1
activebooleannodefault true
metadataobjectnoFree-form key/value data. Each value ≤16 KiB of JSON, ≤8 nesting levels, ≤100 properties/elements.
Example request
{
  "product_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "amount": 1,
  "currency": "RON",
  "recurring": {
    "interval": "day",
    "interval_count": 1
  },
  "active": true,
  "metadata": {}
}

Responses

StatusMeaningBody / error codes
201Price created.Price
400Invalid body.validation_failed invalid_json
401Missing or invalid API key.authentication_error
404Not found, or not yours.resource_missing
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "price",
  "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "merchant_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "product_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "active": false,
  "amount": 1,
  "currency": "RON",
  "recurring": {
    "interval": "day",
    "interval_count": 1
  },
  "metadata": {},
  "created_at": "2026-10-25T18:00:00.000Z"
}

GET /v1/prices/:id

Retrieve a price

Authentication
Merchant API key
Effect
Read-only.

Path parameters

NameTypeRequiredDescription
idstringyesObject ID (ULID). · 26 chars

Responses

StatusMeaningBody / error codes
200Success.Price
401Missing or invalid API key.authentication_error
404Not found, or not yours.resource_missing
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "price",
  "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "merchant_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "product_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "active": false,
  "amount": 1,
  "currency": "RON",
  "recurring": {
    "interval": "day",
    "interval_count": 1
  },
  "metadata": {},
  "created_at": "2026-10-25T18:00:00.000Z"
}

POST /v1/prices/:id

Update a price

Only active and metadata can change.

Authentication
Merchant API key
Effect
Updates active/metadata.

Path parameters

NameTypeRequiredDescription
idstringyesObject ID (ULID). · 26 chars

Headers

NameTypeRequiredDescription
Idempotency-KeystringnoMakes retries safe: same key + body replays the stored response (idempotency-replayed: true); a different body returns 409 idempotency_key_in_use. · ≤ 96 chars

Request body

FieldTypeRequiredDescription
activebooleanno
metadataobjectnoFree-form key/value data. Each value ≤16 KiB of JSON, ≤8 nesting levels, ≤100 properties/elements.
Example request
{
  "active": false,
  "metadata": {}
}

Responses

StatusMeaningBody / error codes
200Success.Price
400Invalid body or no fields to update.validation_failed invalid_json empty_update
401Missing or invalid API key.authentication_error
404Not found, or not yours.resource_missing
429Rate limited; honor retry-after.rate_limit_exceeded too_many_auth_failures
500Server error.api_error
Example response
{
  "object": "price",
  "id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "merchant_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "product_id": "01JB9XK3M2R7TQ8N4V6Y0ZPA1C",
  "active": false,
  "amount": 1,
  "currency": "RON",
  "recurring": {
    "interval": "day",
    "interval_count": 1
  },
  "metadata": {},
  "created_at": "2026-10-25T18:00:00.000Z"
}