Find an API

Search public APIs with auth details & Postman guides

← All APIs

NLM CPT Code Search API

National Library of Medicine · Health

Health No Auth Free & Open Healthcare CPT Procedure Codes Medical Billing

NLM Clinical Tables search for CPT (Current Procedural Terminology) codes used for outpatient billing. Returns CPT code numbers and descriptions. Note: Full CPT code set requires AMA license; this API provides searchable descriptions.

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Search CPT codes

Search CPT procedure codes by description text

https://clinicaltables.nlm.nih.gov/api/cpt/v3?df=code,name&sf=code,name&terms=knee arthroscopy&maxList=10

Hover any highlighted part to learn what it does

curl -X GET "https://clinicaltables.nlm.nih.gov/api/cpt/v3?df=code%2Cname&sf=code%2Cname&terms=knee%20arthroscopy&maxList=10"
import requests
params = {
    "df": "code,name",
    "sf": "code,name",
    "terms": "knee arthroscopy",
    "maxList": "10"
}
response = requests.get(
    "https://clinicaltables.nlm.nih.gov/api/cpt/v3",
    params=params,
)
print(response.json())
const url = new URL('https://clinicaltables.nlm.nih.gov/api/cpt/v3');
url.searchParams.set('df', 'code,name');
url.searchParams.set('sf', 'code,name');
url.searchParams.set('terms', 'knee arthroscopy');
url.searchParams.set('maxList', '10');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://clinicaltables.nlm.nih.gov/api/cpt/v3")
	q := baseURL.Query()
	q.Set("df", "code,name")
	q.Set("sf", "code,name")
	q.Set("terms", "knee arthroscopy")
	q.Set("maxList", "10")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://clinicaltables.nlm.nih.gov/api/cpt/v3")
uri.query = URI.encode_www_form({
  "df" => "code,name",
  "sf" => "code,name",
  "terms" => "knee arthroscopy",
  "maxList" => "10"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://clinicaltables.nlm.nih.gov/api/cpt/v3?" . http_build_query([
    "df" => "code,name",
    "sf" => "code,name",
    "terms" => "knee arthroscopy",
    "maxList" => "10"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. No API key required — open NIH service
  2. In Postman, GET https://clinicaltables.nlm.nih.gov/api/cpt/v3/search
  3. Add params: sf=code,name and df=code,name and terms={description text}
  4. Search by description keyword (e.g. "knee arthroscopy") or partial code
  5. Full CPT licensing from AMA required for production use in commercial products

What can you build with NLM CPT Code Search API?

NLM CPT Code Search API is a Health API. Developers commonly use health APIs for:

  • accessing medical reference data and drug information
  • building patient-facing health tracking apps
  • integrating with EHR and telemedicine platforms
  • looking up ICD codes and clinical terminology
  • powering wellness and fitness applications

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. NLM CPT Code Search API is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗