Platform prices API
Base path through the gateway: /api/price/v1. No bearer is needed. Amounts are minor units in the
point’s currency, at its ISO 4217 exponent: cents for USD and CAD, none for JPY, thousandths for KWD
and IQD. Scale by ISO 4217, not by Intl’s CLDR digits, which differ for IQD, MGA and a few others.
GET /platform-prices?keys=k1,k2&country=CC
Section titled “GET /platform-prices?keys=k1,k2&country=CC”Returns the price points of the requested subject keys for a country. Each item reports the level that answered:
| Level | Meaning |
|---|---|
COUNTRY | A price list scoped to that country (or one of its subdivisions) |
REGION | A market zone that contains the country |
PLATFORM | The unscoped platform list — the fall-through for every other country |
Only the best level’s points are returned for a key — never a mix — and a country-scoped list never
answers another country. Omit country to read the platform points only.
Plan and add-on prices are in USD for every country. Since 2026-09-24 a plan: or feature: key is
answered only by United Pet Club’s own price lists and only with USD points, so currencyCode is always
USD for these keys. A country may still have a list of its own (the United States does), but only in USD.
Canada’s own CAD lists were retired on 2026-09-24: a request with country=CA is answered at level
PLATFORM, as in the example below. Do not convert these prices yourself and present the result as the
price; if you show a local-currency figure, label it as an estimate.
Subject keys: plan:<slug> (first unit), plan:<slug>:unit (each additional unit) and
feature:<FEATURE_CODE> for add-ons.
The Litter Pass (since 2026-09-25). feature:LITTER_PASSES is a UNIT_PRICE of 2900, unitsPerPack 1 — one
Litter Pass. feature:KENNEL_LITTERS and feature:LITTER_REGISTRATIONS answer with empty points. From 2026-09-25
to 2026-10-12 the Pet Pro plans, renamed Breeder Pro 2 / 6 / 15 / 50, answered plan:petpro-* with one
ANNUALLY point each, and feature:CONTRACTS sold one pack of 10 at 3000; both changed with the plan restructure
below.
Plan restructure (2026-10-12)
Section titled “Plan restructure (2026-10-12)”The Family, Breeder Pro and Rescue plans were retired. Their keys — plan:family-free, plan:family-essential,
plan:family-plus, plan:family-deluxe, plan:petpro-essential, plan:petpro-plus, plan:petpro-deluxe,
plan:petpro-max, plan:rescue-free, plan:rescue-plus — answer with an empty points array, and so does
feature:APPOINTMENT_SCHEDULING. Two feature keys changed:
| Key | Points |
|---|---|
feature:CONTRACTS | Three UNIT_PRICE packs: unitsPerPack 10, 20 and 50 at 4000, 7000 and 15000 USD minor units, each with expiresAfterMonths 24 (codes UP-FEAT-CTRP10-UN, UP-FEAT-CTRP20-UN, UP-FEAT-CTRP50-UN; …-US on the US list). The former pack of 10 at 3000 is no longer returned |
feature:AUDIENCE_PRO | New. Audience Insights Pro: one SUBSCRIPTION_RECURRING point, recurrenceIntervalCode ANNUALLY, 6000 USD minor units (UP-FEAT-AUDPRO-YR, or -US). There is no monthly point |
curl -s "https://www.unitedpetclub.com/api/price/v1/platform-prices?keys=feature:CONTRACTS,feature:AUDIENCE_PRO&country=US"{ "data": { "countryCode": "US", "items": [ { "subjectKey": "feature:CONTRACTS", "level": "COUNTRY", "marketCode": null, "points": [ { "code": "UP-FEAT-CTRP10-UN-US", "kind": "UNIT_PRICE", "baseAmountMinorUnits": 4000, "currencyCode": "USD", "recurrenceIntervalCode": null, "unitsPerPack": 10, "expiresAfterMonths": 24 }, { "code": "UP-FEAT-CTRP20-UN-US", "kind": "UNIT_PRICE", "baseAmountMinorUnits": 7000, "currencyCode": "USD", "recurrenceIntervalCode": null, "unitsPerPack": 20, "expiresAfterMonths": 24 }, { "code": "UP-FEAT-CTRP50-UN-US", "kind": "UNIT_PRICE", "baseAmountMinorUnits": 15000, "currencyCode": "USD", "recurrenceIntervalCode": null, "unitsPerPack": 50, "expiresAfterMonths": 24 } ] }, { "subjectKey": "feature:AUDIENCE_PRO", "level": "COUNTRY", "marketCode": null, "points": [ { "code": "UP-FEAT-AUDPRO-YR-US", "kind": "SUBSCRIPTION_RECURRING", "baseAmountMinorUnits": 6000, "currencyCode": "USD", "recurrenceIntervalCode": "ANNUALLY" } ] } ] }, "resultCode": "Price_PricePlatform_GT_Resource_SU"}The plan catalogue changed the same way: GET /api/plan/v1/plans lists only plans on sale (status active for new
sales), so the retired plans are no longer listed, whatever status you pass. A retired plan is still readable by its
code (GET /api/plan/v1/plans/{publicCode}), so a stored reference keeps resolving; it is never recommended.
Example
Section titled “Example”curl -s "https://www.unitedpetclub.com/api/price/v1/platform-prices?keys=plan:services-pro,plan:services-pro:unit,feature:MESSAGES&country=CA"{ "data": { "countryCode": "CA", "items": [ { "subjectKey": "plan:services-pro", "level": "PLATFORM", "marketCode": null, "points": [ { "pricePointId": "fcadae7a-…", "code": "UP-SVCPRO-MO", "kind": "SUBSCRIPTION_RECURRING", "baseAmountMinorUnits": 19900, "currencyCode": "USD", "recurrenceIntervalCode": "MONTHLY", "priceListCode": "UPC-PLATFORM-PLANS", "displayName": "Pro — first unit, monthly" }, { "code": "UP-SVCPRO-YR", "baseAmountMinorUnits": 199000, "currencyCode": "USD", "recurrenceIntervalCode": "ANNUALLY" } ] }, { "subjectKey": "plan:services-pro:unit", "level": "PLATFORM", "marketCode": null, "points": [ { "code": "UP-SVCPRO-UNIT-MO", "baseAmountMinorUnits": 11900, "currencyCode": "USD", "recurrenceIntervalCode": "MONTHLY" } ] }, { "subjectKey": "feature:MESSAGES", "level": "PLATFORM", "marketCode": null, "points": [ { "code": "UP-FEAT-TEXTS100-UN", "kind": "UNIT_PRICE", "baseAmountMinorUnits": 1000, "currencyCode": "USD", "recurrenceIntervalCode": null, "unitsPerPack": 100, "expiresAfterMonths": 6 }, { "code": "UP-FEAT-TEXTS1000-UN", "kind": "UNIT_PRICE", "baseAmountMinorUnits": 9000, "currencyCode": "USD", "recurrenceIntervalCode": null, "unitsPerPack": 1000, "expiresAfterMonths": 12 } ] } ] }, "resultCode": "Price_PricePlatform_GT_Resource_SU"}Points are the same SellablePricePointDto shape as pricepoints/by-subject-key (recurrenceIntervalCode MONTHLY / ANNUALLY for recurring points, null for one-time packs; kind SUBSCRIPTION_RECURRING or UNIT_PRICE). unitsPerPack is present on credit-pack points (texts, campaign emails, contracts, Litter Passes): one purchased
pack mints that many units. A feature can sell several packs (texts: 100 and 1,000; contracts: 10, 20 and 50). expiresAfterMonths is present when a pack’s units expire that many months after purchase:
since 2026-09-30 text credits sell as 100 for US$10 lasting 6 months and 1,000 for US$90 lasting 12 months (the former
500-credit pack is withdrawn and no longer returned); a point without it never expires. A key with no point at any level is returned with an empty points array.
The read is cached at the gateway; a price change is visible within minutes. The response carries no buyer-specific data — Pro’s quantity (locations + vehicles) is computed at checkout, not here.