PEPPULA

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.

178+ breeds63 observations26 endpoints6 wellness verticalsBuilt in Belgium

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.

MethodEndpointDescription
POST/v1/coat-scorePhoto โ†’ breed, coat type, observations, matting zones
POST/v1/coat-score/lookupJSON (breed + observations) โ†’ same response, no photo
POST/v1/coat-intelligencePhoto โ†’ coat score plus tools, styles, wellness flags, care schedule
POST/v1/coat-intelligence/lookupJSON โ†’ full intelligence, no photo
POST/v1/health-flagsBreed wellness predispositions and flags
POST/v1/grooming-kitTool recommendations with SKU mapping keys
POST/v1/style-optionsAchievable grooming styles with blade specs
POST/v1/matting-zonesBreed-specific matting risk map
GET/v1/sku-mapping-keysList all 33 product mapping keys
POST/v1/sku-mappingRegister your product catalogue mapping (merge-by-key upsert)
GET/v1/breedsAll 178 breeds
GET/v1/breeds/{breed_key}Single breed detail

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.

MethodEndpointDescription
POST/v1/tracking/assessSubmit a photo for a dog, store the result, return diff + patterns
GET/v1/tracking/historyTimeline with stats, change rate, and seasonal context
GET/v1/tracking/signalsRecurring patterns with dated evidence and breed correlations
GET/v1/tracking/dogsList all tracked dogs
GET/v1/tracking/compareDiff between two specific assessment dates
POST/v1/tracking/assess/batchAssess up to 10 dogs in one request
GET/v1/tracking/signals/batchSignals for up to 50 dogs at once

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.

MethodEndpointDescription
POST/v1/report/wellnessCoat Wellness Report โ€” structured assessment by body area, multi-photo
FieldRequiredDescription
photoYesFull body photo
photo_hotspotNoClose-up of a specific area
photo_concernNoClose-up of something the owner flagged
dog_idNoYour identifier โ€” links the report to the dog's timeline
breed_overrideNoSkip breed detection when you already know the breed

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.

POST /v1/report/wellness
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.

POST /v1/coat-score
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.

CoatScoreResponse
{
  "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. 1. We detect

    Curly coat, mild matting behind ears

  2. 2. We recommend

    slicker_brush_medium, detangle_spray, metal_comb_medium

  3. 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_matting

Skin (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_hyperkeratosis

Visible parasites (4)

Vet referral recommended.

flea_infestationtick_presenceharvest_miteslice_infestation

Dental (7)

Vet referral for gingivitis, broken tooth, discolouration, excessive drooling.

dental_tartar_buildupdental_gingivitisdental_misalignmentdental_broken_toothdental_discolorationdental_drooling_excessivedental_issues

Eye (5)

All eye observations refer to a vet.

eye_rednesseye_dischargeeye_cloudinesseye_swellingcherry_eye

Ear (5)

Vet referral for ear redness and odour; the rest are groomer-handled.

ear_dirtyear_hair_overgrownear_wax_buildupear_rednessear_odor_signs

Nail (5)

Vet referral for ingrown nails and nail disorder.

nails_overgrownnails_crackednails_discolorednails_ingrownnail_disorder

Paw (6)

Vet referral for redness between toes, cuts, foreign objects, swelling.

paw_pad_crackedpaw_pad_drypaw_redness_between_toespaw_pad_cutpaw_foreign_objectpaw_swelling

Other (2)

Vet referral recommended.

epiphora_tear_staininganal_gland_issues

Vet 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_here
ErrorCodeMeaning
Missing key401X-API-Key header not provided
Invalid key401Key doesn't exist or is revoked
Not enabled403Your key doesn't include this endpoint
Rate limited429Too many requests โ€” check retry_after_seconds

Key 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โ€.

GET /v1/tracking/signals
{
  "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"
    }
  ]
}
POST /v1/report/wellness โ€” response
{
  "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.

Step 1 โ€” register your product mapping (merge-by-key upsert)
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"
    }
  ]
}
Step 2 โ€” responses now include your products
{
  "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)

ScoreLabelMeaningExample
1minimalBarely noticeableSlight coat dullness
2mildPresent but manageable at homeSmall tangles you can brush out
3moderateNeeds professional groomingClumps that resist a comb
4severeProfessional intervention requiredMatting pulling on skin
5criticalImmediate action, possible skin riskPelted coat fused to skin

Two types of reasons

FieldSourceChanges per photo?Use for
reasons_observedAI (from this specific photo)YesWhat we see on this dog โ€” display to the user
reasons_criteriaProfessional grooming standardsNo โ€” same score = same criteriaWhat this score means โ€” for your internal logic

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

ValueMeaning
validatedBreed is in our 178-breed database, AI's coat type matches breed standard
overriddenAI disagreed with breed standard โ€” we used the standard (more reliable)
unverifiedBreed not in our database โ€” AI's classification used as-is

Embedding cache

The API caches photo embeddings. Re-uploading the same (or very similar) photo returns cached results instantly.

cache_hitMeaningResponse timeAI cost
noneNew photo โ€” full AI inference~10sPer-call pricing
breed_cachedSimilar photo โ€” breed from cache, fresh observations from AI~3sReduced
exactSame photo re-uploaded โ€” full result from cache~1-2s$0

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:

Per minutePer dayPer month
601,0005,000

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

CodeErrorWhen
400photo_requiredNo photo file in the request
400photo_too_largePhoto exceeds 10MB limit
400photo_invalidPhoto file is too small or empty
400unsupported_formatNot JPEG, PNG, or WebP
401missing_api_keyX-API-Key header not provided
401invalid_api_keyKey doesn't exist or is revoked
403endpoint_not_enabledYour key doesn't include this endpoint
422not_a_dogNo dog detected in the photo
429rate_limit_exceededPer-minute rate limit exceeded
429daily_limit_exceededPer-day limit exceeded

All errors follow the same shape:

{
  "error": "error_code",
  "message": "Human-readable explanation",
  "request_id": "req_abc123",
  "retry_after_seconds": 12
}

Coat types

TypeDescriptionBreeds (examples)
smoothShort, flat, close-lyingBeagle, Boxer, Pug, Dalmatian
doubleDense undercoat + longer outer coatGolden Retriever, Husky, GSD, Labrador
wireHarsh, bristly textureSchnauzer, Westie, Airedale, Irish Wolfhound
curlyCurly/wavy, non-sheddingPoodle, Bichon, Doodle, Lagotto
long_silkyLong, fine, flowingShih Tzu, Yorkie, Maltese, Cavalier
long_coarseLong, rough/shaggyOld English Sheepdog, Briard, Tibetan Terrier
cordedNaturally cordedKomondor
hairlessLittle to no coatChinese Crested, Xoloitzcuintli

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.