Skip to content

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.

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.

GET /api/catalog/v1/items/{publicCode}/definition

For 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"
}
}
FieldUse it for
typicalDurationMinutesDefault slot length when you show or book a service. null for per-night, per-month and fee-type items.
requiresAppointmentFlagfalse means walk-in, self-serve, or a fee/application rather than a visit — do not force a time picker.
requiresVeterinarianFlag, requiresGroomerFlag, requiresTrainerFlagWho must perform it. Surface these when a seller lists a service.
complexityTierCodeBASIC, STANDARD, ADVANCED, SPECIALIST or EMERGENCY. Emergency items are also requiresAppointmentFlag: false.
appliesToSpeciesCsvComma-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.
applicableSpecialtyCodesCsvThe professional specialty codes that typically offer the service. A hint for matching services to a provider profile’s declared specialties — not an entitlement.
isCustomCommissionFlagThe service is made to order (portrait commission, custom enclosure). Expect a brief rather than a slot.

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 animalCategory branch
Dogs and catsSERVICES_AND_PROFESSIONAL / VETERINARY_SERVICES / … (children by procedure: wellness exams, vaccinations, dental, imaging, laboratory, emergency, surgery, specialty referral)
Birds, reptiles, rabbits and small mammals, fishSERVICES_AND_PROFESSIONAL / EXOTIC_VETERINARY_SERVICES
HorsesEQUINE_SPECIFIC / EQUINE_SERVICES / EQUINE_VETERINARY
Cattle, sheep, goats, pigs, camelids, poultryLIVESTOCK_AND_FARM / FARM_SERVICES / LARGE_ANIMAL_VETERINARY

Browse a branch with its slug:

GET /api/catalog/v1/categories/{slug}/items?take=50

The listing includes add-on items filed in that category; drop rows with isSearchableFlag: false.

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.

ScopeCategoriesGranted automatically when
VETERINARY_SERVICESVETERINARY_SERVICES and its eight children, EXOTIC_VETERINARY_SERVICES, EQUINE_VETERINARY, LARGE_ANIMAL_VETERINARYthe profile’s veterinary licence is verified
RESCUE_ORGANIZATIONRESCUE_AND_ADOPTION and its children except COMMUNITY_CLINICSthe 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/mine

Each 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-authorizations
Content-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.

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.