Peppula for pet businesses
Peppula Intelligence
Three APIs that turn photos into structured coat and wellness data for your business.
Connect your product catalog to our coat and wellness insights, then recommend grooming, dental, ear, paw, and skin care products directly in your own product experience.
63 wellness observations across coat, skin, dental, eye, ear, nail, and paw. Dedicated endpoints for each area. Track changes over time. Generate wellness reports for bookings and customers. Works on any breed.
How pet businesses use Peppula
What changes in your business when the data behind every dog is structured.
Know what each dog needs
Customer uploads a photo. You see their dog's coat, skin, dental, and eye observations instantly. Right product for the right dog.
Higher trust, higher basket
Customers buy more when they see real observation data behind a product suggestion. Not a sales pitch, actual data about their dog.
Wellness history no one else has
Track every dog over time. See what's improving, what keeps coming back. Your competitors are guessing. You have the data.
Build better products
See which observations are most common per breed. Know which breeds to target. Use real wellness data to develop products that solve real problems.
Know how your products perform by location
Combine wellness data with postal codes. See if dry skin is a winter problem in the north, or if dental issues are more common in certain regions. Geographic insights for your product and marketing teams.
Use only what you need
Dental company? Use dental data. Grooming business? Use coat data. Dedicated endpoints for each area. No noise.
Every breed, right product
A Poodle and a Husky need different products. 178+ breeds with wellness flags so your business knows which.
Your catalogue, our data
Map our wellness data to your product SKUs, or work with us to customize. Your products show up when the data says they're needed.
What you get
The technical capabilities behind those outcomes.
63 wellness observations
Coat, skin, dental, eye, ear, nail, and paw observations detected from photos with severity scoring 1-5.
6 dedicated wellness endpoints
Focused analysis for dental, eye, skin, ear, nail, and paw. Send a close-up, get area-specific results.
Track wellness over time
Send photos monthly. See what's getting better, what's getting worse, and what keeps coming back for every dog.
Connect your product catalogue
Map our 33 tool keys to your SKUs. Our analysis, your products.
Multi-photo assessment
Body photo for full analysis, close-up for verified severity, concern photo for flagged areas.
178+ breeds with ground truth
Every coat type verified against AKC breed standards. Breed wellness flags included for targeted insights.
Coat Intelligence API
Send a photo, or send what you already know as JSON. You get breed, coat type, and 63 wellness observations with severity scoring, matting zones, achievable styles, and care schedules. Connect your product catalogue to show your own tools.
Coat Tracking API
From snapshots to trajectories. Structured wellness data over time for your business.
Push photos over time. We store every assessment per dog, compute severity trends, detect recurring patterns, and correlate with breed wellness flags. You get structured timeline data with dates, severities, change rate, and seasonal context. Your nutritionists, actuaries, and clinicians decide what to do with it.
We provide the data and breed context. Your team applies their domain expertise.
Coat Wellness Report
One call returns a structured wellness report for a dog. Grooming salons attach it to bookings. Pet businesses embed it in their app or email it to customers.
Wellness indicator
Green, yellow, orange, or red for the dog overall.
7 body area sections
Coat, skin, dental, eye, ear, nail, paw. Only areas with findings are returned.
Grooming plan
Recommended tools, achievable styles, safety warnings, and a care schedule.
Breed context
Breed wellness flags with plain-language descriptions.
curl -X POST https://api.peppula.com/v1/report/wellness \
-H "X-API-Key: YOUR_KEY" \
-F "photo=@dog.jpg" \
-F "photo_hotspot=@hotspot.jpg" \
-F "photo_concern=@concern.jpg" \
-F "dog_id=dog_1042"Dedicated wellness endpoints
Close-up photos. Focused analysis. Build products for specific wellness areas.
Dental
/v1/dental-health
7 observations
Dental chews, vet clinics
Eye
/v1/eye-health
6 observations
Eye care products, vet clinics
Skin
/v1/skin-health
17 observations
Medicated shampoo, dermatology
Ear
/v1/ear-health
6 observations
Ear cleaning products
Nail
/v1/nail-health
4 observations
Nail care, grooming tools
Paw
/v1/paw-health
7 observations
Paw balms, winter care
Vertical endpoints also detect related observations from other categories, so these totals overlap and do not add up to the 63 canonical observations.
Each vertical accepts a close-up photo and a breed. Returns only observations relevant to that area. All results are tracked per dog for longitudinal analysis.
Quick start
Base URL: https://api.peppula.com
Interactive docs: /docs
OpenAPI spec: /openapi.json
1. Get an API key
Contact us at info@peppula.com or through the form below. Tell us what you're building and we'll set you up with an API key and sandbox access. Keys look like pk_live_abc123...
2. Make your first call
Upload a dog photo. The API detects the breed, analyzes the coat, and returns what it finds.
curl -X POST https://api.peppula.com/v1/coat-score \
-H "X-API-Key: YOUR_API_KEY" \
-F "photo=@dog.jpg"3. Read the response
The API detected a Golden Retriever with mild matting behind the ears and slight coat dullness.
{
"request_id": "req_abc123",
"processing_time_ms": 8200,
"cache_hit": "none",
"coat_analysis": {
"breed": "golden_retriever",
"breed_display_name": "Golden Retriever",
"breed_confidence": 0.92,
"coat_type": "double",
"coat_type_confidence": "validated",
"size": "large"
},
"conditions": [
{
"condition_id": "matting_mild",
"severity_score": 2,
"severity_label": "mild",
"location": "behind_ears",
"confidence": 0.85,
"reasons_observed": [
"Small tangles visible behind both ears",
"Coat slightly bunched near the ear base"
],
"reasons_criteria": [
"Small tangles that can be teased apart with fingers.",
"Individual knots, not connected to each other.",
"Coat between tangles is loose and brushable."
],
"what_it_means": {
"en": "Small tangles that a groomer can brush out.",
"nl": "Kleine klitten die een trimmer kan uitborstelen.",
"fr": "Petits noeuds qu'un toiletteur peut brosser."
}
},
{
"condition_id": "dull_coat",
"severity_score": 1,
"severity_label": "minimal",
"location": "back",
"confidence": 0.72,
"reasons_observed": [
"Coat lacks usual golden sheen across the back"
],
"reasons_criteria": [
"Barely noticeable dullness, visible only on close inspection."
],
"what_it_means": {
"en": "Very slight dullness. Worth monitoring over your next few checks.",
"nl": "Heel lichte doffe vacht. Houd het in de gaten.",
"fr": "Tres leger ternissement. A surveiller."
}
}
],
"additional_observations": [],
"matting_zones": [
{"zone": "behind_ears", "risk_level": 5, "status": "condition_detected", "brush_frequency": "daily"}
],
"photo_quality": {"coverage": "full_body", "areas_not_visible": "", "quality_warning": false}
}One photo. Breed detected. Two observations found with severity, reasons, and plain-language explanations in three languages.
Your products, recommended by coat intelligence
Map our 33 standardized tool keys to your SKUs. When a Poodle needs a slicker brush, the response returns your slicker brush.
1. We detect
Curly coat, mild matting behind ears
2. We recommend
slicker_brush_medium, detangle_spray, metal_comb_medium
3. You map
slicker_brush_medium โ your SKU PET-SB-442 โ your product page
33 tool keys across 11 categories: brushes, combs, scissors, blades, sprays, shampoos, conditioners, clipper accessories, nail tools, ear tools, deshedding tools. Full list at GET /v1/sku-mapping-keys.
Observation IDs
These are the standardized observation identifiers (the `condition_id` field) the API returns across all 63observations. Use them for filtering, product matching, and UI rendering.
Coat (16)
Groomer handles these โ no vet referral. surface_matting severity is unverified from a body photo; a close-up confirms it.
matting_mildmatting_moderatematting_severe_peltedmatting_earmatting_sanitarymatting_pawovergrown_mildovergrown_moderateovergrown_severecoat_stainingdull_coatexcessive_sheddingundercoat_buildupdebris_contaminationsubstance_contaminationsurface_mattingSkin (13)
Vet referral recommended โ the observation is reported, the cause is not.
skin_rednessskin_dry_flakyhot_spotsalopecia_patchyalopecia_symmetricalskin_thickeningskin_lumps_massesskin_woundscoat_patchycoat_color_changeear_infection_signsinterdigital_inflammationnasodigital_hyperkeratosisVisible parasites (4)
Vet referral recommended.
flea_infestationtick_presenceharvest_miteslice_infestationDental (7)
Vet referral for gingivitis, broken tooth, discolouration, excessive drooling.
dental_tartar_buildupdental_gingivitisdental_misalignmentdental_broken_toothdental_discolorationdental_drooling_excessivedental_issuesEye (5)
All eye observations refer to a vet.
eye_rednesseye_dischargeeye_cloudinesseye_swellingcherry_eyeEar (5)
Vet referral for ear redness and odour; the rest are groomer-handled.
ear_dirtyear_hair_overgrownear_wax_buildupear_rednessear_odor_signsNail (5)
Vet referral for ingrown nails and nail disorder.
nails_overgrownnails_crackednails_discolorednails_ingrownnail_disorderPaw (6)
Vet referral for redness between toes, cuts, foreign objects, swelling.
paw_pad_crackedpaw_pad_drypaw_redness_between_toespaw_pad_cutpaw_foreign_objectpaw_swellingOther (2)
Vet referral recommended.
epiphora_tear_staininganal_gland_issuesVet referral display
When any referral-flagged observation is present, show the observation, its location, and the recommendation to consult a veterinarian. Do not show disease names, urgency labels, or diagnostic phrasing such as โyour dog hasโฆโ.
Add coat intelligence to your product
We work directly with pet businesses to integrate the API. Tell us what you're building.
Or email info@peppula.com directly โ include what you're building and we'll set you up with an API key and sandbox access.
Technical reference
For developers
Authentication, the full endpoint reference, response fields, rate limits, error codes, code examples, and the live OpenAPI spec.
Authentication
Every request requires an X-API-Key header.
X-API-Key: pk_live_your_key_hereKey management
Contact info@peppula.com to rotate, revoke, or check usage on your key.
Two ways to use the API
Option A: Send a photo
The API detects the breed, coat type, and observations from the photo.
curl -X POST https://api.peppula.com/v1/coat-score \
-H "X-API-Key: YOUR_KEY" \
-F "photo=@dog.jpg"- โข Response time: ~2s (cache hit) to ~10s (first analysis)
- โข Cost: Counts toward your photo call quota
- โข When to use: You have a photo and don't know the breed
Option B: Send JSON
You already know the breed and observations. The API returns the same structured response without running AI.
curl -X POST https://api.peppula.com/v1/coat-score/lookup \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"breed": "golden_retriever", "conditions": [...]}'- โข Response time: <1ms
- โข Cost: Counts toward your lookup quota (much cheaper)
- โข When to use: You know the breed from your own system or a previous photo call
GDPR note: Photos are stripped of GPS and metadata before processing. CORS is open (allow_origins: *).
API reference
26 endpoints. Authentication is a single X-API-Key header. Base URL https://api.peppula.com.
Coat Intelligence (12)
Coat Tracking (7)
Coat Wellness Report (1)
Wellness Verticals (6)
Live specification
Interactive reference and OpenAPI spec are available to key holders at https://api.peppula.com/docs and https://api.peppula.com/openapi.json.
Photo endpoints (AI inference)
POST /v1/coat-score accepts multipart/form-data with a single required photo file (JPEG, PNG, or WebP; max 10MB). Optional breed_override skips AI breed detection when you already know the breed.
POST /v1/coat-intelligence returns everything in coat-score plus recommended tools, style options, wellness flags, safety warnings, and a care schedule.
Optional country (2-letter code, e.g. BE, US, UK) and postal_code are accepted for future pricing context.
Lookup endpoints (JSON, no photo)
POST /v1/coat-score/lookup and POST /v1/coat-intelligence/lookup return the same structured responses as their photo counterparts, without running AI. Use them when you already know the breed and observations from your own system or from a previous photo call.
Atomic endpoints
Use these when you only need one type of data:
- โข
POST /v1/health-flagsโ breed wellness predispositions and flags - โข
POST /v1/grooming-kitโ tool recommendations with SKU mapping keys - โข
POST /v1/style-optionsโ achievable grooming styles with blade specs - โข
POST /v1/matting-zonesโ breed-specific matting risk map
Product integration
GET /v1/sku-mapping-keys lists all 33 standardized tool keys. POST /v1/sku-mapping registers your catalogue against our keys using a merge-by-key upsert.
Reference
GET /v1/breeds returns all 178 breeds with coat types, sizes, and wellness flags. GET /v1/breeds/{breed_key} returns a single breed.
Tracking response fields
The API field is velocity, shown as โchange rateโ in our copy. Positive (+0.3) means getting worse, negative (-0.4) means getting better, zero means stable, and the field is omitted when there is not enough data.
Change rate (velocity)
How fast an observation is getting worse or better per month.
Season
Every data point tagged for seasonality filtering.
Dated evidence
Every pattern backed by specific dates and severities.
Breed correlations
โrecurring dull_coat, breed is hypothyroid_proneโ.
{
"dog_id": "dog_1042",
"breed": "golden_retriever",
"assessments": 7,
"signals": [
{
"condition_id": "dull_coat",
"pattern": "recurring",
"velocity": 0.3,
"evidence": [
{ "date": "2026-03-14", "severity_score": 1, "season": "spring" },
{ "date": "2026-06-09", "severity_score": 2, "season": "summer" },
{ "date": "2026-09-02", "severity_score": 2, "season": "autumn" }
],
"breed_correlation": "hypothyroid_prone"
}
]
}{
"dog_id": "dog_1042",
"breed": "golden_retriever",
"wellness_indicator": "yellow",
"sections": [
{
"area": "coat",
"findings": [
{ "condition_id": "matting_mild", "severity_score": 2, "location": "behind_ears" }
]
},
{
"area": "skin",
"findings": [
{ "condition_id": "skin_dry_flaky", "severity_score": 1, "location": "back" }
]
}
],
"breed_context": [
{ "flag": "hypothyroid_prone", "description": "Coat dullness can reflect thyroid function." }
],
"grooming_plan": {
"recommended_tools": ["slicker_brush_medium", "metal_comb_medium"],
"achievable_styles": ["breed_standard_trim"],
"safety_warnings": [],
"care_schedule": "Brush behind the ears every second day; full brush-out weekly."
}
}Product integration examples
Register your catalogue against our 33 standardized tool keys with a merge-by-key upsert. Responses then return your products.
POST /v1/sku-mapping
{
"mappings": [
{
"sku_mapping_key": "slicker_brush_medium",
"product_sku": "FUR-2847",
"product_name": "FURminator Firm Slicker Large",
"price": 14.99,
"currency": "EUR",
"url": "https://your-store.com/furminator-slicker"
}
]
}{
"recommended_tools": [
{
"tool_type": "slicker_brush",
"reason": "Curly coats trap loose hair โ slicker brush prevents matting",
"sku_mapping_key": "slicker_brush_medium",
"product_sku": "FUR-2847",
"url": "https://your-store.com/furminator-slicker"
}
]
}Key concepts
Severity scores (1โ5)
Two types of reasons
Additional observations
The API may return additional_observations โ things the AI detected that aren't in our canonical observation set. These are informational only: no severity score, no pricing impact.
{
"additional_observations": [
{
"observation_id": "rough_texture",
"description": "rough texture on hindquarters",
"location": "hindquarters",
"reasons_observed": ["coat feels coarse compared to breed standard"],
"source": "ai"
}
]
}Use these for display ("Also observed:") but don't build pricing or product logic on them. When an observation appears frequently enough, we add it to the canonical observation set with full severity criteria.
Coat type confidence
Embedding cache
The API caches photo embeddings. Re-uploading the same (or very similar) photo returns cached results instantly.
SKU mapping keys
The sku_mapping_key in tool recommendations is a standardized identifier. You map it to your product catalogue:
Our key: "slicker_brush_medium"
Your product: FURminator Firm Slicker Large (SKU: FUR-2847, EUR 14.99)
Call GET /v1/sku-mapping-keys to see all 33 available keys with descriptions.Rate limits
Default limits for new keys:
Custom limits available for larger integrations. Contact info@peppula.com.
When rate limited, the response includes retry_after_seconds:
{
"error": "rate_limit_exceeded",
"message": "Rate limit: 60 requests/minute. Retry in 12s.",
"retry_after_seconds": 12
}Error responses
All errors follow the same shape:
{
"error": "error_code",
"message": "Human-readable explanation",
"request_id": "req_abc123",
"retry_after_seconds": 12
}Coat types
Data quality
- 178 breeds verified against AKC breed standards
- 63 canonical observation IDs across coat, skin, dental, eye, ear, nail, and paw categories
- 21 grooming styles with blade specs verified against professional grooming education standards and industry references
- 139 blade/tool recommendations with safety audit trail
- 33 SKU mapping keys across 11 product categories
- Trilingual โ observation explanations in English, Dutch, and French
- Deterministic severity criteria โ same score always returns same professional standard explanation
- Coat type validation โ AI's coat type cross-checked against breed ground truth for 178 breeds
Code examples
# Photo analysis
curl -X POST https://api.peppula.com/v1/coat-score \
-H "X-API-Key: pk_live_your_key" \
-F "photo=@dog.jpg"
# JSON lookup (no photo)
curl -X POST https://api.peppula.com/v1/coat-score/lookup \
-H "X-API-Key: pk_live_your_key" \
-H "Content-Type: application/json" \
-d '{"breed": "golden_retriever"}'
# List all breeds
curl https://api.peppula.com/v1/breeds \
-H "X-API-Key: pk_live_your_key"
# Get SKU mapping keys (all 33)
curl https://api.peppula.com/v1/sku-mapping-keys \
-H "X-API-Key: pk_live_your_key"Questions developers ask
Support
Questions about integration, quotas, or enterprise terms? Email info@peppula.com.
Ready to add coat intelligence to your product?
Disclaimer
Peppula does not diagnose conditions. The API detects visual observations and flags them for attention. Clinical diagnosis remains with the veterinarian.
Product catalogue integration covers non-medical products only: grooming tools (brushes, shampoos, clippers), dental care (toothpaste, dental chews), paw care (balms, creams), nail care, ear cleaning solutions, and nutritional supplements, and pet food. The API does not connect to medical products such as prescription drops, medicated treatments, or veterinary pharmaceuticals.