Public API — v0.0.1
API documentation
Free public read of every verified entry, ontology cross-reference, public key, and signature event. CORS-enabled. Edge-cached. No API key required.
Inverted economics
Public read is free forever. Hospital EHRs, chatbots, research workflows can integrate without paying anything. Institutional write (POST contributions back, bulk dataset export, dataset DOI minting) is paid — revenue flows back to the contributing department per their reviewed entries. Today only the read surface exists; no institutional tier is live yet.
Endpoints
List every verified entry — nothing is filtered by review status. The response also carries a per-tier summary (verified / community / expert).
Example
curl https://source.cuvetsmo.com/api/drugs
Response shape
{
"apiVersion": "0.0.1",
"lastUpdated": "<iso>",
"count": 1,
"data": [ { "slug": "meloxicam", ... } ]
}/api/drugs/{slug}publicSingle drug entry by slug — every clinical section, dosages by species and route, and the full citation list.
Example
curl https://source.cuvetsmo.com/api/drugs/meloxicam
Response shape
{
"apiVersion": "0.0.1",
"lastUpdated": "<iso>",
"data": { "slug": "meloxicam", ... }
}The whole catalog in one request — every entry with clinical sections, dosages, citations, codes, and verification tier. Free; no key.
Example
curl https://source.cuvetsmo.com/api/catalog
Response shape
{
"count": N,
"drugs": [ { "slug": "meloxicam", "dosages": [...], "citations": [...], "verificationTier": "sourced", ... } ]
}Same catalog as RFC 4180 CSV, one row per drug × dosage (species, indication, route, dose, citation count). Opens directly in Excel / Sheets.
Example
curl -O https://source.cuvetsmo.com/api/catalog/csv
Response shape
Content-Type: text/csv; charset=utf-8 Content-Disposition: attachment; filename="cuvetsmo-source-catalog.csv"
Filter by ontology code. Supports ATC prefix-match and RxNorm exact match.
Rate limit: 1000 / IP / day (advisory — not enforced today)
Example
curl 'https://source.cuvetsmo.com/api/by-code?system=atc&code=M01AC06'
Response shape
{
"query": { "system": "atc", "code": "M01AC06" },
"count": 1,
"data": [ { "slug": "meloxicam", "codes": {...} } ]
}/api/keys/{kid}publicPublic signing key as JSON Web Key. Use for client-side signature verification.
Example
curl https://source.cuvetsmo.com/api/keys/cuvetsmo-board
Response shape
{
"apiVersion": "0.0.1",
"data": {
"kty": "OKP", "crv": "Ed25519", "x": "<base64url>",
"fingerprint": "ed25519:<hex>",
"displayName": "CUVETSMO Editorial Board"
}
}Append-only transparency log of every signature event. Audit trail for the curious.
Rate limit: 100 / IP / day (advisory — large payload)
Example
curl https://source.cuvetsmo.com/api/log
Response shape
{
"apiVersion": "0.0.1",
"count": N,
"entries": [ { "entryType": "drug-signature", "drugSlug": "meloxicam", ... } ]
}Citation-probe health summary — coverage stats, dead URLs, source breakdown. Lets external monitoring detect citation rot.
Example
curl https://source.cuvetsmo.com/api/health
Response shape
{
"apiVersion": "0.0.1",
"summary": {
"totalCitations": N, "probed": N, "healthy": N,
"unhealthy": N, "pctProbed": N, "pctHealthy": N
},
"bySource": { "dailymed": {...}, "atc": {...}, ... },
"unhealthyEntries": [ { "cid": "...", "url": "...", "latestStatus": 404 } ]
}Institutional bulk-export placeholder: returns 402 today. The whole catalog is already free at /api/catalog (JSON) and /api/catalog/csv.
Example
curl -i https://source.cuvetsmo.com/api/dataset
Response shape
HTTP/2 402
{
"error": { "code": "institutional-tier-required", ... },
"contact": { "email": "palm@cuvetsmo.com", ... }
}Rate limits + response headers
Rate-limit headers are advisory today. Nothing is enforced yet, so integrations built now keep working if enforcement is ever turned on:
X-Source-Tier: public X-Source-Limit-RPD: 1000 X-Source-Cost: 1 X-Source-Enforcement: phase-0-soft
Tier public = anonymous. Tier institutional = paid. Tier admin= maintainers only. When enforcement flips on, exceeding RPD returns HTTP 429 with the same shape as the 402 dataset response.
CORS
All GET endpoints set Access-Control-Allow-Origin: *. You can fetch from any origin (browser, curl, Node, Python, Go). There is no write API today; contributions go through the public GitHub repository.
Sample integration
// Browser — fetch + verify a single entry
const drug = await fetch('https://source.cuvetsmo.com/api/drugs/meloxicam').then(r => r.json())
const key = await fetch(`https://source.cuvetsmo.com/api/keys/${drug.data.signatures[0].signerKeyId.split(':')[1].slice(0,99)}`)
// For real verification, fetch by signerId not by fingerprint slice
// see /verify/[slug] for the proper pattern