Access 8M+ healthcare providers, comprehensive drug data, ICD-10 diagnosis codes, hospital quality and performance data across 8 categories, and clinical trial information through one unified REST API. Built on authoritative federal data sources including NPPES, openFDA, RxNorm, NLM Clinical Tables, CMS Provider Data Catalog, and ClinicalTrials.gov.
8M+Providers
20Endpoints
8Data Sources
<200msAvg Response
Authentication
All API requests can be made without authentication for testing. For production use, include your API key to track credits and access higher rate limits.
Key rotation: Generate a new key before revoking the old one. Update your application to use the new key, verify it works, then revoke the old key from the API Keys dashboard. Never share keys in client-side code or public repositories.
Quick Start
Make your first API call in seconds. No API key required for testing.
bash
# Search for providers named Smith in New Yorkcurl"https://cognizantcloud.com/api/v1/?endpoint=provider/search&last_name=smith&state=NY"# Check drug interactions for metformincurl"https://cognizantcloud.com/api/v1/?endpoint=drug/interactions&drug=metformin"# Look up ICD-10 codes for diabetescurl"https://cognizantcloud.com/api/v1/?endpoint=diagnosis/icd10&query=diabetes"
javascript
// Search for providers named Smith in New Yorkconst response = awaitfetch(
"https://cognizantcloud.com/api/v1/?endpoint=provider/search&last_name=smith&state=NY"
);
const data = await response.json();
console.log(data.data.result_count, "providers found");
python
import requests
# Search for providers named Smith in New York
response = requests.get(
"https://cognizantcloud.com/api/v1/",
params={"endpoint": "provider/search", "last_name": "smith", "state": "NY"}
)
data = response.json()
print(f"{data['data']['result_count']} providers found")
The API returns JSON with provider data, response time, and credit usage. All endpoints accept GET with query parameters or POST with a JSON body.
Base URL
Base URLhttps://cognizantcloud.com/api/v1/
All endpoints use query parameters. Pass the endpoint parameter to select a data source, then add endpoint-specific parameters. The API accepts both GET and POST methods. For POST requests, send parameters as a JSON body.
Response Headers
Every response includes these custom headers for monitoring and debugging:
Header
Description
X-Auth
Authentication status: authenticated or anonymous
X-Credits-Used
Number of credits consumed by this request
X-Credits-Remaining
Credits remaining on your account (authenticated only)
X-Response-Time
Server-side processing time in milliseconds
X-Endpoint
The endpoint that was called
X-Rate-Limit
Your per-key rate limit (authenticated only)
X-Powered-By
Always returns Cognizant Cloud API v1
Provider Endpoints
GETprovider/searchSearch the NPPES database of 8M+ healthcare providers1 credit
Parameters
Parameter
Type
Description
first_name optional
string
Provider first name (supports alias matching by default)
GETdrug/ndcLook up drugs by National Drug Code or brand name via the openFDA NDC directory1 credit
Parameters
Parameter
Type
Description
ndc optional
string
National Drug Code (e.g., "0069-1520-30"). Provide either ndc or drug.
drug optional
string
Drug brand name to search for
limit optional
integer
Max results (default: 10)
Code Examples
bash
# Look up by drug namecurl"https://cognizantcloud.com/api/v1/?endpoint=drug/ndc&drug=lipitor&limit=3"# Look up by NDC codecurl"https://cognizantcloud.com/api/v1/?endpoint=drug/ndc&ndc=0069-1520-30"
javascript
const response = awaitfetch(
"https://cognizantcloud.com/api/v1/?endpoint=drug/ndc&drug=lipitor&limit=3",
{ headers: { "x-api-key": "YOUR_API_KEY" } }
);
const { data } = await response.json();
for (const drug of data.results) {
console.log(`${drug.brand_name} (${drug.product_ndc}) - ${drug.dosage_form}`);
}
python
import requests
response = requests.get(
"https://cognizantcloud.com/api/v1/",
headers={"x-api-key": "YOUR_API_KEY"},
params={"endpoint": "drug/ndc", "drug": "lipitor", "limit": 3}
)
for drug in response.json()["data"]["results"]:
print(f"{drug['brand_name']} ({drug['product_ndc']}) - {drug['dosage_form']}")
Try It
Live
Response
Fill in parameters and click Send Request
GETdrug/rxnormResolve drug names to RxNorm identifiers, concepts, and related clinical drug information1 credit
Parameters
Parameter
Type
Description
drug required
string
Drug name to look up in RxNorm (e.g., "amoxicillin")
const response = awaitfetch(
"https://cognizantcloud.com/api/v1/?endpoint=drug/rxnorm&drug=amoxicillin",
{ headers: { "x-api-key": "YOUR_API_KEY" } }
);
const { data } = await response.json();
const concepts = data.drugGroup?.conceptGroup || [];
for (const group of concepts) {
if (group.conceptProperties) {
for (const drug of group.conceptProperties) {
console.log(`${drug.name} (RxCUI: ${drug.rxcui}, TTY: ${drug.tty})`);
}
}
}
python
import requests
response = requests.get(
"https://cognizantcloud.com/api/v1/",
headers={"x-api-key": "YOUR_API_KEY"},
params={"endpoint": "drug/rxnorm", "drug": "amoxicillin"}
)
data = response.json()["data"]
for group in data.get("drugGroup", {}).get("conceptGroup", []):
for drug in group.get("conceptProperties", []):
print(f"{drug['name']} (RxCUI: {drug['rxcui']}, TTY: {drug['tty']})")
Field
Type
Description
data.drugGroup.name
string
The drug name you searched
data.drugGroup.conceptGroup[]
array
Grouped by term type (SBD, SCD, etc.)
conceptGroup[].tty
string
Term type: SBD=branded, SCD=clinical, IN=ingredient
conceptGroup[].conceptProperties[]
array
Drug concepts in this group
conceptProperties[].rxcui
string
RxNorm Concept Unique Identifier
conceptProperties[].name
string
Full drug name with dose and form
conceptProperties[].tty
string
Term type for this concept
Try It
Live
Response
Fill in parameters and click Send Request
GETdrug/pricingGet drug pricing data, NDC codes, packaging details, and manufacturer information2 credits
Parameters
Parameter
Type
Description
drug optional
string
Drug brand name (e.g., "lipitor"). Provide either drug or ndc.
GET / POSThospital/qualitySearch CMS Hospital Compare data including star ratings, quality measures, and facility details for 4,000+ US hospitals. Data refreshed from CMS CSV source with server-side caching.2 credits
Parameters
Parameter
Type
Description
hospital_name optional
string
Hospital or facility name (partial match, case-insensitive)
state optional
string
Two-letter state code. Provide at least one filter (hospital_name, state, city, or zip).
city optional
string
Filter by city name (partial match, case-insensitive)
zip optional
string
Filter by ZIP code (exact match)
hospital_type optional
string
Filter by hospital type (e.g., "Acute Care Hospitals", "Critical Access Hospitals")
limit optional
integer
Max results (default: 10, max: 1000)
Code Examples
bash
# Search by hospital name and statecurl -H "x-api-key: YOUR_API_KEY" \
"https://cognizantcloud.com/api/v1/?endpoint=hospital/quality&state=NY&hospital_name=mount+sinai&limit=5"# POST with JSON bodycurl -X POST -H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"state":"CA","measure":"readmission","limit":10}' \
"https://cognizantcloud.com/api/v1/?endpoint=hospital/quality"
{
"endpoint": "hospital/quality",
"credits_used": 2,
"auth": "authenticated",
"response_time_ms": 312,
"data": {
"count": 5,
"results": [
{
"facility_name": "MOUNT SINAI HOSPITAL",
"state": "NY",
"measure_name": "Mortality national comparison",
"compared_to_national": "No Different Than the National Rate",
"score": "Not Available",
"footnote": "Results are based on a shorter time period than required."
}
]
}
}
Field
Type
Description
data.count
integer
Number of quality measure records returned
data.results[]
array
CMS Hospital Compare quality measure records
results[].facility_name
string
Hospital name (uppercase)
results[].state
string
State abbreviation
results[].measure_name
string
Quality measure being reported
results[].compared_to_national
string
Performance vs. national benchmark
results[].score
string
Numeric score if available
results[].footnote
string
CMS footnotes or caveats
Try It
Live
Response
Fill in parameters and click Send Request
GET / POSThospital/hcahpsPatient experience survey scores (HCAHPS) including communication, responsiveness, cleanliness, and overall hospital rating. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/infectionsHealthcare-associated infection (HAI) data including CLABSI, CAUTI, SSI, MRSA, and C.diff rates compared to national benchmarks. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/complicationsComplication and death rates for heart attack, heart failure, pneumonia, hip/knee replacement, and other serious conditions. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/readmissionsUnplanned readmission and mortality rates for heart attack, heart failure, pneumonia, COPD, stroke, CABG, and hip/knee replacement. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/spendingMedicare spending per beneficiary (MSPB) data showing how hospital episode costs compare to the national median across claim types. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/timely-careTimely and effective care measures including ED wait times, sepsis treatment, blood clot prevention, immunization rates, and other process-of-care metrics. Real-time CMS data with 1hr cache.2 credits
GET / POSThospital/profileGeneral hospital information including address, phone, type, ownership, emergency services, overall star rating, and mortality/safety/readmission national comparisons. Real-time CMS data with 1hr cache.2 credits
Test any endpoint directly from your browser. Responses come from the live production API. You can also use the "Try It" section within each endpoint above.
API Explorer
Connected
Response
Select an endpoint and click "Send Request" to see live results.
Error Codes
The API uses standard HTTP status codes. All error responses include a JSON body with an error field describing the problem.
400Bad Request
Missing required parameters or invalid parameter format. Check the endpoint documentation for required fields.
You have exceeded your rate limit. Wait until the reset time or upgrade your plan for higher limits.
json
{
"error": "rate_limit_exceeded",
"message": "You have exceeded your daily API call limit.",
"limit": 100,
"reset_at": "2026-04-03T00:00:00Z"
}
500Internal Server Error
An unexpected error occurred on the server, typically from an upstream API failure (NPPES, openFDA, etc.). If this persists, contact support@cognizantcloud.com.
json
{
"error": "Upstream API error: 503",
"endpoint": "provider/search"
}
Error handling best practice: Always check the HTTP status code first. For 5xx errors, implement exponential backoff with a maximum of 3 retries. For 402 errors, check the X-Credits-Remaining header proactively to avoid hitting zero. For 429 errors, respect the reset_at timestamp.
Rate Limits
Rate limits are applied per API key for authenticated requests, or per IP address for unauthenticated requests. Exceeding your limit returns HTTP 429.
Free
100
calls / day
Pro
5,000
calls / day
Ultra
50,000
calls / day
Rate Limit Headers
Authenticated responses include these headers to help you track usage:
Header
Description
X-Rate-Limit
Your maximum allowed calls per day
X-Credits-Remaining
Credits remaining in your account after this call
X-Credits-Used
Credits consumed by this specific request
Handling Rate Limits
javascript
async functionapiCall(endpoint, params, retries = 3) {
const url = new URL("https://cognizantcloud.com/api/v1/");
url.searchParams.set("endpoint", endpoint);
for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
for (let i = 0; i < retries; i++) {
const response = awaitfetch(url, {
headers: { "x-api-key": "YOUR_API_KEY" }
});
// Check credits proactivelyconst remaining = response.headers.get("X-Credits-Remaining");
if (remaining !== null && parseInt(remaining) < 10) {
console.warn(`Low credits: ${remaining} remaining`);
}
if (response.status === 429) {
const delay = Math.pow(2, i) * 1000; // exponential backoff
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(r => setTimeout(r, delay));
continue;
}
return await response.json();
}
throw new Error("Max retries exceeded");
}
python
import requests, time
defapi_call(endpoint, params, retries=3):
params["endpoint"] = endpoint
for i inrange(retries):
response = requests.get(
"https://cognizantcloud.com/api/v1/",
headers={"x-api-key": "YOUR_API_KEY"},
params=params
)
# Check credits proactively
remaining = response.headers.get("X-Credits-Remaining")
if remaining andint(remaining) < 10:
print(f"Warning: only {remaining} credits remaining")
if response.status_code == 429:
delay = (2 ** i) # exponential backoffprint(f"Rate limited. Retrying in {delay}s...")
time.sleep(delay)
continue
response.raise_for_status()
return response.json()
raise Exception("Max retries exceeded")
Rate limits vs. credits: Rate limits cap how many API calls you can make per day. Credits determine how many total calls you can make before purchasing more. You can hit a rate limit even if you have credits remaining. Upgrade your subscription tier to increase rate limits.
Pagination
Most endpoints support a limit parameter that controls how many results are returned per request. The maximum limit varies by endpoint, based on upstream API constraints.
Endpoint
Default
Maximum
Upstream Source
provider/search
10
200
NPPES API
drug/adverse-events
10
100
openFDA FAERS
drug/recalls
10
100
openFDA Enforcement
drug/ndc
10
100
openFDA NDC Directory
drug/pricing
10
100
openFDA NDC Directory
diagnosis/icd10
10
100
NLM Clinical Tables
hospital/quality
10
100
CMS Hospital Compare
trials/search
10
50
ClinicalTrials.gov v2
Paginating Through Large Result Sets
For endpoints that return a total_results or totalCount field larger than your limit, make multiple requests with different criteria to cover the full dataset. For the ICD-10 endpoint, the total_results field tells you how many total codes matched your query.
javascript
// Fetch providers in batches of 200 (maximum per request)async functiongetAllProviders(state, specialty) {
const response = awaitfetch(
`https://cognizantcloud.com/api/v1/?endpoint=provider/search&state=${state}&taxonomy_description=${specialty}&limit=200`,
{ headers: { "x-api-key": "YOUR_API_KEY" } }
);
const { data } = await response.json();
console.log(`Retrieved ${data.result_count} of ${data.result_count} providers`);
return data.results;
}
// For ICD-10, check total_results to know the full countconst { data } = awaitfetch(
"https://cognizantcloud.com/api/v1/?endpoint=diagnosis/icd10&query=diabetes&limit=100",
{ headers: { "x-api-key": "YOUR_API_KEY" } }
).then(r => r.json());
console.log(`Got ${data.data.results.length} of ${data.data.total_results} total matches`);
python
import requests
# Fetch max providers per request
response = requests.get(
"https://cognizantcloud.com/api/v1/",
headers={"x-api-key": "YOUR_API_KEY"},
params={"endpoint": "provider/search", "state": "NY", "taxonomy_description": "Cardiology", "limit": 200}
)
data = response.json()["data"]
print(f"Retrieved {data['result_count']} providers")
# For ICD-10, check total_results to see full count
response = requests.get(
"https://cognizantcloud.com/api/v1/",
headers={"x-api-key": "YOUR_API_KEY"},
params={"endpoint": "diagnosis/icd10", "query": "diabetes", "limit": 100}
)
data = response.json()["data"]
print(f"Got {len(data['results'])} of {data['total_results']} total matches")
Pagination strategy: Use more specific search parameters (adding state, specialty, city) to narrow results rather than paginating through thousands of records. This is faster, uses fewer credits, and returns more relevant data. For broad searches, the total_results field tells you how many records exist so you can refine your query.
Response Format
Every successful response follows a consistent envelope structure, making it simple to build reliable integrations regardless of which endpoint you call.
json
{
"endpoint": "provider/search", // which endpoint was called"credits_used": 1, // credits consumed (0 if unauthenticated)"auth": "authenticated", // "authenticated" or "anonymous""response_time_ms": 142, // server-side processing time"data": { /* endpoint-specific payload */ }
}
endpoint
Echoes the endpoint you requested. Useful for logging and debugging.
credits_used
Credits deducted for this call. 0 for anonymous (unauthenticated) requests.
auth
Whether the request was authenticated with a valid API key.
response_time_ms
Server-side processing time in milliseconds. Does not include network transit.
data
The response payload. Structure varies by endpoint (see schemas above).