Skip to content

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:

LevelMeaning
COUNTRYA price list scoped to that country (or one of its subdivisions)
REGIONA market zone that contains the country
PLATFORMThe 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.

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:

KeyPoints
feature:CONTRACTSThree 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_PRONew. Audience Insights Pro: one SUBSCRIPTION_RECURRING point, recurrenceIntervalCode ANNUALLY, 6000 USD minor units (UP-FEAT-AUDPRO-YR, or -US). There is no monthly point
Terminal window
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.

Terminal window
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.