Partner AI APISandbox pilotGait portal + 3 REST workflows

Gait AI in the portal. Three evidence APIs for integration.

The REST lifecycle covers Dental Screening, Behaviour Observation and experimental Visual Wellness—from private upload to veterinary release and final PDF. Visual Wellness is a whole-body appearance workflow, not Eye AI.

Start quickstart Download OpenAPI
https://us-central1-decennium-global.cloudfunctions.net/partnerApi/v1/partner/visual-wellness
CapabilitiesAuthenticationQuickstartEndpointsLifecycleMedia limitsErrorsClinical boundary

On this page

CapabilitiesAuthenticationQuickstartEndpointsLifecycleMedia limitsErrorsClinical boundary

Capability mounts

Choose the evidence workflow per case

Dental Screening

/dental-screeningdental_photo_screening_v1

Visible oral surfaces using front, left, right, upper and lower views.

Media
1–5 oral images
Limit
10 MB each

Behaviour Observation

/behavior-observationbehavior_observation_v1

Observable body-language evidence combined with partner-provided context.

Media
1 video + up to 5 images
Limit
3–600 sec; video up to 500 MB

Visual Wellness (experimental)

/visual-wellnessvisual_wellness_v1

Experimental review of visible body condition, coat/skin appearance, visible muscle condition, and visible aging markers. This is not Eye AI.

Media
3–15 JPEG, PNG or WebP whole-body images
Limit
10 MB each
Gait AI is the first capability in the unified partner portal. It keeps its proven gait-specific filming, processing and report flow; that processing contract is not currently one of these three REST mounts. Open the partner portal overview.

One tenant, two credential modes

Server integration

Send the shared sandbox key as Authorization: Bearer …. The key resolves partner, tenant and scopes; do not send those identities in case payloads.

Private portal campaign

Invitation workspaces exchange an X-Partner-Portal-Token for enabled capabilities and limits. Keep campaign tokens in the portal flow, not general API clients.

End-to-end

Shared case lifecycle

  1. 1

    Choose a capability

    All three products use the same partner key. Select the capability mount for this case.

    01-environment.sh
    bash
    export PEQABOO_PARTNER_ROOT="https://us-central1-decennium-global.cloudfunctions.net/partnerApi/v1/partner"
    export PEQABOO_CAPABILITY="dental-screening" # or behavior-observation / visual-wellness (experimental)
    export PEQABOO_API_BASE="$PEQABOO_PARTNER_ROOT/$PEQABOO_CAPABILITY"
    export PEQABOO_PARTNER_API_KEY="replace-with-your-sandbox-key"
  2. 2

    Create a consented case

    One case represents one animal and one analysis type. The API returns its actual analysisType.

    02-create-case.sh
    bash
    curl --request POST "$PEQABOO_API_BASE/cases" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      --header "Idempotency-Key: $(uuidgen)" \
      --header "Content-Type: application/json" \
      --data '{
        "externalCaseId": "YOUR-CASE-001",
        "species": "canine",
        "pet": { "name": "Milo" },
        "consent": { "accepted": true, "version": "partner-pilot-2026-08" }
      }' | tee case.json
    
    export CASE_ID="$(jq -r '.data.case.id' case.json)"
  3. 3

    Request an upload session

    Declare the exact MIME type and size. Visual and Dental use angle; Behaviour uses kind.

    03-create-upload.sh
    bash
    export MEDIA_FILE="./milo-front.jpg"
    export MEDIA_SIZE="$(wc -c < "$MEDIA_FILE" | tr -d ' ')"
    
    curl --request POST "$PEQABOO_API_BASE/cases/$CASE_ID/upload-session" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      --header "Idempotency-Key: $(uuidgen)" \
      --header "Content-Type: application/json" \
      --data "$(jq -n --argjson sizeBytes "$MEDIA_SIZE" '{
        fileName: "milo-front.jpg",
        contentType: "image/jpeg",
        sizeBytes: $sizeBytes,
        angle: "front"
      }')" | tee upload-session.json
    
    # Behaviour uses kind: "primary_video" or "supporting_image" instead of angle.
    export UPLOAD_URL="$(jq -r '.data.uploadUrl' upload-session.json)"
    export UPLOAD_SESSION_ID="$(jq -r '.data.uploadSessionId' upload-session.json)"
  4. 4

    Upload and verify media

    PUT bytes directly to storage, then complete the session so Peqaboo can verify the object.

    04-upload-and-complete.sh
    bash
    # Send only the headers returned in data.requiredHeaders.
    curl --request PUT "$UPLOAD_URL" \
      --header "Content-Type: image/jpeg" \
      --data-binary "@$MEDIA_FILE"
    
    curl --request POST "$PEQABOO_API_BASE/cases/$CASE_ID/complete-upload" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      --header "Idempotency-Key: $(uuidgen)" \
      --header "Content-Type: application/json" \
      --data "$(jq -n --arg uploadSessionId "$UPLOAD_SESSION_ID" \
        '{uploadSessionId: $uploadSessionId}')"
  5. 5

    Submit the complete case

    Meet the selected capability media requirements, then queue the case exactly once.

    05-submit.sh
    bash
    curl --request POST "$PEQABOO_API_BASE/cases/$CASE_ID/submit" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      --header "Idempotency-Key: $(uuidgen)" \
      --header "Content-Type: application/json" \
      --data '{}'
  6. 6

    Poll for the next action

    Stop polling when the case needs a retake, awaits vet review, is released, or fails.

    06-poll.sh
    bash
    curl --silent "$PEQABOO_API_BASE/cases/$CASE_ID" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      | jq '{status: .data.case.status, quality: .data.case.quality}'
  7. 7

    Review, release and download

    An authorised veterinarian releases the draft. Only then does the PDF endpoint return a download URL.

    07-review-and-download.sh
    bash
    curl --request POST "$PEQABOO_API_BASE/cases/$CASE_ID/review" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" \
      --header "Idempotency-Key: $(uuidgen)" \
      --header "Content-Type: application/json" \
      --data '{"decision":"release","notes":"Reviewed by an authorised veterinarian."}'
    
    curl --silent "$PEQABOO_API_BASE/cases/$CASE_ID/report.pdf" \
      --header "Authorization: Bearer $PEQABOO_PARTNER_API_KEY" | tee report-link.json
    
    curl --location "$(jq -r '.data.downloadUrl' report-link.json)" \
      --output "$CASE_ID-report.pdf"

Every capability mount

Endpoint contract

Same lifecycle, capability-specific media
POST/cases201

Create one consented capability case.

Idempotency-Key required

GET/cases200

List cases inside this tenant and capability.

GET/cases/{caseId}200

Read status, quality, draft and review data.

POST/cases/{caseId}/upload-session201

Create a short-lived direct upload URL.

Idempotency-Key required

POST/cases/{caseId}/complete-upload200

Verify and attach uploaded media.

Idempotency-Key required

POST/cases/{caseId}/submit202

Queue the verified case for analysis.

Idempotency-Key required

POST/cases/{caseId}/review200

Release, request retakes, or fail the draft.

Idempotency-Key required

GET/cases/{caseId}/report.pdf200 / 202

Get the released PDF download URL.

Create → upload → analyse → vet review → PDF

React to state, not a timer

Capture

draft
Case created; add media.
uploading
Verified media is being attached.

Analysis

queued
Accepted and waiting for a worker.
processing
Evidence and observations are being prepared.

Partner action

needs_retake
Improve capture, then resubmit.
awaiting_vet_review
Vet must review the draft.

Final

released
Vet-reviewed PDF is available.
failed
Inspect the error and retry safely.

Capability media limits

Dental Screening

1–5 oral images

10 MB each

Behaviour Observation

1 video + up to 5 images

3–600 sec; video up to 500 MB

Visual Wellness (experimental)

3–15 JPEG, PNG or WebP whole-body images

10 MB each

Upload sessions last 15 minutes. Behaviour accepts MP4, MOV or WebM for the primary video, and JPEG, PNG or WebP supporting images. Image capabilities accept JPEG, PNG or WebP.

Stable JSON recovery

Branch on error.code

HTTPExample codeRecovery
400invalid_requestFix the payload, media declaration, consent or capability-specific field.
401partner_auth_failedCheck the key or invitation token and environment.
403insufficient_scopeAsk Peqaboo to enable the capability or review scope.
404case_not_foundThe case is absent, in another tenant, or in another capability mount.
409invalid_status_transitionRefresh the case and follow its current state.
410upload_session_expiredCreate a fresh upload session for that file.
429daily_case_limit_reachedWait for reset or request a pilot limit review.
500internal_errorRetry with the original idempotency key and payload.
error-response.json
json
{
  "success": false,
  "error": {
    "code": "invalid_status_transition",
    "message": "Refresh the case and follow its current next action."
  }
}

Clinical-safety boundary

Observations, not diagnoses

Outputs describe only evidence visible or audible in supplied media. They do not establish disease, cause, pain or prognosis.

Vet review gates release

Drafts can request retakes. Only an authorised veterinary reviewer should release a report for downstream use.

Preserve source context

Keep capture views and owner-provided context available to the reviewer; do not present an AI score alone.

Use the released final

The PDF becomes available after release and remains subject to the limitations written in the report.

Partner AI reports are observational and non-diagnostic. They do not replace history-taking, physical examination, diagnostic testing, emergency triage or a veterinarian’s clinical judgement.

Ready to integrate?

Start with one key and one capability mount.

Use the OpenAPI file for generated clients, or follow the safe cURL lifecycle above.

OpenAPIPartner hub
B

Peqaboo Developer

Docs & Partner Platform

Back to Peqaboo
Partner APIs
Partner workspacePartner API
Documentation
Getting StartedBuild with AIGlobal PresenceAPI ReferencePackage FormatPermissionsDesign GuidelinesReview GuidelinesBrand ResourcesSDK Downloads
Developer Console
B
Peqaboo Developer
Partner workspacePartner APIGetting StartedBuild with AIGlobal PresenceAPI ReferencePackage FormatPermissionsDesign GuidelinesReview GuidelinesBrand ResourcesSDK DownloadsDeveloper Console