Skip to main content
This guide walks you through the six essential steps to start using the Penelope API for medical policy coverage verification.

Prerequisites

Before you begin, you’ll need:
  • An API key from Penelope (contact us at [email protected])
  • A tool to make HTTP requests (curl, Postman, or your preferred language)

Step 1: Authenticate

All Penelope API requests require authentication via the x-api-key header.
If your key is valid, you’ll receive a 200 response. See the Authentication docs for error handling and security best practices.
Store your API key as an environment variable to avoid exposing it in code:

Step 2: List Lines of Business

Find lines of business you want to query. Lines of business can be filtered by category (commercial, medicare_advantage, medicaid, etc.) and payer.
Response:
Save the lob_id values—you’ll use these to filter policy queries.

List LOBs API

View all filtering options and response fields

Step 3: Query Policies by Medical Codes

Find policies related to specific CPT, HCPCS, or ICD-10-CM codes. This is the primary way to check coverage for a procedure or diagnosis.
Response:
Results are relevance-ranked by default: policies whose title or summary match the descriptions of your codes come first, so a policy about the procedure outranks one that merely lists the code.
Set "include_code_groups": true in the request body to get code_groups — codes grouped by system (CPT, HCPCS, ICD-10-CM), relationship (COVERS, DOES_NOT_COVER, REFERENCES), and category.

Filtering by Coverage Type

Use the edge_types parameter to filter by relationship type:
  • COVERS — policy explicitly covers the code
  • DOES_NOT_COVER — policy explicitly excludes the code
  • REFERENCES — code is mentioned but coverage isn’t explicit
Response:

List Policies API

Full documentation for code-based policy queries

Step 4: Search Policies by Keywords

For exploratory research when you don’t have specific codes, use full-text search across policy titles and summaries.
Response:
Results are ranked by relevance score — a relative signal for ordering matches within a single response, not an absolute value to compare across searches. The applicability field shows which payers and lines of business this policy applies to. Combine with lob_ids to scope the search to specific lines of business. Set "include_code_groups": true to get associated codes. Each result includes a policy_id — save it to fetch the policy’s coverage criteria in the next step.

List Policies API

Use the q parameter for full-text search across policy titles and summaries

Step 5: Get Policy Coverage Criteria

Steps 3 and 4 return a policy_id for each matching policy. Pass that policy_id to the Get Policy endpoint to retrieve the full policy detail — including the criteria_text, the medical-necessity criteria extracted from the policy as LLM-ready markdown.
Response:
The response also includes the policy’s code_groups (covered/excluded codes), applicability (payers and lines of business), and summary. Use criteria_text when you need the coverage rules themselves — for example to drive a prior-authorization check or surface requirements to a user.

Get Policy API

Retrieve a single policy’s criteria text, code groups, and applicability by policy_id

Step 6: Download Policy Files

To work with the original source document rather than the extracted criteria, download the full file (PDF or HTML) using the policy’s policy_id.
Response:
Use variant=text to get an LLM-optimized markdown version:
Response:
The presigned URL expires after 1 hour. Download the file promptly or request a fresh URL.

Download Policy API

Get temporary download links for policy documents

Next Steps

Key Concepts

Understand the data model and relationships

Data Coverage

See which payers and plans are covered

Examples

More examples

API Reference

Complete API documentation