{
  "openapi": "3.0.1",
  "info": {
    "title": "NPPES NPI Registry Scraper (US Providers)",
    "description": "US health care providers from the official CMS NPPES NPI Registry API: NPI, taxonomy, licence, practice address, phone, fax and authorized official.",
    "version": "0.1",
    "x-build-id": "VWpYTFewFrs1fA1ka"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/knotty_mistveil~nppes-npi-registry/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-knotty_mistveil-nppes-npi-registry",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/knotty_mistveil~nppes-npi-registry/runs": {
      "post": {
        "operationId": "runs-sync-knotty_mistveil-nppes-npi-registry",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/knotty_mistveil~nppes-npi-registry/run-sync": {
      "post": {
        "operationId": "run-sync-knotty_mistveil-nppes-npi-registry",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "taxonomies": {
            "title": "Taxonomies (specialties)",
            "type": "array",
            "description": "Healthcare Provider Taxonomy descriptions, matched as the registry stores them: a classification such as Dentist, Pharmacy, Chiropractor, Optometrist or Physician Assistant, or a full description such as \"Dentist, General Practice\" or \"Internal Medicine, Cardiovascular Disease\". A trailing * is a prefix search and needs at least two characters before it (Nurse*). Every entry is queried separately and the results are merged and de-duplicated. An unknown description stops the run with the API's own message.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "Two-letter state codes (CA, NY, TX), territories (PR, GU, VI, AS, MP), military codes (AA, AE, AP) or the codes NPPES puts on foreign addresses (XX, ZZ). Every entry is queried separately. A state cannot be the only filter - the API rejects it - and an unknown code silently returns nothing there, so this Actor validates the code before the first request.",
            "items": {
              "type": "string"
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "City names as NPPES stores them, usually upper case (SAN DIEGO). A trailing * is a prefix search and needs at least two characters (SAN*). Enter APO or FPO for military addresses. Every entry is queried separately.",
            "items": {
              "type": "string"
            }
          },
          "postalCodes": {
            "title": "ZIP / postal codes",
            "type": "array",
            "description": "A full 5-digit ZIP (90210, which also matches the stored ZIP+4), a full ZIP+4, or a prefix of at least two digits (902 or 902*) to cover a whole area. Every entry is queried separately.",
            "items": {
              "type": "string"
            }
          },
          "enumerationType": {
            "title": "NPI type",
            "enum": [
              "both",
              "NPI-1",
              "NPI-2"
            ],
            "type": "string",
            "description": "NPI-1 is an individual provider (a person), NPI-2 an organization (a practice, clinic, pharmacy or hospital). \"Both\" returns each type in the same dataset. Picking one type also doubles how deep a single query can go, because the API's 1,200-record ceiling then applies to that type alone.",
            "default": "both"
          },
          "addressPurpose": {
            "title": "Which address the location filters match",
            "enum": [
              "LOCATION",
              "ANY",
              "MAILING",
              "PRIMARY",
              "SECONDARY"
            ],
            "type": "string",
            "description": "LOCATION matches any practice location, MAILING the mailing address, PRIMARY the primary practice location only, SECONDARY the secondary ones. ANY is the API's own default and matches the mailing address as well - which is how a provider whose surgery is in Arizona turns up in a California search (2 of 50 sampled records on 8 September 2026). Leave it on LOCATION unless you specifically want mailing addresses.",
            "default": "LOCATION"
          },
          "organizationName": {
            "title": "Organization name",
            "type": "string",
            "description": "Legal business name of a Type 2 provider. A trailing * is a prefix search and needs at least two characters (Kaiser*). NPPES also searches the \"doing business as\" and former names, so a result may show a different organization name from the one you typed."
          },
          "lastName": {
            "title": "Provider last name",
            "type": "string",
            "description": "Last name of a Type 1 individual provider. A trailing * is a prefix search and needs at least two characters (Smith*)."
          },
          "firstName": {
            "title": "Provider first name",
            "type": "string",
            "description": "First name of a Type 1 individual provider. A trailing * is a prefix search and needs at least two characters. NPPES also matches common aliases (Robert for Bob)."
          },
          "npiNumbers": {
            "title": "NPI numbers (direct lookup)",
            "type": "array",
            "description": "Ten-digit NPI numbers to look up one by one, one request and one record each. When this is set the search filters above are ignored, because the API rejects a number query combined with any other criterion. The date filters below still apply.",
            "items": {
              "type": "string"
            }
          },
          "enumeratedFrom": {
            "title": "Enumerated from",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Keep only providers whose NPI was issued on or after this date, YYYY-MM-DD. The Read API has no date parameter at all, so this filter is applied to records after they are fetched: it lowers the yield of a run, not its request count."
          },
          "enumeratedTo": {
            "title": "Enumerated to",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Keep only providers whose NPI was issued on or before this date, YYYY-MM-DD. Applied after fetching, like Enumerated from."
          },
          "updatedWithinDays": {
            "title": "Updated within days",
            "minimum": 1,
            "maximum": 36500,
            "type": "integer",
            "description": "Keep only providers whose record was last updated in the past N days. Applied after fetching, like the enumeration dates. Leave empty for no last-updated filter."
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 500000,
            "type": "integer",
            "description": "Stop after this many providers. You are charged per provider delivered, so this is also the cost cap. Measured on 8 September 2026: every dentist practising in Wyoming is 615 records, in Rhode Island 1,068, in California 52,265 (which took 746 requests and 8 minutes, because the Actor had to partition its way past the API's 1,200-record ceiling).",
            "default": 500
          },
          "maxRequests": {
            "title": "Max API requests",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Safety budget on calls to the NPI Registry, which also bounds the run time (the Actor makes at most 5 calls a second). One call returns up to 200 providers, and splitting a query that overflows the API's 1,200-record ceiling costs up to 100 probe calls per level. Raise it for a nationwide download.",
            "default": 1000
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}