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.
GET /api/hub/packs. Filter by kind, status, jurisdiction, corridor, or tag.
GET /api/hub/packs/{pack_id}/versions, then fetch the exact version you use.
No download endpoint exists. Clients consume the pack body returned by the pinned API response.
Use the bundle as RAG / grep / contact context for your local DueCare run. No callbacks.
curl -fsSL "https://duecare-ai.com/api/hub/packs?latest_only=true" \ -H "accept: application/json" \ -H "x-deployment-id: ws-ngo-04"
# 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"
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"
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).
{
"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.
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.