Open data
Use the atlas data
The atlas’s public listings, upcoming events and labs are available as JSON, free to reuse for non-commercial purposes. Build a local map, a chatbot answer or a printed leaflet: just say where the data came from.
Endpoints
| URL | What it returns |
|---|---|
/api/v1/services.json | Every live listing in the open data |
/api/v1/events.json | Upcoming published events of those listings |
/api/v1/labs.json | The lab registry |
/api/v1/places.json | The finder’s place index: regions and countries, and links to its parts (?part=names, more, zips, fsa) |
/api/v1/coverage/<slug>.geojson | Where one listing reaches people, as GeoJSON |
/api/v1/coverage.geojson | Where every live listing in the open data reaches people, as one GeoJSON file |
What is in it. Only what each program leaves public. A program can keep any of its answers off its public listing (some funders restrict what may be advertised), and those are never in these files. A program can also keep its whole listing out of this download: it is still on the site, in the finder and on the map, but not in these files. The finder reads its own feed (/api/v1/finder/…) for that; it is for this site’s pages only and is not open data.
Hidden areas still match searches. Where a team travels, where a mail-in service takes mail from, and who may post a sample can be kept off a listing and still be matched by searches. They are shown nowhere: not on the listing, the result cards or the map. Because the finder matches in your browser, they are included, not displayed, in its search data (/api/v1/finder/services.json, under match_only), where anyone who reads that file can see them. They are never in the open data.
All endpoints are read-only GET requests. No key or account is needed, responses can be cached for five minutes, and each carries an ETag so you can ask with If-None-Match and get a short 304 when nothing changed. Cross-origin requests are allowed. Please don’t poll more than once every few minutes.
Each JSON file has the same envelope: generated_at, license, license_url, license_note, attribution, count, and the list itself.
Example
curl https://a.cab/api/v1/services.json
{
"generated_at": "2026-10-09T17:00:00+00:00",
"license": "CC BY-NC 4.0",
"attribution": "A.CAB (Atlas of Community Analysis Bureaus), https://a.cab",
"count": 1,
"services": [{
"slug": "example-drug-checking",
"name": "Example Drug Checking",
"country": "US", "region": "US-CA",
"ways": {"walkin": true, "events": false, "mail": false},
"methods": ["Fentanyl test strips", "Xylazine test strips", "Other test strips", "FTIR"],
"strips_other": "Ketamine strips",
"offers": [{"way": "walk", "method": "FTIR", "via": "self", "lab": null, "measures": false}],
"cost": "free", "quantifies": "",
"supplies": ["Naloxone (Narcan)", "Sterile syringes", "Wound care supplies", "Other"],
"supplies_other": "Bus passes",
"other_services": ["Peer support"],
"sites": [{"city": "Oakland", "region": "US-CA", "area": "US-06001",
"visibility": "full", "street": "1 Example Street",
"lat": 37.77, "lon": -122.22, "approximate": false,
"hours": {"Tue": {"open": true, "from": "16:00", "to": "20:00"},
"Thu": {"open": true, "from": "10:00", "to": "14:00", "appointment": true}},
"timezone": "America/Los_Angeles"}],
"coverage": {"site": ["US-06001"], "travel": [], "mail": []},
"id_check": "no",
"verified_at": "2026-09-14T17:00:00+00:00",
"timezone": "America/Los_Angeles",
"updated_at": "2026-10-02",
"confirmed_at": "2026-09-14",
"out_of_date": false
}]
}
Listings: services.json
slug,name,parent,description- Identity. The listing’s page is
https://a.cab/s/<slug>. country,country_name,region- ISO country code; region codes look like
US-CAorCA-ON. website,socials,contact- The service’s public website, social links (
platform,handle,url), and how to reach them. A service’s phone numbers and email addresses are not in the contact fields (nor in links that are one, such as a wa.me or email booking link), so they cannot be harvested from them: each service’s page shows them to a person who presses its “Show phone and email” button. Free-text fields such asdescriptionandnotesare published as the service wrote them. The data says whether a service has them (contact.has_email,contact.has_phone, andcontact.revealablewhen its page has anything to show on request), and what the phone takes (contact.phone_takes: calls, texts). Messaging apps are incontact.messaging(app,name,handle, and aurlfor apps that have web links, such as Telegram and Threema); an app reached by a phone number or an email address, such as WhatsApp, hashiddentrue and no handle or link.contact.links_hiddenis true when the website or the “Other” social link is itself a phone number or an email address, and is left out ofwebsiteandsocials. ways- How people reach them:
walkin,events(events and outreach) andmail. testers,methods,offers- Who tests (
self, a partnerlab, or ahandoutpeople use themselves), every method, and each method by way and tester, honouring “not at events” style exceptions. An offer’smeasuresis true when it can say how much of a drug is in a sample (a measuring method, and for a registry lab only when the lab says it measures); an offer from a partner lab the service didn’t name, or whose methods it wasn’t sure of, hasmethodnull. - Method names
- Test strips by kind:
Fentanyl test strips,Xylazine test strips,Medetomidine test strips,Benzodiazepine test strips,Nitazene test stripsandOther test strips(a listing saved before each kind was named may useOther test stripsfor xylazine, benzodiazepine and nitazene strips together; when its hand-out answer shows that,strips_othersays “xylazine, benzos, nitazenes” until the service names them);Reagent tests; instruments used on site:FTIR,Raman,Paper spray MS; and lab instruments:GC-MS,LC-MS / HPLC,DART-MS,NMR. strips_other,method_other,handout- Which other test strips, as the service wrote it (only when
Other test stripsis among its own methods or what it hands out; may be empty); any other method it named; and what it hands out for people to test their own (the strip names above, orReagent kits). labs,unlisted_labs- Partner labs from the registry, and how many other labs they use that A.CAB has not yet confirmed (not named).
quantifies- Whether they can say how much of a drug is in a sample:
yes,some(for some drugs),no, or empty. Only a service that offers a method able to measure (GC-MS,LC-MS / HPLC,NMR,Paper spray MS, itself or at a partner lab that says it measures) hasyesorsome:FTIR,RamanandDART-MSalone can’t. waits,forms,results- Typical wait by tester (
self, or a lab’s name), the sample forms they take, and how results are given. sites- Walk-in sites.
visibilityisfull(street and exact pin),area(city and an approximate pin rounded to about 1 km) orhidden(only the county served: no city, street or pin). Alsohoursby weekday (MontoSun, eachopen,fromandtoas 24-hourHH:MMlocal time;toearlier thanfromruns past midnight, the same time means all day;"appointment": truemeans that day is by appointment only during those hours, and whenvisitisappointmentevery listed day is), IANAtimezone,visit(dropin,appointment,both),booking(a web link; a site booked by email, or through a link that is a phone number such as wa.me, hasbooking_hiddentrue instead, andbooking_by_emailtrue when it is by email;organizershas the same fields) andaccess. event_kinds,travel,organizers- For outreach teams: the kinds of events they do, the areas they travel to and what event organizers need to know.
mail- For mail-in services:
how(codes) andhow_labels, the analysinglab(lab_unlistedistruewhen it is a lab A.CAB has not confirmed yet, which is not named), and theareasthey post to. supplies,supplies_other- What people can take home for free besides test kits (those are in
handout), in this order and these words: overdose response (Naloxone (Narcan),Rescue breathing masks); safer use (Sterile syringes,Injection supplies (cookers, cottons, tourniquets),Sharps containers,Safer smoking supplies,Safer snorting supplies,Other safer-use supplies); sexual health (Safer sex supplies (condoms, lube),Pregnancy tests,Emergency contraception,HIV self-tests); health and hygiene (Wound care supplies,First aid kits,Hygiene kits,Period products); basic needs (Food and snacks,Water,Clothes,Socks and underwear,Blankets and sleeping bags,Tents,Hand warmers,Phone chargers); andOther, with what else insupplies_otheras the service wrote it (may be empty). What they usually have: stock changes. A program can keep any one of them off its listing, and then it is not here. Data downloaded before these fields were added had naloxone and safer-use supplies inother_services(Naloxone,Safer-use supplies); they are here now, asNaloxone (Narcan)andOther safer-use supplies. cost,fee,currency,limits,for_friend,languages,other_services,notes- Practical details:
free,slidingorfee(empty: ask them); who can use it; whether you can bring a sample for a friend (Yes,Noor empty); other services alongside testing (such asNaloxone training,Drug education or counselling,Referral to treatment,Medical care,Peer support: services only, never supplies); and more. (Earlier versions also hadlegal, which is no longer published.) results_published,alert_networks- Where they publish what they find, and alert networks they share with.
coverage- Area codes by kind:
site(a site’s county),travelandmail. Codes are countries (US), regions (US-CA), US counties by FIPS (US-06001) or Canadian census divisions (CA-3520). id_check- Whether people have to show ID to get a sample checked:
no,age(only to check age, and nothing is written down) oryes. Listings from before the question was asked areno: they had told A.CAB they never asked for ID. promise,verified_at,updated_at,confirmed_at,timezone,out_of_date- What every listed service has told A.CAB about privacy (the same words on every listing: A.CAB volunteers check each listing, but can’t inspect how a service runs day to day), when an A.CAB volunteer last checked the listing, the date (
YYYY-MM-DD) its details last changed, the date the service last confirmed it (every 4 months, or once a year for a small team), the time zone those two dates are given in (the listing’s own, an IANA name such asAmerica/Los_Angeles), and whether the confirmation was long enough ago that it may be out of date.
Events: events.json
id, title, starts_on, ends_on (dates), start_time, end_time (local HH:MM), timezone, venue, city, region, area and their labels, lat/lon, methods the team brings, audience (public or ticket holders), notes, url, and the host listing’s slug and name.
Labs: labs.json
id, name, aliases, operator, country, region, website, access (who can send samples), methods, quantifies, turnaround, cost, results_url, and checked: the date (YYYY-MM-DD) a volunteer last checked the entry again, in the quarterly check, or null before its first one.
Coverage: coverage/<slug>.geojson
A GeoJSON FeatureCollection with one feature per area. US counties have a generalised outline (from the US Census Bureau’s 1:20,000,000 cartographic boundaries); Canadian census divisions have an approximate point; a whole region or country has no geometry. Properties: area, label, kind (site, travel, mail), level.
coverage.geojson has the same features for every live listing in the open data, one per area, with the listings that reach it as services (a list of slug and kind).
Licence
Since 21 October 2026 the directory data is published under the Creative Commons Attribution-NonCommercial 4.0 licence (CC BY-NC 4.0): share and adapt it, with credit, but not for commercial purposes. Data downloaded before 21 October 2026 was released under CC BY 4.0, and those copies keep that licence. Credit “A.CAB (Atlas of Community Analysis Bureaus)” with a link to this site. The place index is built from US Census Bureau data (public domain) and GeoNames (CC BY 4.0), and stays under CC BY 4.0. Canadian census divisions: Source: Statistics Canada, Standard Geographical Classification (SGC) 2021. Reproduced and distributed on an “as is” basis with the permission of Statistics Canada. Files that include Canadian areas carry this statement in their attribution; please keep it when you reuse them.
Listings change. Please show when you fetched the data, and point people to the listing page for the latest details.