AAPC APIaapc.com ↗
Look up CPT, ICD-10-CM, ICD-10-PCS, and HCPCS codes with descriptions, hierarchies, and search via the AAPC Codify API. 13 endpoints.
What is the AAPC API?
The AAPC Codify API provides structured access to four major medical code sets across 13 endpoints, covering CPT, ICD-10-CM, ICD-10-PCS, and HCPCS Level II codes. You can browse top-level sections with get_cpt_sections, drill into leaf-level subsections, retrieve individual code details including lay terms and breadcrumbs, or run cross-code-set keyword searches that return a grouped treeview of matching codes.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/2a47e7bb-8773-4144-a7a0-01b82a6cc5ca/get_cpt_sections' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace aapc-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.aapc_medical_codes_api import AAPC, CptSection, CptCode, Icd10CmCode, Icd10PcsSection, HcpcsSection, SearchResult, Year
aapc = AAPC()
# Search for medical codes using the Year enum
result = aapc.searchresults.search(query="pneumonia", year=Year.Y2026)
print(result.spelling, result.msg)
for node in result.treeview:
print(node.label, node.type)
# List top-level CPT sections
for section in aapc.cptsections.list():
print(section.label, section.range)
# Drill into a CPT section's subsections
em_section = aapc.cptsection(range="98000-99499")
for subsection in em_section.subsections():
print(subsection.label, subsection.range)
# Get codes within a leaf-level subsection
office_visit = aapc.cptsection(range="99202-99205")
for code in office_visit.codes.list():
print(code.code, code.label)
# Fetch full details for a specific CPT code
detail = aapc.cptcodes.get(code="99213")
print(detail.code, detail.lay_term, detail.breadcrumbs)
# Browse ICD-10-CM chapters and drill into subsections
infectious = aapc.icd10cmsection(range="A00-B99")
for sub in infectious.subsections():
print(sub.label, sub.range)
# Get ICD-10-CM code details with excludes/includes
pneumonia = aapc.icd10cmcodes.get(code="J18")
print(pneumonia.code, pneumonia.label, pneumonia.excludes1, pneumonia.excludes2)
# Browse ICD-10-PCS hierarchy
medical = aapc.icd10pcssection(code="0")
for child in medical.children():
print(child.code, child.label)
# Browse HCPCS sections and their codes
ambulance = aapc.hcpcssection(range="5")
for hcode in ambulance.codes.list():
print(hcode.code, hcode.description)
# Get full CPT hierarchy
for h in aapc.cpthierarchies.list(max_depth=2):
print(h.label, h.range, h.children)
Get top-level CPT code sections. Returns the major CPT code categories (e.g., Anesthesia, Surgery, Radiology, Evaluation and Management). Each section contains a label, code range, and URL.
No input parameters required.
{
"type": "object",
"fields": {
"items": "array of CPT section objects each containing label, range, and url"
},
"sample": {
"data": {
"items": [
{
"url": "https://www.aapc.com/codes/cpt-codes-range/00100-01999/",
"label": "Anesthesia",
"range": "00100-01999"
},
{
"url": "https://www.aapc.com/codes/cpt-codes-range/10004-69990/",
"label": "Surgery",
"range": "10004-69990"
}
]
},
"status": "success"
}
}About the AAPC API
Hierarchical Code Browsing
CPT codes are navigable in three steps. get_cpt_sections returns the major category groups (e.g., Anesthesia, Surgery, Radiology) with their label, range, and url. Pass one of those ranges to get_cpt_section_detail to get child sub-ranges. Only exact leaf-level ranges work with get_cpt_subsection_codes — intermediate ranges return empty results. That endpoint is paginated (0-indexed page parameter, up to 10 codes per page) and uses next_page in the response to signal additional pages. For a single CPT code, get_cpt_code_detail returns description, lay_term, and breadcrumbs alongside the raw code value.
ICD-10-CM and ICD-10-PCS Coverage
ICD-10-CM browsing mirrors the CPT flow: get_icd10cm_sections returns all chapter groupings, and get_icd10cm_section_detail returns child blocks. Note that the detail response includes sibling chapter navigation items alongside true subsections, so filtering by URL is recommended to isolate subsections. get_icd10cm_code_detail returns excludes1, excludes2, and includes arrays, though these clinical notes are populated mainly at category level (e.g., J18, E11) rather than at specific leaf codes (e.g., A01.0). ICD-10-PCS uses a character-by-character hierarchy: get_icd10pcs_sections returns single-character section codes, and repeated calls to get_icd10pcs_detail with progressively longer code_prefix values (e.g., 0, 0B) walk the seven-character structure.
HCPCS Level II and Search
get_hcpcs_sections returns Level II section groupings, but note that the range values are opaque numeric IDs rather than HCPCS alphanumeric code ranges. Pass these IDs to get_hcpcs_section_detail to retrieve codes with code, label, and description fields; some section IDs return empty arrays. search_codes accepts a query string (keyword or code) and an optional year parameter, returning results grouped by code set in a nested treeview array. Labels within the treeview contain inline HTML that may need stripping before display.
Full CPT Hierarchy Traversal
get_cpt_full_hierarchy lets you retrieve a pre-nested CPT structure in a single call by setting max_depth (1 for top-level sections only, 2 to include subsections, 3 to include sub-subsections). Each node in the returned array may contain a children array of the next level down. This is useful for building navigation trees or local code caches without chaining multiple section-detail calls.
The AAPC API is a managed, monitored endpoint for aapc.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aapc.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official aapc.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a CPT code autocomplete widget using search_codes with procedure keyword queries
- Generate breadcrumb navigation for medical billing UIs using the breadcrumbs field from get_cpt_code_detail
- Validate ICD-10-CM codes in claim submission workflows using get_icd10cm_code_detail's excludes1 and excludes2 arrays
- Populate a code-set selector tree in EHR software using get_cpt_full_hierarchy at max_depth 2
- Cross-reference HCPCS Level II codes with descriptions for DME billing using get_hcpcs_section_detail
- Support medical coding education tools by walking the ICD-10-PCS seven-character hierarchy via get_icd10pcs_detail
- Run year-specific code lookups for compliance auditing using the year parameter in search_codes
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.