API Documentation

Reference for authenticating and integrating with the NOF1 Policy API.

Policy API

v1

Programmatic access to payer coverage policies. Search by name, CPT code, payer, or LCD reference, and retrieve full policy details including coverage criteria and coding requirements.

The NOF1 Policy API gives your systems direct access to the same payer policy intelligence used in the NOF1 platform. Use it to power clinical decision support tools, automate prior authorization workflows, or build policy-aware analytics.

ⓘAPI access is available on select plans. Contact support@nofone.io to enable API access for your organization and receive your API key.

Authentication

All requests must include a valid API key as a Bearer token in the Authorization header. API keys are scoped to your organization and should be treated as secrets. Do not expose them in client-side code or commit them to version control.

Request header
Authorization: Bearer nof1_live_<your_api_key>

Requests without a valid token will receive a 401 response.

⚠Keep your API key confidential. If a key is compromised, rotate it immediately from your organization settings. NOF1 will never ask for your API key over email.

Base URL & Versioning

All endpoints are versioned under /v1. Breaking changes will be released under a new version prefix with advance notice.

Base URLhttps://api.nofone.io

All request and response bodies use JSON. Include Content-Type: application/json on any requests with a body.


Pagination

List endpoints return paginated results. Pass page and per_page query parameters to navigate through results. The response envelope includes a meta object with total counts.

Example paginated response envelope
{
  "data": [ ... ],
  "meta": {
    "total": 142,
    "page": 1,
    "per_page": 20,
    "total_pages": 8
  }
}
ParameterTypeDescription
pageintegerPage number to return. Default: 1.
per_pageintegerResults per page. Default: 20. Maximum: 100.

Result Ordering

When q is supplied (3 characters or more), Search Policies returns results in relevance order, most relevant first. Relevance is scored on where the match occurred: the policy name is weighted most heavily (an adjacent phrase match on the name highest of all), followed by drug names, procedure codes, taxonomy, and summary. Coverage-criteria text is searched for recall but does not raise a policy's rank.

A policy must match roughly two-thirds of your query terms to be returned at all. For one- and two-word queries every term must match; longer queries are treated more leniently, so a single unusual word will not exclude an otherwise relevant policy.

⚠Ordering without q. Requests that filter only (by cpt_code, payer_id, lcd_id, drug, or policy_type) have no relevance signal to sort on and are returned in an unspecified order. That order is not guaranteed to be stable across requests, so a policy may in rare cases appear on two pages or none while you are paging through a filter-only result set. If you need to enumerate a filter-only set exhaustively, de-duplicate the collected id values, or add a q term to get a stable relevance ordering.

Rate Limits

Rate limits are applied per API key. Exceeded limits return a 429 response. Use the response headers to monitor your usage.

HeaderTypeDescription
X-RateLimit-LimitMaximum requests allowed per minute.
X-RateLimit-RemainingRequests remaining in the current window.
X-RateLimit-ResetUnix timestamp when the window resets.
Retry-AfterSeconds to wait before retrying (only present on 429 responses).

Errors

NOF1 uses standard HTTP status codes. Error responses include a machine-readable code and a human-readable message.

Error response shape
{
  "error": {
    "code": "invalid_query",
    "message": "At least one search parameter is required.",
    "param": "q"
  }
}
StatusCodeDescription
400invalid_queryA query parameter is missing, malformed, or out of range.
401unauthorizedAPI key is missing, invalid, or revoked.
404not_foundThe requested policy or resource does not exist.
429rate_limitedToo many requests. Slow down and retry after Retry-After seconds.

List Payers

GET/v1/payersList all supported payers

Returns NOF1's directory of supported payers: the curated payer taxonomy used across clinical and prior-auth workflows, not a live scan of indexed policies.

⚠The payer_id to filter on depends on which endpoint you're calling and on line of business. The same payer is frequently tracked under different payer_id values for clinical policy data versus prior-auth data, and those can differ per line of business too (e.g. Aetna's Medicare Advantage payer_id is aetna_medicare for clinical but Aetna-MA for prior auth). Use payer_ids.clinical.<lob> when searching policies or calling Get Policy, and payer_ids.prior_auth.<lob> when checking prior authorization. The top-level id is a stable NOF1 payer identifier (matches payer_key from Match Payer to NOF1 Payer). Don't use it as a payer_id filter value.

Query Parameters

ParameterTypeDescription
lobstringFilter to payers supported on this line of business. One of: commercial, medicare.
pageintegerPage number. Default: 1.
per_pageintegerResults per page. Default: 20. Maximum: 100.

Example Request

cURL
curl "https://api.nofone.io/payers?lob=commercial" \
  -H "Authorization: Bearer nof1_live_<your_api_key>"

Example Response 200

JSON
{
  "data": [
    {
      "id": "aetna",
      "name": "Aetna",
      "lines_of_business": ["commercial", "medicare"],
      "is_um_vendor": false,
      "payer_ids": {
        "clinical": { "commercial": "aetna", "medicare": "aetna_medicare" },
        "prior_auth": { "commercial": "aetna", "medicare": "Aetna-MA" }
      }
    },
    {
      "id": "carelon",
      "name": "Carelon",
      "lines_of_business": ["commercial", "medicare"],
      "is_um_vendor": true,
      "payer_ids": {
        "clinical": { "commercial": "Carelon", "medicare": "Carelon" },
        "prior_auth": {}
      }
    },
    {
      "id": "premera",
      "name": "Premera",
      "lines_of_business": ["commercial"],
      "is_um_vendor": false,
      "payer_ids": {
        "clinical": { "commercial": "Premera" },
        "prior_auth": { "commercial": "Premera" }
      }
    }
  ],
  "meta": {
    "total": 3,
    "page": 1,
    "per_page": 20,
    "total_pages": 1
  }
}

Notes

is_um_vendor is true for utilization-management vendors (e.g. Carelon, EviCore, Cohere) that process authorizations on behalf of one or more payers, rather than being a health plan themselves.

A payer_ids.clinical or payer_ids.prior_auth object can be missing a line of business, or be empty entirely (e.g. Carelon has no prior_auth entry above). That means NOF1 doesn't track a payer_id for that payer under that workflow/LOB, not that the lookup failed.


Match Payer to NOF1 Payer

POST/v1/payers/matchResolve external payer names to a NOF1 payer

Resolves free-text payer names from your own systems (e.g. from an eligibility feed or a manually entered payer field) to the corresponding NOF1 payer. Matching runs in three passes per query: exact name/alias match, partial token match, and (when neither finds a candidate) a semantic embedding match. If multiple payers tie for the best match, the query comes back ambiguous with all tied candidates instead of guessing.

Request Body

FieldTypeDescription
queriesarrayrequiredPayer name strings to resolve, one result returned per entry in the same order. Minimum 1, maximum 25.
lobstringRestrict candidates to payers supported on this line of business. One of: commercial, medicare. Omit to match across both.

Example Request

cURL
curl -X POST "https://api.nofone.io/payers/match" \
  -H "Authorization: Bearer nof1_live_<your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "queries": ["Premera", "Blue Cross"],
    "lob": "commercial"
  }'

Example Response 200

JSON
{
  "data": [
    {
      "query": "Premera",
      "matched": true,
      "match_type": "exact",
      "payer_key": "premera",
      "payer": {
        "display_name": "Premera",
        "is_um_vendor": false,
        "clinical": { "lines_of_business": { "Commercial": { "payer_id": "Premera" } } },
        "prior_auth": { "lines_of_business": { "Commercial": { "payer_id": "Premera", "prior_auth_display": "Premera (C)" } } }
      }
    },
    {
      "query": "Blue Cross",
      "matched": false,
      "ambiguous": true,
      "candidates": [
        {
          "match_type": "partial",
          "payer_key": "bcbsma",
          "payer": {
            "display_name": "BCBSMA",
            "is_um_vendor": false,
            "clinical": { "lines_of_business": { "Commercial": { "payer_id": "BCBSMA" } } },
            "prior_auth": null
          }
        },
        {
          "match_type": "partial",
          "payer_key": "bcbsnc",
          "payer": {
            "display_name": "BCBSNC",
            "is_um_vendor": false,
            "clinical": { "lines_of_business": { "Commercial": { "payer_id": "BCBSNC" }, "Medicare Advantage": { "payer_id": "BCBSNC-MA" } } },
            "prior_auth": { "lines_of_business": { "Commercial": { "payer_id": "BCBSNC", "prior_auth_display": "BCBSNC (C)" } } }
          }
        }
      ]
    }
  ]
}

Notes

Each result has one of three shapes: matched: true with a single payer; matched: false, ambiguous: true with a candidates array (as above); or matched: false, ambiguous: false with an empty candidates array when nothing matched at all. match_type is one of exact, partial, or semantic, reflecting which matching pass produced the result.



Get Policy

GET/v1/policies/{policy_id}Retrieve a single policy

Returns the full details of a single policy: main fields, coding (CPT/HCPCS codes and coverage), criteria (clinical services and medical-necessity logic), and drug coverage (populated when the policy governs a drug). This single endpoint replaces the former separate /criteria, /coding, and /drugs endpoints, which have been removed.

Path Parameters

ParameterTypeDescription
policy_idstringrequiredThe UUID of the policy (e.g. a3f1c29e-7b4d-4e8a-9f2c-1a2b3c4d5e6f).

Example Request

cURL
curl "https://api.nofone.io/policies/a3f1c29e-7b4d-4e8a-9f2c-1a2b3c4d5e6f" \
  -H "Authorization: Bearer nof1_live_<your_api_key>"

Example Response: Clinical Policy 200

A non-drug policy: criteria.services carries the medical-necessity logic tree per service, and drug_coverage is an empty array.

JSON
{
  "id": "a3f1c29e-7b4d-4e8a-9f2c-1a2b3c4d5e6f",
  "name": "Spinal Cord Stimulation",
  "payer": {
    "id": "pyr_premera",
    "name": "Premera Blue Cross"
  },
  "line_of_business": "commercial",
  "lines_of_business": ["commercial"],
  "effective_date": "2024-01-01",
  "last_updated": "2024-11-15",
  "url": "https://www.premera.com/medicalpolicies/8.01.004.pdf",
  "lcds_referenced": [
    {
      "id": "L37254",
      "title": "Spinal Cord Stimulation",
      "contractor": "Noridian Healthcare Solutions",
      "url": "https://www.cms.gov/medicare-coverage-database/details/lcd-details.aspx?LCDId=37254"
    }
  ],
  "is_drug_policy": false,
  "is_primarily_drug_policy": false,
  "coding": {
    "cpt_codes": [
      { "code": "63650", "description": "Percutaneous implantation of neurostimulator electrode array, epidural", "covered": true, "notes": null },
      { "code": "63655", "description": "Laminectomy for implantation of neurostimulator electrodes, plate/paddle", "covered": true, "notes": null },
      { "code": "63661", "description": "Removal of spinal neurostimulator electrode percutaneous array", "covered": true, "notes": null }
    ],
    "hcpcs_codes": [
      { "code": "E0756", "description": "Implanted spinal cord neurostimulator, pulse generator", "covered": true, "notes": null }
    ]
  },
  "criteria": {
    "services_count": 2,
    "covered_services_count": 1,
    "excluded_services_count": 1,
    "services": [
      {
        "service_name": "Spinal cord stimulation for chronic intractable pain",
        "is_medically_necessary": true,
        "med_nec_tree": {
          "node_type": "head",
          "type": "AND",
          "children": [
            {
              "node_type": "leaf",
              "condition": "Chronic intractable pain of the trunk or limbs not responsive to at least 6 months of conventional medical management"
            },
            {
              "node_type": "head",
              "type": "OR",
              "children": [
                { "node_type": "leaf", "condition": "Failed back surgery syndrome with predominant leg pain" },
                { "node_type": "leaf", "condition": "Complex regional pain syndrome (CRPS) Type I or II" }
              ]
            },
            {
              "node_type": "leaf",
              "condition": "Successful trial stimulation period of at least 3 days demonstrating at least 50% pain relief"
            }
          ]
        }
      },
      {
        "service_name": "Spinal cord stimulation for failed back surgery syndrome with predominant back pain",
        "is_medically_necessary": false,
        "med_nec_tree": null
      }
    ]
  },
  "drug_coverage": []
}

Example Response: Drug Policy 200

A drug policy: is_drug_policy is true and drug_coverage carries the per-drug utilization-management requirements.

JSON
{
  "id": "b7d2e410-93cf-4a11-8c02-5d7e9f0a1b23",
  "name": "Adalimumab (Humira and Biosimilars)",
  "payer": {
    "id": "pyr_aetna",
    "name": "Aetna"
  },
  "line_of_business": "commercial",
  "lines_of_business": ["commercial"],
  "effective_date": "2024-03-01",
  "last_updated": "2024-10-02",
  "url": "https://www.aetna.com/policies/adalimumab.pdf",
  "lcds_referenced": [],
  "is_drug_policy": true,
  "is_primarily_drug_policy": true,
  "coding": {
    "cpt_codes": [],
    "hcpcs_codes": [
      { "code": "J0135", "description": "Injection, adalimumab, 20 mg", "covered": true, "notes": null }
    ]
  },
  "criteria": {
    "services_count": 1,
    "covered_services_count": 1,
    "excluded_services_count": 0,
    "services": [
      {
        "service_name": "Adalimumab for moderate to severe rheumatoid arthritis",
        "is_medically_necessary": true,
        "med_nec_tree": {
          "node_type": "head",
          "type": "AND",
          "children": [
            { "node_type": "leaf", "condition": "Diagnosis of moderately to severely active rheumatoid arthritis" },
            { "node_type": "leaf", "condition": "Trial and failure of at least one conventional DMARD for a minimum of 3 months" }
          ]
        }
      }
    ]
  },
  "drug_coverage": [
    {
      "drug_name": "Adalimumab",
      "drug_type": "biologic",
      "brand_names": ["Humira", "Amjevita", "Hyrimoz"],
      "generic_names": ["adalimumab-atto", "adalimumab-adaz"],
      "indication": "Moderate to severe rheumatoid arthritis",
      "fda_label_ids": ["BLA125057"],
      "ndc_codes": ["00074-3799-02"],
      "drug_requirements": [
        "Diagnosis of moderately to severely active rheumatoid arthritis",
        "Prescribed by or in consultation with a rheumatologist",
        "Negative tuberculosis screening within the previous 12 months"
      ],
      "step_therapy": [
        "Trial and failure of at least one conventional DMARD (methotrexate, leflunomide, or sulfasalazine) for a minimum of 3 months"
      ],
      "preferred_alternatives": ["Amjevita", "Hyrimoz"],
      "specialty_requirements": ["Must be dispensed through a contracted specialty pharmacy"],
      "dosage_requirements": ["40 mg subcutaneously every other week; maximum 2 syringes per 28 days"]
    }
  ]
}

Notes

Each element of a drug_coverage requirement array is a separate condition that must all be met. Alternatives within a single condition ("one of the following", "either/or") are preserved inside a single array element, so a single string may itself express a choice. Policies that don't govern any drug return is_drug_policy: false and an empty drug_coverage array. Always check is_drug_policy rather than array length alone.


Prior Authorization Check

POST/v1/prior-auth/checkCheck prior auth requirements for CPT codes

Checks whether prior authorization is required for a set of CPT codes under a given payer and line of business. Returns a per-code determination along with the relevant policy and any documentation requirements. Accepts up to 10 CPT codes per request.

Request Body

FieldTypeDescription
payer_idstringrequiredThe payer to check against. Use a value from payer_ids.prior_auth.<lob> in the List Payers response, not its top-level id.
cpt_codesarrayrequiredList of CPT code strings to check. Minimum 1, maximum 10.
lobstringLine of business. One of: commercial, medicare, medicaid, or aca. Defaults to commercial.
statestringRequired when lob is medicaid, and not accepted otherwise. Medicaid prior-auth rules differ by state. Pass a US state (2-letter code or full name) for that state's answer, or all for every state at once. Each result then also carries states, all_states (true when that is every state this payer operates in, never "all 50") and, for a single state, payer_operates_in_state. A state outside the payer's footprint returns prior_auth_required: false with payer_operates_in_state: false.

Example Request

cURL
curl -X POST "https://api.nofone.io/prior-auth/check" \
  -H "Authorization: Bearer nof1_live_<your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "payer_id": "pyr_premera",
    "lob": "commercial",
    "cpt_codes": ["63650", "63685", "95972"]
  }'

Example Response 200

JSON
{
  "payer_id": "pyr_premera",
  "lob": "commercial",
  "results": [
    {
      "cpt_code": "63650",
      "description": "Percutaneous implantation of neurostimulator electrode array, epidural",
      "prior_auth_required": true,
      "policies": [
        {
          "policy_id": "a3f1c29e-7b4d-4e8a-9f2c-1a2b3c4d5e6f",
          "policy_name": "Spinal Cord Stimulation",
          "policy_url": "https://www.premera.com/medicalpolicies/8.01.004.pdf"
        }
      ]
    },
    {
      "cpt_code": "63685",
      "description": "Insertion or replacement of spinal neurostimulator pulse generator or receiver",
      "prior_auth_required": true,
      "policies": [
        {
          "policy_id": "a3f1c29e-7b4d-4e8a-9f2c-1a2b3c4d5e6f",
          "policy_name": "Spinal Cord Stimulation",
          "policy_url": "https://www.premera.com/medicalpolicies/8.01.004.pdf"
        },
        {
          "policy_id": "b7e2d38f-8c5e-4f9b-a03d-2b3c4d5e6f7a",
          "policy_name": "Implantable Neurostimulators for Pain",
          "policy_url": "https://www.premera.com/medicalpolicies/7.01.125.pdf"
        }
      ]
    },
    {
      "cpt_code": "95972",
      "description": "Electronic analysis of implanted neurostimulator pulse generator",
      "prior_auth_required": false,
      "policies": []
    }
  ]
}

Data Objects

Reference for the core object shapes returned by the API.

Policy

Field
Type
Description
id
string
Unique policy identifier (UUID v4).
name
string
Human-readable policy name.
payer
object
Payer this policy belongs to. See Payer object.
line_of_business
string
One of commercial, medicare. When you searched with a specific lob this is that value; otherwise it is the first entry of lines_of_business.
lines_of_business
array
Every line of business the policy applies to. Some payers publish one policy for both commercial and Medicare Advantage members, in which case this is ["commercial", "medicare"].
covered_states
array
Medicaid policies only. States the policy names explicitly. May be empty when all_states is true.
all_states
boolean
Medicaid policies only. True when the policy applies in every state its payer operates in.
effective_date
string
ISO 8601 date the policy became effective.
last_updated
string
ISO 8601 date the policy was last updated in the NOF1 system.
url
string
URL to the original payer policy document.
lcds_referenced
array
List of LCD reference objects this policy cites.
is_drug_policy
boolean
true if the policy governs coverage of at least one drug: a pharmacy policy, or a medical policy with a drug component.
is_primarily_drug_policy
boolean
true if drugs are the policy's primary subject, rather than one component of a broader medical or procedural policy.
coding
object
{ cpt_codes, hcpcs_codes }, each an array of CodeEntry objects.
criteria
object
{ services_count, covered_services_count, excluded_services_count, services }: services is an array of Service objects.
drug_coverage
array
Array of DrugCoverage objects, one per drug the policy governs. Empty when is_drug_policy is false.

CodeEntry

Each element of coding.cpt_codes and coding.hcpcs_codes in the Get Policy response.

Field
Type
Description
code
string
The CPT or HCPCS code.
description
string | null
Code description, when known.
covered
boolean
false if the policy explicitly excludes this code from coverage.
notes
string | null
Reserved for billing notes; currently always null.

DrugCoverage

Each element of the drug_coverage array in the Get Policy response. Every requirement array is a list of conditions that must all be satisfied; empty arrays mean the policy states no requirement of that kind.

Field
Type
Description
drug_name
string
Primary name of the drug as identified in the policy.
drug_type
string | null
Classification of the drug (e.g. biologic, small molecule, biosimilar), when the policy states one.
brand_names
array
Brand names the drug is marketed under.
generic_names
array
Generic / non-proprietary names for the drug.
indication
string | null
The condition the drug is covered for under this entry.
fda_label_ids
array
FDA application / label identifiers for the drug.
ndc_codes
array
National Drug Codes associated with the drug.
drug_requirements
array
Clinical and administrative requirements that must be met for coverage.
step_therapy
array
Therapies that must be tried and failed before this drug is covered.
preferred_alternatives
array
Drugs the payer prefers in place of this one.
specialty_requirements
array
Specialty-pharmacy, site-of-care, or prescriber restrictions.
dosage_requirements
array
Dose, frequency, and quantity limits that apply to coverage.

Payer

The payer sub-object embedded in Search Policies and Get Policy results, not the same shape as a List Payers entry (PayerListing, below).

Field
Type
Description
id
string
Payer identifier as recorded on the policy (matches payer_id).
name
string
Payer name as recorded on the policy.

PayerListing

Each element of the data array returned by List Payers.

Field
Type
Description
id
string
Stable NOF1 payer identifier (e.g. premera), matching payer_key from Match Payer to NOF1 Payer. Not the value to filter on. Use payer_ids below.
name
string
Full payer display name.
lines_of_business
array
Lines of business this payer is supported on: any of commercial, medicare.
is_um_vendor
boolean
true for utilization-management vendors rather than health plans.
payer_ids
object
{ clinical, prior_auth }, each a map of line of business (commercial | medicare) to the actual payer_id to filter on for that workflow. Use clinical for Search Policies / Get Policy, prior_auth for Prior Auth Check. A line of business may be missing if NOF1 doesn't track a payer_id for it under that workflow.

Service

Each element of criteria.services in the Get Policy response.

Field
Type
Description
service_name
string
Name of the clinical service or indication, as extracted from the policy (e.g. "Spinal cord stimulation for chronic intractable pain").
is_medically_necessary
boolean
true if the service is covered under some conditions; false if the service is explicitly excluded or considered experimental.
med_nec_tree
object | null
JSON logic tree of coverage conditions. null when is_medically_necessary is false. See CriteriaNode below.

CriteriaNode

Recursive tree node. A node is either a head (logical operator with children) or a leaf (terminal condition).

Field
Type
Description
node_type
string
head: a logic operator node with children; leaf: a terminal condition with no children.
type
string
Present on head nodes only. One of AND or OR: how the children must be satisfied.
children
array
Present on head nodes only. Array of child CriteriaNode objects.
condition
string
Present on leaf nodes only. The plain-English clinical condition that must be satisfied.