Home/Client connect
Lane 06 · Developer / integration partner

Build prevention, assistance, or research workflows on live hub APIs.

Use these endpoints to list vetted packs, pin versions, submit public-source updates, or share anonymized aggregate signals. The public hub is for shared knowledge and pattern signals, not private case handling.

Developer lane · cross-cutting integration Public-source proposals · anonymized signals
Pull / propose flow

Local system ↔ public hub.

Step 01
List packs

GET /api/hub/packs. Filter by kind, status, jurisdiction, corridor, or tag.

Step 02
Pin version

GET /api/hub/packs/{pack_id}/versions, then fetch the exact version you use.

Step 03
Consume JSON

No download endpoint exists. Clients consume the pack body returned by the pinned API response.

Step 04
Run locally

Use the bundle as RAG / grep / contact context for your local DueCare run. No callbacks.

List packs

GET /api/hub/packs
curl -fsSL "https://duecare-ai.com/api/hub/packs?latest_only=true" \
  -H "accept: application/json" \
  -H "x-deployment-id: ws-ngo-04"

Fetch a pinned pack version

GET /api/hub/packs/{pack_id}/{version}
# discover versions, newest first
curl -fsSL https://duecare-ai.com/api/hub/packs/phl-kwt-domestic/versions \
  -H "accept: application/json"

# pin the exact version consumed by your runtime
curl -fsSL https://duecare-ai.com/api/hub/packs/phl-kwt-domestic/1.7.2 \
  -H "accept: application/json"

Filter tools / contacts / grep / rubric packs

shell
curl -fsSL "https://duecare-ai.com/api/hub/packs?kind=ContactPack"
curl -fsSL "https://duecare-ai.com/api/hub/packs?kind=GrepRulePack&tag=fees"
curl -fsSL "https://duecare-ai.com/api/hub/packs?kind=RubricPack"
curl -fsSL "https://duecare-ai.com/api/hub/sync"

Submit a public-source update proposal

POST /api/hub/client/submission
curl -fsSL https://duecare-ai.com/api/hub/client/submission \
  -X POST -H "content-type: application/json" \
  -d '{
    "kind": "context",
    "deployment_id": "partner-demo-04",
    "organization": "Example partner deployment",
    "jurisdiction": "PHL",
    "corridor": "PHL-KWT",
    "summary": "Public advisory update about recruitment-fee rules for the PHL-KWT corridor.",
    "public_source_url": "https://...gov/advisory/2026-04",
    "payload": {"source_type": "public_advisory"},
    "consent_public_proposal": true,
    "contact_publication_consent": false
  }'

Proposals always start as status: "proposed". Curators promote after review. The hub will reject any submission whose payload contains likely worker-case fields (emails, phone numbers, ID-like strings in free text).

Submit anonymized aggregate signal

POST /api/hub/signals
{
  "source": "worker_mobile_opt_in",
  "jurisdiction": "PHL",
  "corridor": "PHL-KWT",
  "risk_tags": ["fee_request", "document_retention"],
  "summary": "Partner observed an increase in fee-request patterns across anonymized PHL-KWT intake buckets.",
  "evidence_hashes": ["sha256:example-aggregate-bucket"],
  "consent_basis": "aggregate_only",
  "pack_version": "phl-kwt-domestic@1.7.2"
}

Schema accepts a pattern summary and hashes, not private case narratives. Keep the summary about a pattern, not a person.

Python client

duecare_client.py
import requests

BASE = "https://duecare-ai.com"

packs = requests.get(
  f"{BASE}/api/hub/packs",
  params={"latest_only": True, "corridor": "PHL-KWT"},
  timeout=30,
).json()

pack = requests.get(
  f"{BASE}/api/hub/packs/phl-kwt-domestic/1.7.2",
  timeout=30,
).json()

assert pack["id"] == "phl-kwt-domestic"
# Keep private case content in your own system; hub APIs are for packs and proposals.