Platform services
Services on United Pet Club are defined once by the platform and offered many times by
sellers. “Full groom”, “Wellness exam” or “Pet taxi (local)” is a single catalog item of kind
SERVICE with ownerScopeCode: "PLATFORM"; every grooming salon, clinic or driver attaches
their own Marketplace offer to it. When you build a service page you read the platform item
for the definition and the sellers’ offers for prices and availability.
Since 2026-09-18 there are 354 platform service items: 330 that a customer books and 24
add-ons that only exist to carry the price of an option (a large-pet surcharge, teeth
brushing, a travel crate). Add-ons have isSearchableFlag: false — filter them out of
listings and never show them as standalone services.
Reading a service
Section titled “Reading a service”GET /api/catalog/v1/items/{publicCode}Platform service codes start with UPC-CI-SV. The response is the ordinary item shape:
{ "publicCode": "UPC-CI-SVGRM001", "kindCode": "SERVICE", "statusCode": "PUBLISHED", "ownerScopeCode": "PLATFORM", "resalePolicyCode": "OPEN", "isSearchableFlag": true, "resolvedLocaleCode": "en-US", "locale": { "name": "Full groom", "shortDescription": "Bath, blow-dry, haircut or breed trim, nail trim, ear cleaning and finish.", "keywords": "dog grooming,full groom,dog haircut,groomer near me", "seoCanonicalUrlSlug": "full-groom" }, "categories": [{ "categoryCode": "GROOMING_SERVICES", "isPrimary": true }]}resalePolicyCode: "OPEN" is what makes the item offerable by any seller. Service names are
available in all 72 platform locales (availableLocaleCodes lists them) — ?locale=fr-CA on the
item above returns "name": "Coupe des griffes" with resolvedLocaleCode: "fr-CA". The
translated rows are machine-authored and carry isTranslationCompleteFlag: false until a reviewer
signs them off; shortDescription, keywords and the SEO text are en-US in every locale, and
seoCanonicalUrlSlug is the same in every locale because the store URL is locale-independent.
Request any locale and resolvedLocaleCode tells you which one you actually got.
The definition
Section titled “The definition”GET /api/catalog/v1/items/{publicCode}/definitionFor a SERVICE item the service section is populated:
{ "kindCode": "SERVICE", "isAuthored": true, "service": { "complexityTierCode": "STANDARD", "typicalDurationMinutes": 120, "requiresAppointmentFlag": true, "requiresVeterinarianFlag": false, "requiresGroomerFlag": true, "requiresTrainerFlag": false, "appliesToSpeciesCsv": "DOG", "isCustomCommissionFlag": false, "applicableSpecialtyCodesCsv": "GROOMING_GENERAL,GROOMING_BREED_STANDARD" }}| Field | Use it for |
|---|---|
typicalDurationMinutes | Default slot length when you show or book a service. null for per-night, per-month and fee-type items. |
requiresAppointmentFlag | false means walk-in, self-serve, or a fee/application rather than a visit — do not force a time picker. |
requiresVeterinarianFlag, requiresGroomerFlag, requiresTrainerFlag | Who must perform it. Surface these when a seller lists a service. |
complexityTierCode | BASIC, STANDARD, ADVANCED, SPECIALIST or EMERGENCY. Emergency items are also requiresAppointmentFlag: false. |
appliesToSpeciesCsv | Comma-separated species the service is for. Companion services use DOG, CAT; others use HORSE, RABBIT, BIRD, REPTILE, SMALL_MAMMAL, FISH, LIVESTOCK, POULTRY. Filter services by the customer’s animal with this, not by category. |
applicableSpecialtyCodesCsv | The professional specialty codes that typically offer the service. A hint for matching services to a provider profile’s declared specialties — not an entitlement. |
isCustomCommissionFlag | The service is made to order (portrait commission, custom enclosure). Expect a brief rather than a slot. |
Species-scoped veterinary branches
Section titled “Species-scoped veterinary branches”Veterinary services are split by species group so that search intent and provider type line up. Do not assume every veterinary item sits under one category:
| Customer’s animal | Category branch |
|---|---|
| Dogs and cats | SERVICES_AND_PROFESSIONAL / VETERINARY_SERVICES / … (children by procedure: wellness exams, vaccinations, dental, imaging, laboratory, emergency, surgery, specialty referral) |
| Birds, reptiles, rabbits and small mammals, fish | SERVICES_AND_PROFESSIONAL / EXOTIC_VETERINARY_SERVICES |
| Horses | EQUINE_SPECIFIC / EQUINE_SERVICES / EQUINE_VETERINARY |
| Cattle, sheep, goats, pigs, camelids, poultry | LIVESTOCK_AND_FARM / FARM_SERVICES / LARGE_ANIMAL_VETERINARY |
Browse a branch with its slug:
GET /api/catalog/v1/categories/{slug}/items?take=50The listing includes add-on items filed in that category; drop rows with
isSearchableFlag: false.
Options and add-on pricing
Section titled “Options and add-on pricing”A service can expose option groups — the buyer’s choices next to the book button:
GET /api/catalog/v1/items/{publicCode}/option-groups{ "code": "PET_SIZE", "displayLabel": "Pet size", "selectionModeCode": "SINGLE_REQUIRED", "values": [ { "code": "SMALL", "displayLabel": "Small (up to 10 kg / 22 lb)", "isDefault": true }, { "code": "MEDIUM", "displayLabel": "Medium (10–25 kg / 22–55 lb)", "linkedCatalogItemPublicCode": "UPC-CI-SVGEN001" } ]}The platform ships six groups: PET_SIZE (single, required), GROOMING_ADD_ONS,
BOARDING_ADD_ONS, WALK_AND_VISIT_EXTRAS, TRANSPORT_EXTRAS and CREMATION_KEEPSAKES
(all multi-select).
Prices are never on the option. A value with a linkedCatalogItemPublicCode is priced by the
seller’s own offer on that add-on item; a value without one is free. Resolve the price of a
chosen value exactly as you resolve the service itself — same seller, the linked item’s code. If
the seller has not priced an add-on, treat that value as unavailable for that seller rather than
free. Read the Booking & Scheduling guide for turning a chosen service into an
appointment.
Restricted services need a seller authorization
Section titled “Restricted services need a seller authorization”Veterinary services and rescue & adoption services are restricted categories: the
Marketplace refuses an offer in them unless the selling profile holds an active seller
authorization for the category’s scope. This is enforced server-side from the item’s own
categories — omitting catalogCategoryIdLogical from the offer request does not bypass it.
| Scope | Categories | Granted automatically when |
|---|---|---|
VETERINARY_SERVICES | VETERINARY_SERVICES and its eight children, EXOTIC_VETERINARY_SERVICES, EQUINE_VETERINARY, LARGE_ANIMAL_VETERINARY | the profile’s veterinary licence is verified |
RESCUE_ORGANIZATION | RESCUE_AND_ADOPTION and its children except COMMUNITY_CLINICS | the profile is a recognized shelter / rescue |
Everything else in the service catalog — grooming, training, boarding, pet care, transport, community clinics — is open to every seller.
Read the scope catalog (public):
GET /api/marketplace/v1/seller-authorization-scopes{ "data": [ { "code": "VETERINARY_SERVICES", "name": "Veterinary services", "verificationPurposeCode": "SELL_VETERINARY_SERVICES", "requiresDocuments": true, "autoGrantAttestationKinds": ["VETERINARY_LICENSE"], "categories": [ { "catalogCategoryId": "729edf8a-…", "categoryPath": "/SERVICES_AND_PROFESSIONAL/VETERINARY_SERVICES" } ] } ]}A refused offer answers 403 with resultCode Marketplace_Storefront_VL_Category_RJ
(internal error code marketplace.seller_not_authorized_for_category). To find out which scope
the seller still needs, intersect the item’s categories[] with the scope catalog above, then
check the seller’s own grants:
GET /api/marketplace/v1/seller-authorizations/mineEach row carries scopeCode, statusCode (PENDING, ACTIVE, SUSPENDED, REVOKED,
DECLINED, EXPIRED), the region it covers (countryCodeIso2 null = global) and
sourceCode — CERT:<attestation kind> for an automatic grant, ADMIN_GRANT for one a
platform admin made on request, or the scope’s verification purpose for an application.
A seller without an automatic grant applies for the scope:
POST /api/marketplace/v1/seller-authorizationsContent-Type: application/json
{ "scopeCode": "VETERINARY_SERVICES", "countryCodeIso2": "CA", "notes": "Licence #12345, Ontario" }The application is PENDING until a platform administrator approves it; one open application
per scope (a second one answers 409). A seller may also simply ask support — an administrator
can grant a scope directly, without an application, to a profile whose standing they are
satisfied with (a clinic’s organization profile, for example).
When a grant is suspended or revoked — by an administrator, or because the underlying attestation lapsed — the seller’s live listings in that scope are paused and new offers are refused again.
What is not in the catalog
Section titled “What is not in the catalog”The platform catalog carries definitions only. Which sellers offer a service, in which region, at what price and with which booking rules is Marketplace, Price and Scheduling data, read through the sellers’ offers. Sponsorships and donations are not services and are not in this catalog.