{"openapi":"3.1.0","info":{"title":"Snipget API","description":"Programmatic utility API for AI agents. Data normalization, parsing, validation, and classification. Healthcare-first, agent-native.","version":"0.1.0"},"paths":{"/pricing/tiers":{"get":{"tags":["pricing"],"summary":"List Public Tiers","description":"Return all non-enterprise tiers for the public pricing page.","operationId":"list_public_tiers_pricing_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/healthcare/npi/validate":{"post":{"tags":["healthcare"],"summary":"Validate a single NPI number","description":"Validates a National Provider Identifier (NPI) using the Luhn algorithm with the CMS 80840 prefix (per the NPI Final Rule, 45 CFR Part 162). Returns structured validity info. Accepts string or integer input; Excel-style float strings like '1234567893.0' are tolerated.","operationId":"validate_npi_healthcare_npi_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NPIValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Validate Npi Healthcare Npi Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/npi/validate/batch":{"post":{"tags":["healthcare"],"summary":"Validate a batch of NPI numbers","description":"Batch version of /npi/validate. Accepts up to 1000 NPIs. Each item is validated independently; per-item results include their own confidence and (optionally) trace. Cost is one unit per item.","operationId":"validate_npi_batch_healthcare_npi_validate_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NPIValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Validate Npi Batch Healthcare Npi Validate Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/npi/lookup":{"post":{"tags":["healthcare"],"summary":"Look up an NPI in the live NPPES registry","description":"Validates an NPI via Luhn checksum, then queries the live CMS NPPES API (https://npiregistry.cms.hhs.gov/api/) for provider details including status (Active/Deactivated), name, credentials, taxonomies, and addresses. If the Luhn check fails, the NPPES call is skipped. If NPPES is unreachable, the response includes the validation result with an nppes_error code. This is a live external call — expect 100-500ms latency.","operationId":"lookup_npi_healthcare_npi_lookup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NPILookupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Lookup Npi Healthcare Npi Lookup Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/npi/lookup/batch":{"post":{"tags":["healthcare"],"summary":"Look up a batch of NPIs in the live NPPES registry","description":"Batch version of /npi/lookup. Max 100 per batch (each is a live NPPES API call). Cost is 2 units per item.","operationId":"lookup_npi_batch_healthcare_npi_lookup_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NPILookupBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Lookup Npi Batch Healthcare Npi Lookup Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/npi/search":{"post":{"tags":["healthcare"],"summary":"Search the NPPES registry by provider attributes","description":"Search the live CMS NPPES registry by name, organization, state, city, ZIP, taxonomy/specialty, or entity type. At least one search parameter is required. Returns up to 200 matching providers with full details (status, credentials, taxonomies, addresses). enumeration_type accepts 'individual' or 'organization' as convenience aliases for NPI-1/NPI-2. This is a live external call.","operationId":"search_npi_healthcare_npi_search_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NPISearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Search Npi Healthcare Npi Search Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/dea/validate":{"post":{"tags":["healthcare"],"summary":"Validate a single federal DEA number","description":"Validates a federal DEA registration number. Format: 2 letters + 7 digits. Applies the DEA checksum algorithm. State DEA numbers are out of scope.","operationId":"validate_dea_healthcare_dea_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DEAValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Validate Dea Healthcare Dea Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/dea/validate/batch":{"post":{"tags":["healthcare"],"summary":"Validate a batch of federal DEA numbers","operationId":"validate_dea_batch_healthcare_dea_validate_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DEAValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Validate Dea Batch Healthcare Dea Validate Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/credentials/parse":{"post":{"tags":["healthcare"],"summary":"Parse a credential string into structured degrees and certifications","description":"Parses credential strings like 'MD, PhD, FACP' into matched degrees and certifications. Multi-pass strategy with fuzzy matching, hyphen/space splitting, state-code disambiguation, and license number stripping. Returns per-token type, confidence, and full name.","operationId":"credentials_parse_healthcare_credentials_parse_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialParseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Credentials Parse Healthcare Credentials Parse Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/credentials/expand":{"post":{"tags":["healthcare"],"summary":"Expand a credential abbreviation to its full name","description":"Returns the full name for a single credential abbreviation. Handles M.D. and MD equivalently, case-insensitive, with fuzzy fallback for typos.","operationId":"credentials_expand_healthcare_credentials_expand_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialExpandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Credentials Expand Healthcare Credentials Expand Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/cert-status/normalize":{"post":{"tags":["healthcare"],"summary":"Normalize a certification status to canonical lifecycle","description":"Maps raw status strings to the canonical lifecycle: active / pending / not_certified / expired / revoked / unknown.","operationId":"cert_status_normalize_healthcare_cert_status_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertStatusNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cert Status Normalize Healthcare Cert Status Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/cert-status/infer-from-dates":{"post":{"tags":["healthcare"],"summary":"Infer certification status from effective/expiration dates","operationId":"cert_status_infer_healthcare_cert_status_infer_from_dates_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertStatusInferRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cert Status Infer Healthcare Cert Status Infer From Dates Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/lookup":{"post":{"tags":["healthcare-taxonomy"],"summary":"Look up a single NUCC taxonomy code","description":"Fetch the full row for a single NUCC provider taxonomy code. Returns the code's grouping (top level), classification (middle), specialization (leaf, may be null), definition, notes, canonical display name, and provider section. Use the 'fields' parameter to restrict the response to a subset. Every response includes 'dataset' with the currently-served NUCC release info.","operationId":"taxonomy_lookup_healthcare_taxonomy_lookup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyLookupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Lookup Healthcare Taxonomy Lookup Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/lookup/batch":{"post":{"tags":["healthcare-taxonomy"],"summary":"Look up a batch of NUCC taxonomy codes","description":"Batch version of /lookup. Up to 1000 codes per request. Each result carries its own 'found' flag and confidence. The shared dataset descriptor is included once in result.dataset.","operationId":"taxonomy_lookup_batch_healthcare_taxonomy_lookup_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyLookupBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Lookup Batch Healthcare Taxonomy Lookup Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/search":{"post":{"tags":["healthcare-taxonomy"],"summary":"Search NUCC taxonomy by free text","description":"Search for taxonomy rows matching a free-text query. Three modes: 'exact' (fast, narrow — case-insensitive equality), 'fuzzy' (rapidfuzz token_set_ratio over display_name, sub-millisecond, works without the embed server), 'semantic' (vector KNN via the local embedding service, best quality). Semantic mode degrades to fuzzy when the embed server is unavailable; the response's 'mode_used' field reflects what actually ran. Returns up to 'limit' ranked candidates with per-result 'score' in [0,1].","operationId":"taxonomy_search_healthcare_taxonomy_search_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomySearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Search Healthcare Taxonomy Search Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/search/batch":{"post":{"tags":["healthcare-taxonomy"],"summary":"Batch search NUCC taxonomy","description":"Batch version of /search. Runs up to 200 queries under the same mode/limit/fields, returning one ranked candidate list per query.","operationId":"taxonomy_search_batch_healthcare_taxonomy_search_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomySearchBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Search Batch Healthcare Taxonomy Search Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/hierarchy":{"post":{"tags":["healthcare-taxonomy"],"summary":"Return the three-level hierarchy walk for a taxonomy code","description":"Given a NUCC code, return its grouping (top level), classification (middle), and specialization (leaf, may be null) as a structured hierarchy object. Useful for UI breadcrumbs and taxonomic drill-down. For children of a grouping or classification, use /list instead.","operationId":"taxonomy_hierarchy_healthcare_taxonomy_hierarchy_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyHierarchyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Hierarchy Healthcare Taxonomy Hierarchy Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/hierarchy/batch":{"post":{"tags":["healthcare-taxonomy"],"summary":"Batch hierarchy walk for multiple taxonomy codes","description":"Batch version of /hierarchy. Up to 1000 codes per request.","operationId":"taxonomy_hierarchy_batch_healthcare_taxonomy_hierarchy_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyHierarchyBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Hierarchy Batch Healthcare Taxonomy Hierarchy Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/list":{"post":{"tags":["healthcare-taxonomy"],"summary":"List active taxonomy rows under a grouping or classification","description":"Return active NUCC rows matching a grouping or classification filter (exact, case-insensitive). At least one filter is required. Use this for enumerating 'all family medicine subspecialties' or 'all physician types'. For fuzzy/semantic matching, use /search.","operationId":"taxonomy_list_healthcare_taxonomy_list_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy List Healthcare Taxonomy List Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/list/batch":{"post":{"tags":["healthcare-taxonomy"],"summary":"Batch list — multiple grouping/classification filters","description":"Batch version of /list. Runs up to 50 independent filter specs in one call; each returns its own items + count.","operationId":"taxonomy_list_batch_healthcare_taxonomy_list_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxonomyListBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy List Batch Healthcare Taxonomy List Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/healthcare/taxonomy/groupings":{"post":{"tags":["healthcare-taxonomy"],"summary":"List all NUCC taxonomy groupings","description":"Returns all distinct active NUCC groupings with the number of classifications and codes under each. Use this to discover valid values for the grouping filter on /healthcare/taxonomy/list.","operationId":"taxonomy_groupings_healthcare_taxonomy_groupings_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Taxonomy Groupings Healthcare Taxonomy Groupings Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/country-dial/lookup":{"post":{"tags":["common-bucket-b","common-country-dial"],"summary":"Look up a country's international dial prefix (or the reverse)","description":"Bidirectional: country → +prefix or +prefix → countries. Shared prefixes (+1 NANP, +44 UK/Crown Dependencies, +7 Russia/Kazakhstan) return ranked candidates with the primary country first.","operationId":"country_dial_lookup_common_country_dial_lookup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryDialRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Country Dial Lookup Common Country Dial Lookup Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/timezone/normalize":{"post":{"tags":["common-bucket-b","common-timezone"],"summary":"Normalize a timezone reference to an IANA name + current offset","description":"Accepts IANA strings ('America/New_York'), abbreviations ('EST', 'CST'), friendly labels ('Eastern Time', 'Tokyo'), or offsets ('GMT-5', '+05:30'). Returns canonical IANA name, current UTC offset (DST-aware), and is_dst_now flag. Ambiguous abbreviations pick a default with is_ambiguous=True — use /abbreviation-resolve for strict handling.","operationId":"tz_normalize_common_timezone_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TzRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Tz Normalize Common Timezone Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/timezone/abbreviation-resolve":{"post":{"tags":["common-bucket-b","common-timezone"],"summary":"Resolve a timezone abbreviation with strict ambiguity handling","description":"Strict variant of normalize for abbreviations only: returns is_valid=False + is_ambiguous=True when the abbreviation maps to multiple zones and no country_hint is given (CST, IST, BST, AST). Use when you want to prompt the user rather than silently picking.","operationId":"tz_abbreviation_resolve_common_timezone_abbreviation_resolve_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TzRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Tz Abbreviation Resolve Common Timezone Abbreviation Resolve Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/timezone/area-code":{"post":{"tags":["common-bucket-b","common-timezone"],"summary":"Map a NANP area code to its IANA timezone(s)","description":"3-digit North American area code → list of IANA zones. Returns multiple zones when the area code spans boundaries (FL panhandle 850, KY 270, TN 423, IN 812, NE 308, ND 701, SD 605, OR 541). Toll-free codes (800/888/877/866) return an empty list with is_toll_free=True.","operationId":"tz_area_code_common_timezone_area_code_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NpaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Tz Area Code Common Timezone Area Code Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/timezone/lookup-by-zip":{"post":{"tags":["common-bucket-b","common-timezone"],"summary":"Map a US ZIP code to its IANA timezone","description":"5-digit US ZIP (or ZIP+4 with or without dash) → IANA timezone + current UTC offset + DST flag. Centroid-based: each ZIP resolves to the tz polygon containing its Geonames centroid. Accepts short forms with lost leading zeros ('1001' → '01001') for ZIPs that round-trip through integer columns. Returns is_valid=False with why_invalid for unknown or malformed input.","operationId":"tz_lookup_by_zip_common_timezone_lookup_by_zip_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Tz Lookup By Zip Common Timezone Lookup By Zip Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/nicknames":{"post":{"tags":["common-bucket-b","common-name"],"summary":"Bidirectional English name ↔ nickname lookup","description":"Pass a formal name ('Robert') to get its nicknames, or a nickname ('Bob') to get formal candidates. Ambiguous nicknames ('Rick' → Richard / Eric / Patrick) return a ranked list. Used for record matching when one system stores 'Bob' and another stores 'Robert'.","operationId":"name_nicknames_common_name_nicknames_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Nicknames Common Name Nicknames Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/nicknames/related":{"post":{"tags":["common-bucket-b","common-name"],"summary":"Check whether two names plausibly refer to the same person","description":"Returns related=True when both names are the same formal, one is a known nickname of the other, or they share a formal parent name ('Liz' and 'Betty' both → Elizabeth). For de-duplication and patient-record matching.","operationId":"name_related_common_name_nicknames_related_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamePairRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Related Common Name Nicknames Related Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/payment/credit-card/classify":{"post":{"tags":["common-bucket-b","common-payment"],"summary":"Classify a credit card number by network and check Luhn","description":"Identifies the card network (Visa, Mastercard, Amex, Discover, JCB, Diners Club, UnionPay, Maestro) from BIN rules, and verifies the Luhn checksum. Accepts a full number or a prefix of ≥4 digits (prefix-only returns is_prefix_only=True). Spaces and dashes are stripped.","operationId":"credit_card_classify_common_payment_credit_card_classify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Credit Card Classify Common Payment Credit Card Classify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/email/disposable-detect":{"post":{"tags":["common-bucket-b","common-email"],"summary":"Detect disposable / throwaway / privacy-relay email addresses","description":"Checks the email's domain against a curated blocklist of disposable providers (Mailinator, Guerrilla Mail, 10MinuteMail, TempMail) and privacy relays (Apple iCloud Relay, Firefox Relay, DuckDuckGo, SimpleLogin, AnonAddy). Returns the provider and category ('throwaway' vs 'privacy_relay'). Accepts a full email or a bare domain.","operationId":"email_disposable_common_email_disposable_detect_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__bucket_b__EmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Email Disposable Common Email Disposable Detect Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/email/canonicalize":{"post":{"tags":["common-bucket-b","common-email"],"summary":"Canonicalize an email address for dedup-matching","description":"Returns the dedup-key form of an email: lowercase, plus-tag stripped (or dash-tag for Yahoo), and dots removed from the Gmail/Googlemail local part. Different from email-validate (RFC syntax) and disposable-detect (blocklist) — this answers 'what's the canonical form so I can compare two addresses for sameness?'. Aggressive by default (strips plus-addressing on unknown domains too); pass provider_rules_only=True for conservative behavior.","operationId":"email_canonicalize_endpoint_common_email_canonicalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailCanonicalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Email Canonicalize Endpoint Common Email Canonicalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/url/platform-classify":{"post":{"tags":["common-bucket-b","common-url"],"summary":"Classify a URL by social/professional platform and extract IDs","description":"Identifies Twitter/X, LinkedIn, GitHub, YouTube, Facebook, Instagram, TikTok, Reddit, Stack Overflow, Medium, Substack, Bluesky, Threads. Extracts structured IDs where the path is deterministic (tweet ID, repo owner/name, video ID, profile slug). Unknown hosts return platform=null with parsed path/host.","operationId":"url_platform_classify_common_url_platform_classify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__bucket_b__UrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Url Platform Classify Common Url Platform Classify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/address/type-classify":{"post":{"tags":["common-bucket-b","common-address"],"summary":"Classify an address by delivery type (PO box, APO, rural route, etc.)","description":"Returns flags: po_box, military_apo, military_fpo, military_dpo, rural_route, highway_contract, general_delivery, residential_hint, commercial_hint. Plus derived is_military and is_non_street_delivery. Matters for shipping — commercial carriers (UPS/FedEx) cannot deliver to APO/FPO/DPO; those must route through USPS.","operationId":"address_type_classify_common_address_type_classify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Address Type Classify Common Address Type Classify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/text/readability":{"post":{"tags":["common-bucket-b","common-text"],"summary":"Score text on five classic readability metrics","description":"Returns Flesch Reading Ease, Flesch-Kincaid Grade Level, Gunning Fog Index, SMOG, and Dale-Chall raw score, plus the raw counts (sentences, words, syllables, complex words, difficult words) so the caller can judge whether short-input metrics — notably SMOG, designed for 30-sentence samples — are meaningful. Pure algorithmic; no model calls. English-calibrated.","operationId":"text_readability_endpoint_common_text_readability_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextReadabilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Text Readability Endpoint Common Text Readability Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/nulls/classify":{"post":{"tags":["common"],"summary":"Classify a value as null / missing","description":"Detects whether a value represents 'missing' in messy real-world data: empty strings, common null markers (NA, N/A, UNK, NONE, NULL, NIL, TBD, NOT APPLICABLE, -, --, .), and Excel error strings (#VALUE!, #REF!, #N/A, #NAME?, #DIV/0!, #NULL!, #NUM!). Returns the classification reason and the matched token.","operationId":"classify_null_common_nulls_classify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NullsClassifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Classify Null Common Nulls Classify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/nulls/classify/batch":{"post":{"tags":["common"],"summary":"Classify a batch of values for nullness","operationId":"classify_null_batch_common_nulls_classify_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NullsClassifyBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Classify Null Batch Common Nulls Classify Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/state/normalize":{"post":{"tags":["common"],"summary":"Normalize a US state code or name","description":"Accepts 2-letter code (case-insensitive) or full name. Returns canonical record with USPS code, full name, ISO 3166-2 code, and jurisdiction type (state/district/territory/armed_forces_postal).","operationId":"state_normalize_common_state_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 State Normalize Common State Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/state/normalize/batch":{"post":{"tags":["common"],"summary":"Normalize a batch of US state values","operationId":"state_normalize_batch_common_state_normalize_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateNormalizeBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 State Normalize Batch Common State Normalize Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/language/normalize":{"post":{"tags":["common"],"summary":"Normalize a language to ISO 639","description":"Accepts ISO 639-1/2B/2T/3 codes, full English names, locale tags (en-US → en), and common misspellings. Returns the full ISO 639 record with all code variants.","operationId":"language_normalize_common_language_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Language Normalize Common Language Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/language/normalize/batch":{"post":{"tags":["common"],"summary":"Normalize a batch of language values","operationId":"language_normalize_batch_common_language_normalize_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageNormalizeBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Language Normalize Batch Common Language Normalize Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/parse":{"post":{"tags":["common"],"summary":"Parse a full person name into components","description":"Parses names in various formats: 'John A. Smith Jr.', 'Smith, John A.', 'Dr. John Smith III', 'John (Jake) Smith'. Handles Mc/Mac, apostrophes, hyphens, prefixes, suffixes, and parenthesized nicknames.","operationId":"name_parse_common_name_parse_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameParseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Parse Common Name Parse Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/clean":{"post":{"tags":["common"],"summary":"Clean a single person name field","operationId":"name_clean_common_name_clean_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameCleanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Clean Common Name Clean Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/format":{"post":{"tags":["common"],"summary":"Format a full name from components","operationId":"name_format_common_name_format_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameFormatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Format Common Name Format Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/name/match-key":{"post":{"tags":["common"],"summary":"Generate a normalized match key for person deduplication","description":"Returns 'FIRST|LAST' with only letters and digits, uppercase. Useful for matching people across systems.","operationId":"name_match_key_common_name_match_key_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameMatchKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Name Match Key Common Name Match Key Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/org-name/clean":{"post":{"tags":["common"],"summary":"Clean a healthcare facility / organization name","description":"Smart title case with Mc/Mac awareness, saint possessive fix, small-word lowercasing, apostrophe handling, dash normalization.","operationId":"org_name_clean_common_org_name_clean_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgNameCleanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Org Name Clean Common Org Name Clean Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/cert-board/clean":{"post":{"tags":["common"],"summary":"Clean a certification board name","operationId":"cert_board_clean_common_cert_board_clean_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertBoardCleanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cert Board Clean Common Cert Board Clean Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/address/standardize":{"post":{"tags":["common"],"summary":"Standardize a US address (CASS-style, not CASS-certified)","description":"Apply USPS abbreviations, extract secondary units, parse components, and produce a deterministic dedup key. Handles PO Box, Drawer, BIN, Rural Route, and military (APO/FPO/DPO) addresses. **NOT USPS-CASS certified** — this is a format normalizer, not an address validator. For certified validation use Smarty alongside Snipget.","operationId":"address_standardize_common_address_standardize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressStandardizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Address Standardize Common Address Standardize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-format/normalize":{"post":{"tags":["common"],"summary":"Normalize an ID / license number string","description":"NFKC unicode normalize, replace fancy dashes with ASCII, keep only A-Z/0-9/-/./separators, collapse repeated separators, trim ends, uppercase. Returns None for null markers.","operationId":"id_format_normalize_common_id_format_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdFormatNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Id Format Normalize Common Id Format Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-classify":{"post":{"tags":["common"],"summary":"Classify a string as a known ID format (SSN/EIN/NPI/UUID/etc.)","description":"Returns ranked candidates with confidence scores. Detection is format-based and does not validate checksums — use the dedicated validators (NPI, DEA) for checksum validation.","operationId":"id_classify_endpoint_common_id_classify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdClassifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Id Classify Endpoint Common Id Classify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/acronym/expand":{"post":{"tags":["common"],"summary":"Expand an acronym to its canonical full form(s)","description":"Expands an acronym like 'MD', 'LLC', 'PA' to its canonical expansion(s). When no industry hint is supplied, returns a ranked list of cross-industry candidates with per-candidate confidence scores — so 'PA' returns Physician Assistant (healthcare), Pennsylvania (general), Professional Association (general), and Public Accountant (general) with distinct confidences. Pass industry='healthcare' (or any supported industry) to bias toward a single domain. Supported industries today: healthcare, general. IT, legal, and other verticals will be added over time without changing this endpoint.","operationId":"acronym_expand_endpoint_common_acronym_expand_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymExpandRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Acronym Expand Endpoint Common Acronym Expand Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/acronym/expand/batch":{"post":{"tags":["common"],"summary":"Expand a batch of acronyms","description":"Batch variant of /common/acronym/expand. Each item gets its own ranked candidate list. Max 500 items per batch.","operationId":"acronym_expand_batch_endpoint_common_acronym_expand_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymExpandBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Acronym Expand Batch Endpoint Common Acronym Expand Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/acronym/contract":{"post":{"tags":["common"],"summary":"Contract a phrase to its canonical acronym","description":"Reverse of /common/acronym/expand. Takes a full phrase ('Doctor of Medicine') and returns the canonical acronym ('MD'). Exact match only — use /common/entity-match for fuzzy matching. Supports the same industry and category filters as expand.","operationId":"acronym_contract_endpoint_common_acronym_contract_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymContractRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Acronym Contract Endpoint Common Acronym Contract Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/acronym/contract/batch":{"post":{"tags":["common"],"summary":"Contract a batch of phrases to acronyms","description":"Batch variant of /common/acronym/contract. Max 500 items per batch.","operationId":"acronym_contract_batch_endpoint_common_acronym_contract_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymContractBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Acronym Contract Batch Endpoint Common Acronym Contract Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/acronym/catalog":{"post":{"tags":["common"],"summary":"Discover what's in the acronym catalog","description":"Returns metadata about the acronym catalog: available industries, categories within each industry, entry counts, and unique abbreviation counts. Use this to discover what the expand/contract endpoints know about before calling them. Filter by industry for a detailed breakdown of one domain.","operationId":"acronym_catalog_common_acronym_catalog_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcronymCatalogRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Acronym Catalog Common Acronym Catalog Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/phone/validate":{"post":{"tags":["common"],"summary":"Validate a phone number and return its type / region","description":"Parses a phone number and returns whether it's a valid dialable number for the given region, its E.164 normalization, ITU country code, ISO region code, and type classification (mobile, fixed_line, toll_free, voip, etc.). Backed by Google's libphonenumber. Default country hint is 'US' - pass country_hint with an ISO 3166-1 alpha-2 code (e.g. 'GB', 'CA') to parse non-US numbers that lack a leading '+'. Invalid numbers return confidence=0.0 with a reason, not an HTTP error.","operationId":"phone_validate_endpoint_common_phone_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Phone Validate Endpoint Common Phone Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/phone/validate/batch":{"post":{"tags":["common"],"summary":"Validate a batch of phone numbers","description":"Batch variant of /common/phone/validate. Max 1000 items per batch.","operationId":"phone_validate_batch_endpoint_common_phone_validate_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Phone Validate Batch Endpoint Common Phone Validate Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/phone/format":{"post":{"tags":["common"],"summary":"Format a phone number in a chosen style","description":"Formats a phone number in one of five styles: 'numeric' (digits only), 'dashed' (555-123-4567), 'parentheses' ((555) 123-4567), 'e164' (+15551234567), or 'international' (+1 555-123-4567). The first three styles honor add_country_code=true to prepend the detected country code. e164 and international always include it by definition. Parses using country_hint for ambiguous non-E.164 input.","operationId":"phone_format_endpoint_common_phone_format_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneFormatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Phone Format Endpoint Common Phone Format Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/phone/format/batch":{"post":{"tags":["common"],"summary":"Format a batch of phone numbers in a chosen style","description":"Batch variant of /common/phone/format. Max 1000 items per batch.","operationId":"phone_format_batch_endpoint_common_phone_format_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneFormatBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Phone Format Batch Endpoint Common Phone Format Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/cron/validate":{"post":{"tags":["common-cron"],"summary":"Validate a cron expression","description":"Checks whether a string is a valid cron expression. Returns is_valid, the detected dialect (5-field standard, 6-field, or 7-field Quartz), and the field count.","operationId":"cron_validate_common_cron_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__cron__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cron Validate Common Cron Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/cron/describe":{"post":{"tags":["common-cron"],"summary":"Describe a cron expression in plain English","description":"Returns a human-readable description of a cron expression, e.g. '0 9 * * 1-5' → 'At 09:00, Monday through Friday'. Useful for review UIs and for agents confirming user intent before scheduling.","operationId":"cron_describe_common_cron_describe_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DescribeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cron Describe Common Cron Describe Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/cron/next":{"post":{"tags":["common-cron"],"summary":"Enumerate the next N scheduled occurrences","description":"Given a cron expression and an optional starting datetime + IANA timezone, returns the next N scheduled occurrences. Each occurrence is reported in both local (tz-aware) and UTC forms so DST handling is explicit. Max count is 1000.","operationId":"cron_next_common_cron_next_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NextRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Cron Next Common Cron Next Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/currency/normalize":{"post":{"tags":["common-currency"],"summary":"Normalize a currency reference to its ISO 4217 code","description":"Accepts ISO codes, currency names, or symbols. For ambiguous symbols (e.g. '$' is used by USD/CAD/AUD/SGD/HKD/NZD/MXN and others), provide a country_hint to disambiguate or receive the full candidate list. USD is preferred on ambiguous '$' without a hint.","operationId":"currency_normalize_common_currency_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Currency Normalize Common Currency Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/currency/symbol-resolve":{"post":{"tags":["common-currency"],"summary":"Resolve a currency symbol with strict ambiguity handling","description":"Stricter variant of normalize for symbol-only input: returns is_valid=False + is_ambiguous=True when the symbol maps to multiple currencies and no country_hint is given. Use this when you want to prompt the caller to clarify rather than silently picking a default.","operationId":"currency_symbol_resolve_common_currency_symbol_resolve_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Currency Symbol Resolve Common Currency Symbol Resolve Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/currency/format":{"post":{"tags":["common-currency"],"summary":"Format an amount as a locale-correct currency string","description":"Returns formatted strings like '$1,234.56' (en_US), '1.234,56 €' (de_DE), or '¥1,235' (ja_JP). Respects ISO 4217 minor_units for rounding — JPY=0, KWD=3, USD=2. Negative amounts get a leading minus. Unknown locales fall back to en_US.","operationId":"currency_format_common_currency_format_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Currency Format Common Currency Format Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/currency/convert":{"post":{"tags":["common-currency"],"summary":"Convert an amount between currencies using a live rate feed","description":"Fetches the daily reference rate from the fawazahmed0/exchange-api feed (CC0 public domain, no auth, no rate limits, ~295 symbols including fiat, cryptocurrencies, and metals — XAU/XAG/XPT/XPD/BTC/ETH). Dual-CDN failover (jsdelivr → Cloudflare Pages). Redis-cached 12 hours by (from, to, date). Pass as_of_date=YYYY-MM-DD for historical rates. Fail-soft on upstream outage. Charges 2 cost_units (upstream + cache work).","operationId":"currency_convert_common_currency_convert_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Currency Convert Common Currency Convert Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/entity-match/score":{"post":{"tags":["common-entity-match"],"summary":"Score similarity between two strings","description":"Compare two strings using a configurable fuzzy matching strategy. Returns a score (0-100) and is_match flag (>=80). Inputs are case-insensitive and whitespace-trimmed.","operationId":"entity_match_score_common_entity_match_score_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Entity Match Score Common Entity Match Score Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/entity-match/score/batch":{"post":{"tags":["common-entity-match"],"summary":"Score similarity for a batch of string pairs","description":"Batch version of entity match score. Each item is a [a, b] pair.","operationId":"entity_match_score_batch_common_entity_match_score_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Entity Match Score Batch Common Entity Match Score Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/entity-match/best-match":{"post":{"tags":["common-entity-match"],"summary":"Find best matches for a query in a candidate list","description":"Finds the top matches for a query string within a list of candidates. Returns ranked matches with scores. Useful for entity resolution: 'which of these known entities does this input most likely refer to?' Billing: 1 cost unit per query per started block of 1,000 candidates (e.g. 1 query x 300 candidates = 1 unit; 1 query x 2,500 candidates = 3 units). The response's meta.cost_units shows the exact charge.","operationId":"entity_match_best_match_common_entity_match_best_match_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BestMatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Entity Match Best Match Common Entity Match Best Match Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/entity-match/best-match/batch":{"post":{"tags":["common-entity-match"],"summary":"Find best matches for multiple queries against a shared candidate list","description":"Batch version of best-match. Each query is matched against the same candidate list. Useful for bulk entity resolution. Billing: 1 cost unit per query per started block of 1,000 candidates (e.g. 1 query x 300 candidates = 1 unit; 1 query x 2,500 candidates = 3 units). The response's meta.cost_units shows the exact charge.","operationId":"entity_match_best_match_batch_common_entity_match_best_match_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BestMatchBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Entity Match Best Match Batch Common Entity Match Best Match Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/entity-match/deduplicate":{"post":{"tags":["common-entity-match"],"summary":"Find duplicate clusters in a list of strings","description":"Cluster a list of strings by fuzzy similarity. Returns groups of likely duplicates with scores. Useful for data cleaning: 'which of these entity names are probably the same thing?'","operationId":"entity_match_deduplicate_common_entity_match_deduplicate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeduplicateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Entity Match Deduplicate Common Entity Match Deduplicate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/format-validate/email":{"post":{"tags":["common-format-validate"],"summary":"Validate an email address (RFC 5322, no MX check)","description":"Syntax-only email validation using the email-validator library. Does not contact DNS (no MX lookup) — deterministic and fast. Returns the normalized form, local_part, domain, and the IDNA ascii_domain for international domains. Returns is_valid=False with a why_invalid message on bad input rather than raising.","operationId":"format_validate_email_common_format_validate_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__format_validate__EmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Format Validate Email Common Format Validate Email Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/format-validate/url":{"post":{"tags":["common-format-validate"],"summary":"Validate a URL's syntax (RFC 3986) with optional scheme allowlist","description":"Parses a URL and returns its structured components (scheme, userinfo, host, port, path, query, fragment). Does NOT fetch the URL. An optional allowed_schemes list enforces a whitelist (e.g. ['https']). Set require_authority=False to accept relative URLs.","operationId":"format_validate_url_common_format_validate_url_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__format_validate__UrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Format Validate Url Common Format Validate Url Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/luhn":{"post":{"tags":["common-id-validate"],"summary":"Validate Luhn mod-10 checksum (credit cards, IMEI, etc.)","description":"Generic Luhn algorithm validator. Strips spaces and dashes before checking. Works on credit card numbers, IMEI codes, and any Luhn-protected identifier. Returns is_valid, normalized digit-only form, and the digit length.","operationId":"_single_route_common_id_validate_luhn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Luhn Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/luhn/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate Luhn mod-10 checksum (credit cards, IMEI, etc.) (batch)","description":"Generic Luhn algorithm validator. Strips spaces and dashes before checking. Works on credit card numbers, IMEI codes, and any Luhn-protected identifier. Returns is_valid, normalized digit-only form, and the digit length. Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_luhn_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Luhn Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/iban":{"post":{"tags":["common-id-validate"],"summary":"Validate IBAN (ISO 13616) with mod-97 checksum","description":"Validates an International Bank Account Number: country-specific length + allowed characters + mod-97 checksum. Accepts spaces (banks print in 4-char groups). Returns country, check digits, BBAN, and a pretty-grouped form.","operationId":"_single_route_common_id_validate_iban_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Iban Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/iban/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate IBAN (ISO 13616) with mod-97 checksum (batch)","description":"Validates an International Bank Account Number: country-specific length + allowed characters + mod-97 checksum. Accepts spaces (banks print in 4-char groups). Returns country, check digits, BBAN, and a pretty-grouped form. Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_iban_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Iban Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/vin":{"post":{"tags":["common-id-validate"],"summary":"Validate VIN (ISO 3779) with position-9 check digit","description":"Validates a 17-character Vehicle Identification Number: allowed character set (I, O, Q forbidden) + weighted mod-11 check digit at position 9. Returns WMI (manufacturer), VDS, VIS, year code, and candidate model years. Non-NA VINs sometimes use '0' in position 9 as a placeholder, which still passes the math.","operationId":"_single_route_common_id_validate_vin_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Vin Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/vin/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate VIN (ISO 3779) with position-9 check digit (batch)","description":"Validates a 17-character Vehicle Identification Number: allowed character set (I, O, Q forbidden) + weighted mod-11 check digit at position 9. Returns WMI (manufacturer), VDS, VIS, year code, and candidate model years. Non-NA VINs sometimes use '0' in position 9 as a placeholder, which still passes the math. Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_vin_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Vin Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/isbn":{"post":{"tags":["common-id-validate"],"summary":"Validate ISBN-10 or ISBN-13 (auto-detected)","description":"Validates an ISBN. Auto-detects ISBN-10 (mod-11, terminal X=10) vs ISBN-13 (mod-10 EAN-13). Hyphens and spaces are stripped. Returns both ISBN-10 and ISBN-13 forms when convertible (978-prefix only).","operationId":"_single_route_common_id_validate_isbn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Isbn Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/isbn/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate ISBN-10 or ISBN-13 (auto-detected) (batch)","description":"Validates an ISBN. Auto-detects ISBN-10 (mod-11, terminal X=10) vs ISBN-13 (mod-10 EAN-13). Hyphens and spaces are stripped. Returns both ISBN-10 and ISBN-13 forms when convertible (978-prefix only). Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_isbn_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Isbn Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/cusip":{"post":{"tags":["common-id-validate"],"summary":"Validate CUSIP (9-char financial security identifier)","description":"Validates a 9-character CUSIP: character set (0-9, A-Z plus *, @, #) and the custom alternating-weight mod-10 check digit. Returns issuer (positions 1-6), issue (7-8), and check digit (9).","operationId":"_single_route_common_id_validate_cusip_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Cusip Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/cusip/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate CUSIP (9-char financial security identifier) (batch)","description":"Validates a 9-character CUSIP: character set (0-9, A-Z plus *, @, #) and the custom alternating-weight mod-10 check digit. Returns issuer (positions 1-6), issue (7-8), and check digit (9). Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_cusip_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Cusip Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/issn":{"post":{"tags":["common-id-validate"],"summary":"Validate ISSN (8-char serial number) with mod-11 check","description":"Validates an International Standard Serial Number: 7 digits + a check digit (0-9 or X=10). Input may omit the hyphen. Returns the canonical hyphenated form.","operationId":"_single_route_common_id_validate_issn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Issn Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/issn/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate ISSN (8-char serial number) with mod-11 check (batch)","description":"Validates an International Standard Serial Number: 7 digits + a check digit (0-9 or X=10). Input may omit the hyphen. Returns the canonical hyphenated form. Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_issn_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Issn Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/upc":{"post":{"tags":["common-id-validate"],"summary":"Validate UPC-A, EAN-13, EAN-8, or GTIN-14 check digit","description":"Validates any GS1 retail barcode: UPC-A (12), EAN-13 (13), EAN-8 (8), or GTIN-14 (14). Uses the shared alternating-weight mod-10 algorithm. Returns the form label, length, check digit, and the code left-padded to GTIN-14 for uniform storage.","operationId":"_single_route_common_id_validate_upc_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Upc Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/upc/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate UPC-A, EAN-13, EAN-8, or GTIN-14 check digit (batch)","description":"Validates any GS1 retail barcode: UPC-A (12), EAN-13 (13), EAN-8 (8), or GTIN-14 (14). Uses the shared alternating-weight mod-10 algorithm. Returns the form label, length, check digit, and the code left-padded to GTIN-14 for uniform storage. Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_upc_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Upc Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/aba-routing":{"post":{"tags":["common-id-validate"],"summary":"Validate ABA/ACH routing number (9 digits, weighted mod-10)","description":"Validates a US bank routing number: 9 digits + weighted-sum mod-10 checksum (weights 3,7,1). Also returns the Federal Reserve district derived from the first two digits (01-12 Fed, 21-32 thrift, etc.).","operationId":"_single_route_common_id_validate_aba_routing_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Single Route Common Id Validate Aba Routing Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/aba-routing/batch":{"post":{"tags":["common-id-validate"],"summary":"Validate ABA/ACH routing number (9 digits, weighted mod-10) (batch)","description":"Validates a US bank routing number: 9 digits + weighted-sum mod-10 checksum (weights 3,7,1). Also returns the Federal Reserve district derived from the first two digits (01-12 Fed, 21-32 thrift, etc.). Batch version accepts a list of values.","operationId":"_batch_route_common_id_validate_aba_routing_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429  Batch Route Common Id Validate Aba Routing Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/uuid":{"post":{"tags":["common-id-validate"],"summary":"Parse and normalize a UUID, detect version and variant","description":"Normalizes a UUID and detects its RFC 4122 version (1-8) and variant. Accepts hyphenated canonical, {braced}, urn:uuid: prefix, or raw 32-hex. Returns every common rendering (canonical, compact, braced, urn) plus is_nil / is_max flags.","operationId":"id_validate_uuid_common_id_validate_uuid_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/snipget__api__routers__id_validate__ValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Id Validate Uuid Common Id Validate Uuid Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/id-validate/uuid/batch":{"post":{"tags":["common-id-validate"],"summary":"Parse and normalize a UUID (batch)","description":"Batch version of the UUID parser.","operationId":"id_validate_uuid_batch_common_id_validate_uuid_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Id Validate Uuid Batch Common Id Validate Uuid Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/validate":{"post":{"tags":["common-jurisdiction"],"summary":"Validate a jurisdiction code or name","description":"Check whether a value is a recognized jurisdiction. Returns is_valid (bool), type, and matched_by. Use normalize or lookup for the full canonical record. Accepts codes (case-insensitive) or full names. Filter by type and/or parent_code to disambiguate collisions (e.g. CA = California vs Canada).","operationId":"jurisdiction_validate_common_jurisdiction_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Validate Common Jurisdiction Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/validate/batch":{"post":{"tags":["common-jurisdiction"],"summary":"Validate a batch of jurisdiction values","description":"Batch version of jurisdiction validate. Up to 1000 values per call.","operationId":"jurisdiction_validate_batch_common_jurisdiction_validate_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionValidateBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Validate Batch Common Jurisdiction Validate Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/normalize":{"post":{"tags":["common-jurisdiction"],"summary":"Normalize a jurisdiction code or name","description":"Accepts a jurisdiction code (case-insensitive) or full name and returns the canonical record with code, name, iso_code, type, parent_code, and matched_by. Filter by type and/or parent_code to disambiguate collisions.","operationId":"jurisdiction_normalize_common_jurisdiction_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Normalize Common Jurisdiction Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/normalize/batch":{"post":{"tags":["common-jurisdiction"],"summary":"Normalize a batch of jurisdiction values","description":"Batch version of jurisdiction normalize. Up to 1000 values per call.","operationId":"jurisdiction_normalize_batch_common_jurisdiction_normalize_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionNormalizeBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Normalize Batch Common Jurisdiction Normalize Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/lookup":{"post":{"tags":["common-jurisdiction"],"summary":"Look up a jurisdiction by code","description":"Look up a jurisdiction by its code. Returns the full canonical record. When the code is ambiguous (e.g. CA = California + Canada), supply type and/or parent_code to disambiguate.","operationId":"jurisdiction_lookup_common_jurisdiction_lookup_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionLookupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Lookup Common Jurisdiction Lookup Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/lookup/batch":{"post":{"tags":["common-jurisdiction"],"summary":"Look up a batch of jurisdiction codes","description":"Batch version of jurisdiction lookup. Up to 1000 codes per call.","operationId":"jurisdiction_lookup_batch_common_jurisdiction_lookup_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionLookupBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Lookup Batch Common Jurisdiction Lookup Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/list":{"post":{"tags":["common-jurisdiction"],"summary":"List all jurisdictions of a given type","description":"Return all jurisdictions of a given type (country, state, territory, district, armed_forces_postal). Items are sorted by code.","operationId":"jurisdiction_list_common_jurisdiction_list_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction List Common Jurisdiction List Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/list/batch":{"post":{"tags":["common-jurisdiction"],"summary":"List jurisdictions for multiple types","description":"Batch version of jurisdiction list. Returns items grouped by type.","operationId":"jurisdiction_list_batch_common_jurisdiction_list_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionListBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction List Batch Common Jurisdiction List Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/children":{"post":{"tags":["common-jurisdiction"],"summary":"List child jurisdictions of a parent","description":"Return all jurisdictions whose parent_code matches the given value. E.g. parent_code='US' returns all 59 US states, territories, DC, and armed-forces postal codes.","operationId":"jurisdiction_children_common_jurisdiction_children_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionChildrenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Children Common Jurisdiction Children Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/jurisdiction/children/batch":{"post":{"tags":["common-jurisdiction"],"summary":"List children for multiple parent jurisdictions","description":"Batch version of jurisdiction children. Up to 100 parent codes per call.","operationId":"jurisdiction_children_batch_common_jurisdiction_children_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JurisdictionChildrenBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Jurisdiction Children Batch Common Jurisdiction Children Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/file-size/normalize":{"post":{"tags":["common-math"],"summary":"Normalize a file size between bytes and human form","description":"Parses a human string ('2.5 GB', '2500 MB', '2.5 MiB') or raw byte count to a canonical payload: bytes, human (caller-chosen base), and both SI (base 1000) and binary (base 1024) renderings. Handles the common GB-vs-GiB confusion explicitly.","operationId":"math_file_size_common_math_file_size_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileSizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math File Size Common Math File Size Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/percent/of-total":{"post":{"tags":["common-math"],"summary":"Compute part / total as a percentage","description":"Returns the fraction, a formatted display string ('12.50%'), and the raw inputs. Rejects total=0 with a clear error.","operationId":"math_pct_of_total_common_math_percent_of_total_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PctOfTotalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math Pct Of Total Common Math Percent Of Total Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/percent/change":{"post":{"tags":["common-math"],"summary":"Compute the percent change from old to new","description":"Returns (new - old) / old as a fraction, display string, and raw inputs.","operationId":"math_pct_change_common_math_percent_change_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PctChangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math Pct Change Common Math Percent Change Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/percent/difference":{"post":{"tags":["common-math"],"summary":"Compute the symmetric percent difference between two values","description":"|a - b| / ((|a| + |b|) / 2). Order-independent. Useful when comparing two measurements without a 'base' value.","operationId":"math_pct_difference_common_math_percent_difference_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PctDifferenceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math Pct Difference Common Math Percent Difference Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/markup-vs-margin":{"post":{"tags":["common-math"],"summary":"Compute markup and margin from cost and price","description":"Markup = (price - cost) / cost. Margin = (price - cost) / price. These two percentages are commonly confused — this endpoint returns both plus the raw profit so callers can use the correct one.","operationId":"math_markup_margin_common_math_markup_vs_margin_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkupMarginRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math Markup Margin Common Math Markup Vs Margin Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/math/stats/summary":{"post":{"tags":["common-math"],"summary":"Summary statistics for a list of numbers","description":"Returns n, sum, mean, median, mode (+ full modes list), variance, stdev, min, max, range, configurable percentiles (default 25/50/75), and IQR. Mode is the first value when multimodal; `modes` lists all. Percentiles use linear interpolation (matches NumPy default).","operationId":"math_stats_summary_common_math_stats_summary_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Math Stats Summary Common Math Stats Summary Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/parse":{"post":{"tags":["common-semver"],"summary":"Parse a SemVer 2.0.0 string into its components","description":"Returns major/minor/patch integers, pre-release identifier list (numeric identifiers as ints, alphanumeric as strings), build metadata list, and the canonical string. Leading 'v' is tolerated. Invalid strings return is_valid=False with a reason.","operationId":"semver_parse_common_semver_parse_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Parse Common Semver Parse Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/parse/batch":{"post":{"tags":["common-semver"],"summary":"Parse multiple SemVer strings (batch)","description":"Batch version of /common/semver/parse.","operationId":"semver_parse_batch_common_semver_parse_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Parse Batch Common Semver Parse Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/validate":{"post":{"tags":["common-semver"],"summary":"Check whether a string is a valid SemVer 2.0.0 version","description":"Lightweight validator: returns is_valid + canonical form without the full component breakdown. Use /parse when you need the pieces.","operationId":"semver_validate_common_semver_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Validate Common Semver Validate Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/compare":{"post":{"tags":["common-semver"],"summary":"Compare two SemVer versions (lt / eq / gt)","description":"Returns order='lt'|'eq'|'gt' using full SemVer precedence rules: major/minor/patch compared numerically, pre-release compared identifier-by-identifier (numeric < alphanumeric, more identifiers wins). Build metadata is ignored per the spec.","operationId":"semver_compare_common_semver_compare_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Compare Common Semver Compare Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/satisfies":{"post":{"tags":["common-semver"],"summary":"Check whether a version satisfies a range expression","description":"Evaluates npm-style range expressions: ^, ~, <, <=, >, >=, =, !=, hyphen (`a - b`), `*`/`x`/`X` wildcards, space/comma-joined AND clauses, and `||` OR. Pre-release versions follow the npm rule: a pre-release only satisfies a range if some comparator in the clause targets the same major.minor.patch with its own pre-release.","operationId":"semver_satisfies_common_semver_satisfies_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SatisfiesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Satisfies Common Semver Satisfies Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/common/semver/satisfies/batch":{"post":{"tags":["common-semver"],"summary":"Check multiple versions against a shared range (batch)","description":"Batch version of /common/semver/satisfies — one range, many versions.","operationId":"semver_satisfies_batch_common_semver_satisfies_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SatisfiesBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Semver Satisfies Batch Common Semver Satisfies Batch Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/case/convert":{"post":{"tags":["tiny"],"summary":"Convert text between case conventions","description":"Convert text between snake_case, camelCase, PascalCase, kebab-case, and SCREAMING_SNAKE_CASE. Handles mixed input with underscores, dashes, whitespace, and case transitions.","operationId":"case_convert_tiny_case_convert_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseConvertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Case Convert Tiny Case Convert Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/whitespace/normalize":{"post":{"tags":["tiny"],"summary":"Collapse whitespace and strip control characters","operationId":"whitespace_normalize_tiny_whitespace_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitespaceNormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Whitespace Normalize Tiny Whitespace Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/slug/slugify":{"post":{"tags":["tiny"],"summary":"Generate a URL-safe slug","description":"ASCII-folds unicode (café → cafe), lowercases (optionally), replaces non-alphanumeric runs with a separator, trims ends, and optionally truncates to a max length.","operationId":"slugify_endpoint_tiny_slug_slugify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlugifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Slugify Endpoint Tiny Slug Slugify Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/unicode/fold":{"post":{"tags":["tiny"],"summary":"Strip unicode diacritics","description":"ASCII-fold a string by decomposing unicode (NFKD) and dropping combining marks. 'café' → 'cafe'. Non-foldable characters are preserved.","operationId":"unicode_fold_endpoint_tiny_unicode_fold_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnicodeFoldRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Unicode Fold Endpoint Tiny Unicode Fold Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/parse/integer":{"post":{"tags":["tiny"],"summary":"Parse an integer from messy input","description":"Handles Excel float strings ('1,234.0' → 1234), thousand separators, whitespace, and boolean coercion. Returns None result.parsed when input cannot be parsed.","operationId":"parse_integer_endpoint_tiny_parse_integer_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseLooseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Parse Integer Endpoint Tiny Parse Integer Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/parse/float":{"post":{"tags":["tiny"],"summary":"Parse a float from messy input","operationId":"parse_float_endpoint_tiny_parse_float_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseLooseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Parse Float Endpoint Tiny Parse Float Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/parse/boolean":{"post":{"tags":["tiny"],"summary":"Parse a boolean from messy input","description":"Accepts yes/no, y/n, true/false, 1/0, on/off, enabled/disabled, and any numeric value (nonzero → True, zero → False).","operationId":"parse_boolean_endpoint_tiny_parse_boolean_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseLooseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Parse Boolean Endpoint Tiny Parse Boolean Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/redact/email":{"post":{"tags":["tiny"],"summary":"Mask an email for safe display","operationId":"redact_email_endpoint_tiny_redact_email_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedactEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Redact Email Endpoint Tiny Redact Email Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/redact/phone":{"post":{"tags":["tiny"],"summary":"Mask a phone number, keeping the last N digits","operationId":"redact_phone_endpoint_tiny_redact_phone_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedactPhoneRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Redact Phone Endpoint Tiny Redact Phone Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/redact/credit-card":{"post":{"tags":["tiny"],"summary":"Mask a credit card number, keeping the last N digits","operationId":"redact_credit_card_endpoint_tiny_redact_credit_card_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedactCreditCardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Redact Credit Card Endpoint Tiny Redact Credit Card Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/redact/ssn":{"post":{"tags":["tiny"],"summary":"Mask a US SSN, keeping the last 4 digits","operationId":"redact_ssn_endpoint_tiny_redact_ssn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedactSSNRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Redact Ssn Endpoint Tiny Redact Ssn Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/redact/generic":{"post":{"tags":["tiny"],"summary":"Mask a value, keeping N characters on each end","operationId":"redact_generic_endpoint_tiny_redact_generic_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedactGenericRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Redact Generic Endpoint Tiny Redact Generic Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/checksum":{"post":{"tags":["tiny"],"summary":"Compute a hex digest of a string using a common hash or checksum","description":"Supports MD5, SHA-256, SHA-512 (hashlib) and Adler-32, CRC-32 (zlib). For cache keys, content-addressed lookups, and data integrity. Not for password hashing — use a dedicated KDF.","operationId":"checksum_endpoint_tiny_checksum_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecksumRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Checksum Endpoint Tiny Checksum Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/typographic/normalize":{"post":{"tags":["tiny"],"summary":"Convert smart typographic characters to ASCII equivalents","description":"Replaces curly quotes, em/en dashes, ellipsis, non-breaking and other exotic spaces with ASCII equivalents. Removes zero-width characters and byte-order marks. Useful before feeding text to downstream parsers that assume plain ASCII.","operationId":"typographic_endpoint_tiny_typographic_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TypographicRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Typographic Endpoint Tiny Typographic Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/html/strip":{"post":{"tags":["tiny"],"summary":"Strip HTML tags and decode entities, returning plaintext","description":"Decodes HTML entities (&amp;, &lt;, &#x27;) and removes tags. Script/style/noscript bodies are dropped entirely. Block-level tags (p, div, li, h1-h6) add a space so words don't concatenate. Useful before feeding HTML-bearing text to downstream parsers.","operationId":"html_strip_endpoint_tiny_html_strip_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HtmlStripRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Html Strip Endpoint Tiny Html Strip Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/markdown/to-text":{"post":{"tags":["tiny"],"summary":"Convert Markdown to plain text","description":"Strips Markdown syntax: headings, bold/italic/strikethrough, inline code, fenced code blocks (optional preserve), links (keep anchor text), images (keep alt), lists (→ '- '), blockquote markers, horizontal rules. For readability scoring, PII detection, and downstream parsers that expect plaintext.","operationId":"markdown_to_text_endpoint_tiny_markdown_to_text_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkdownRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Markdown To Text Endpoint Tiny Markdown To Text Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/tiny/emoji/normalize":{"post":{"tags":["tiny"],"summary":"Remove, replace, or describe emoji in text","description":"Three strategies: 'remove' drops emoji silently, 'replace' substitutes a configurable placeholder, 'describe' annotates each emoji with its codepoint inline. Returns emoji_found — list of {char, codepoint, position} — for auditing. Handles ZWJ-joined sequences (👨‍👩‍👧) as single clusters.","operationId":"emoji_normalize_endpoint_tiny_emoji_normalize_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmojiRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Input was syntactically valid but semantically unusable (`INVALID_INPUT`). Not retryable without changing the input.","content":{"application/json":{"examples":{"invalid_input":{"summary":"INVALID_INPUT","value":{"status":"error","error_code":"INVALID_INPUT","message":"Field 'npi' must be a 10-digit number.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or unrecognized API key. Send it as `Authorization: Bearer <key>` or `X-API-Key: <key>`. Keys are issued at https://snipget.ai.","content":{"application/json":{"examples":{"missing_api_key":{"summary":"MISSING_API_KEY","value":{"status":"error","error_code":"MISSING_API_KEY","message":"Missing API key. Provide via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"invalid_api_key":{"summary":"INVALID_API_KEY","value":{"status":"error","error_code":"INVALID_API_KEY","message":"API key not recognized.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The key is valid but this caller may not use it: the request IP is outside the key's allowlist (`IP_NOT_ALLOWED`) or the account is deactivated (`ACCOUNT_DEACTIVATED`).","content":{"application/json":{"examples":{"ip_not_allowed":{"summary":"IP_NOT_ALLOWED","value":{"status":"error","error_code":"IP_NOT_ALLOWED","message":"Request IP is not on this key's allowlist.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}},"account_deactivated":{"summary":"ACCOUNT_DEACTIVATED","value":{"status":"error","error_code":"ACCOUNT_DEACTIVATED","message":"This account has been deactivated.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"}}}},"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body failed schema validation (`INVALID_REQUEST`). `details` lists the per-field errors. Not retryable without changing the request.","content":{"application/json":{"examples":{"invalid_request":{"summary":"INVALID_REQUEST","value":{"status":"error","error_code":"INVALID_REQUEST","message":"Request validation failed.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"details":[{"loc":["body","npi"],"msg":"Field required","type":"missing"}]}}},"schema":{"$ref":"#/components/schemas/ValidationErrorResponse"}}}},"429":{"description":"Two distinct conditions share this status — branch on `error_code`. **`RATE_LIMITED`** is a per-second throughput throttle: retry after `retry_after_seconds` (the precise float; the `Retry-After` header is the same value rounded up). **`QUOTA_EXCEEDED`** is monthly capacity and is NOT retryable: recovery depends on `limit_type` — upgrade (`monthly_quota`), buy an overage allowance (`included_exhausted`), or top up (`overage_balance_exhausted`).","headers":{"Retry-After":{"description":"Present on RATE_LIMITED only — seconds to wait, rounded up.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"rate_limited":{"summary":"RATE_LIMITED","value":{"status":"error","error_code":"RATE_LIMITED","message":"Sustained request rate exceeded for tier 'starter'.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":0.42,"limit_type":"sustained_rps","limit_value":25,"current_tier":"starter","upgrade_url":"https://snipget.ai/pricing"}},"quota_exceeded":{"summary":"QUOTA_EXCEEDED","value":{"status":"error","error_code":"QUOTA_EXCEEDED","message":"You've used your 25000 included calls this month on tier 'starter'. Purchase an overage allowance to continue, or wait for the monthly reset.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"limit_type":"included_exhausted","limit_value":25000,"current_tier":"starter","quota_reset":1782864000}}},"schema":{"anyOf":[{"$ref":"#/components/schemas/RateLimitErrorResponse"},{"$ref":"#/components/schemas/QuotaExceededErrorResponse"}],"title":"Response 429 Emoji Normalize Endpoint Tiny Emoji Normalize Post"}}}},"503":{"description":"The utility surface is in an admin-toggled maintenance window (`MAINTENANCE_MODE`). Retry after `retry_after_seconds`; auth, portal, and webhook surfaces stay up.","headers":{"Retry-After":{"description":"Seconds until the suggested retry.","schema":{"type":"integer"}}},"content":{"application/json":{"examples":{"maintenance":{"summary":"MAINTENANCE_MODE","value":{"status":"error","error_code":"MAINTENANCE_MODE","message":"API is temporarily under maintenance. Try again in a few minutes.","meta":{"version":"0.1.0","cost_units":0,"request_id":"req_3f9c2b81d4e6a570"},"retry_after_seconds":300}}},"schema":{"$ref":"#/components/schemas/MaintenanceErrorResponse"}}}}}}},"/system/maintenance-status":{"get":{"tags":["system"],"summary":"Maintenance Status","description":"Public, unauthenticated read of every maintenance toggle + schedule.\n\nThe Next.js Web tier polls this on every navigation to decide\nwhether to render the marketing/portal pages or the maintenance\npage; the per-page countdown banner reads ``scheduled_at`` to drive\nits client-side timer. Exempt from the API maintenance gate so the\noperational signal stays reachable even during a full API outage —\notherwise the Web tier would lose visibility into its own\nmaintenance state.\n\nShape::\n\n    {\n      \"api\": {\"mode\": \"off\"|\"full\", \"scheduled_at\": \"2026-05-08T...\"|null},\n      \"mcp\": {\"mode\": \"off\"|\"full\", \"scheduled_at\": \"...\"|null},\n      \"web\": {\"mode\": \"off\"|\"full\", \"scheduled_at\": \"...\"|null}\n    }\n\n``mode`` is the EFFECTIVE mode (stored + schedule combined) so\nnaive readers can drive their gate from one field.\n``scheduled_at`` is the raw schedule timestamp (UTC) for the banner\ncountdown.","operationId":"maintenance_status_system_maintenance_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Maintenance Status System Maintenance Status Get"}}}}}}},"/health":{"get":{"tags":["system"],"summary":"Health","description":"Shallow health check — returns version and status. Unauthenticated.\n\nSafe to poll frequently (e.g. from a load balancer). Does NOT touch\nPostgres or Redis. For a deep check use /health/deep.","operationId":"health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Get"}}}}}}},"/health/deep":{"get":{"tags":["system"],"summary":"Health Deep","description":"Deep health check — verifies Postgres + Redis connectivity.\n\nReturns `status: ok` if both backends respond, `status: degraded` if\nany backend is unreachable (with a 200 response code — monitoring\nsystems can parse the body). Unauthenticated.\n\nIntended for liveness probes, NOT frequent polling — it actually\ncontacts the backends.","operationId":"health_deep_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Deep Get"}}}}}}},"/":{"get":{"tags":["system"],"summary":"Root","description":"Root endpoint — canonical envelope example. Unauthenticated.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}}},"components":{"schemas":{"AcronymCatalogRequest":{"properties":{"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry","description":"Filter to a specific industry (e.g. 'healthcare', 'it', 'legal'). Omit for a summary of all industries."}},"type":"object","title":"AcronymCatalogRequest"},"AcronymContractBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Items"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","default":10},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"AcronymContractBatchRequest"},"AcronymContractRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Full phrase to contract (e.g. 'Doctor of Medicine')."},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","default":10},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"AcronymContractRequest"},"AcronymExpandBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":500,"minItems":1,"title":"Items"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories"},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","default":10},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"AcronymExpandBatchRequest"},"AcronymExpandRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Acronym to expand (e.g. 'MD', 'PA', 'LLC')."},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry","description":"Optional industry filter — currently 'healthcare' or 'general'. Omit to get cross-industry candidates ranked by confidence."},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Categories","description":"Optional category filter (e.g. ['degree', 'certification', 'credential', 'org_suffix']). Restricts results to the given categories within the selected industry."},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","default":10},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"AcronymExpandRequest"},"AddressRequest":{"properties":{"address":{"type":"string","title":"Address"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["address"],"title":"AddressRequest"},"AddressStandardizeRequest":{"properties":{"line_1":{"type":"string","title":"Line 1","description":"Primary address line.","default":""},"line_2":{"type":"string","title":"Line 2","description":"Secondary address line (unit, etc.).","default":""},"postal_code":{"type":"string","title":"Postal Code","description":"ZIP code (5-digit, 9-digit, or ZIP+4).","default":""},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","title":"AddressStandardizeRequest"},"BestMatchBatchRequest":{"properties":{"queries":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Queries","description":"List of query strings."},"candidates":{"items":{"type":"string"},"type":"array","maxItems":10000,"minItems":1,"title":"Candidates","description":"Shared candidate list to match each query against."},"strategy":{"type":"string","title":"Strategy","description":"Similarity strategy: ratio (character-level), partial_ratio (best substring), token_sort_ratio (ignores word order), token_set_ratio (ignores order + duplicates, default).","default":"token_set_ratio"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":5},"score_cutoff":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score Cutoff","default":0.5},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["queries","candidates"],"title":"BestMatchBatchRequest"},"BestMatchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"The string to find matches for."},"candidates":{"items":{"type":"string"},"type":"array","maxItems":10000,"minItems":1,"title":"Candidates","description":"List of candidate strings to match against."},"strategy":{"type":"string","title":"Strategy","description":"Similarity strategy: ratio (character-level), partial_ratio (best substring), token_sort_ratio (ignores word order), token_set_ratio (ignores order + duplicates, default).","default":"token_set_ratio"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Max results to return.","default":5},"score_cutoff":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Score Cutoff","description":"Minimum score threshold (0.0–1.0).","default":0.5},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["query","candidates"],"title":"BestMatchRequest"},"CardRequest":{"properties":{"value":{"type":"string","title":"Value"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"CardRequest"},"CaseConvertRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text to convert."},"target":{"type":"string","title":"Target","description":"Target case: snake, camel, pascal, kebab, screaming_snake."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text","target"],"title":"CaseConvertRequest"},"CertBoardCleanRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Certification board name to clean."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["name"],"title":"CertBoardCleanRequest"},"CertStatusInferRequest":{"properties":{"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date","description":"ISO or MM/DD/YYYY date."},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date","description":"ISO or MM/DD/YYYY date."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","title":"CertStatusInferRequest"},"CertStatusNormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Raw certification status string."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"CertStatusNormalizeRequest"},"ChecksumRequest":{"properties":{"text":{"type":"string","title":"Text","description":"String to hash."},"algorithm":{"type":"string","title":"Algorithm","description":"One of: md5, sha256, sha512, adler32, crc32. Hyphens tolerated.","default":"sha256"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"ChecksumRequest"},"CompareRequest":{"properties":{"a":{"type":"string","title":"A","description":"Left operand."},"b":{"type":"string","title":"B","description":"Right operand."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["a","b"],"title":"CompareRequest"},"ConvertRequest":{"properties":{"amount":{"type":"number","title":"Amount"},"from_currency":{"type":"string","title":"From Currency","description":"ISO 4217 source code."},"to_currency":{"type":"string","title":"To Currency","description":"ISO 4217 target code."},"as_of_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of Date","description":"ISO YYYY-MM-DD for a historical rate. Omit for latest."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["amount","from_currency","to_currency"],"title":"ConvertRequest"},"CountryDialRequest":{"properties":{"value":{"type":"string","title":"Value","description":"ISO2, ISO3, country name, or +dial prefix."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"CountryDialRequest"},"CredentialExpandRequest":{"properties":{"abbreviation":{"type":"string","title":"Abbreviation","description":"Single credential abbreviation to expand."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["abbreviation"],"title":"CredentialExpandRequest"},"CredentialParseRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Credential string, e.g. 'MD, PhD, FACP'."},"enable_fuzzy":{"type":"boolean","title":"Enable Fuzzy","description":"Enable fuzzy matching for close misses.","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"CredentialParseRequest"},"DEAValidateBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"DEAValidateBatchRequest"},"DEAValidateRequest":{"properties":{"dea":{"type":"string","title":"Dea","description":"Federal DEA number to validate."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["dea"],"title":"DEAValidateRequest"},"DeduplicateRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":10000,"minItems":1,"title":"Items","description":"List of strings to deduplicate."},"strategy":{"type":"string","title":"Strategy","description":"Similarity strategy: ratio (character-level), partial_ratio (best substring), token_sort_ratio (ignores word order), token_set_ratio (ignores order + duplicates, default).","default":"token_set_ratio"},"threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Threshold","description":"Similarity threshold for clustering (0.0–1.0).","default":0.85},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"DeduplicateRequest"},"DescribeRequest":{"properties":{"expression":{"type":"string","title":"Expression"},"locale":{"type":"string","title":"Locale","description":"Description locale code, e.g. 'en', 'de', 'fr'.","default":"en"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["expression"],"title":"DescribeRequest"},"EmailCanonicalizeRequest":{"properties":{"email":{"type":"string","title":"Email","description":"Email address to canonicalize."},"provider_rules_only":{"type":"boolean","title":"Provider Rules Only","description":"When True, only apply canonicalization rules to known providers (Gmail, Outlook, iCloud, Yahoo, FastMail, ProtonMail). Unknown domains get lowercased only — conservative mode to avoid false-positive dedup merges across distinct mailboxes.","default":false},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["email"],"title":"EmailCanonicalizeRequest"},"EmojiRequest":{"properties":{"text":{"type":"string","title":"Text"},"strategy":{"type":"string","title":"Strategy","description":"'remove', 'replace', or 'describe'.","default":"remove"},"replacement":{"type":"string","title":"Replacement","description":"Used when strategy='replace'.","default":" "},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"EmojiRequest"},"ErrorMeta":{"properties":{"version":{"type":"string","title":"Version","default":"0.1.0"},"cost_units":{"type":"integer","title":"Cost Units","default":0},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"provider_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Request Id"},"rate_limit_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Remaining"},"rate_limit_reset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Reset"},"quota_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Remaining"},"quota_reset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Reset"},"credit_remaining_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credit Remaining Usd"}},"additionalProperties":true,"type":"object","title":"ErrorMeta","description":"Metadata attached to every error response."},"ErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"error_code":{"type":"string","title":"Error Code"},"message":{"type":"string","title":"Message"},"meta":{"$ref":"#/components/schemas/ErrorMeta"}},"type":"object","required":["error_code","message"],"title":"ErrorResponse","description":"Canonical error envelope."},"FileSizeRequest":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}],"title":"Value","description":"File size as a human string ('2.5 GB') or raw byte count."},"base":{"type":"integer","title":"Base","description":"1000 (SI) or 1024 (binary) for the `human` output.","default":1000},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"FileSizeRequest"},"FormatRequest":{"properties":{"amount":{"type":"number","title":"Amount"},"currency_code":{"type":"string","title":"Currency Code","description":"ISO 4217 code."},"locale":{"type":"string","title":"Locale","description":"Locale like en_US, de_DE, ja_JP.","default":"en_US"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["amount","currency_code"],"title":"FormatRequest"},"HtmlStripRequest":{"properties":{"text":{"type":"string","title":"Text","description":"HTML-bearing text."},"preserve_br_as_newline":{"type":"boolean","title":"Preserve Br As Newline","description":"Convert <br> to '\n' before stripping.","default":false},"collapse_whitespace":{"type":"boolean","title":"Collapse Whitespace","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"HtmlStripRequest"},"IdClassifyRequest":{"properties":{"value":{"type":"string","title":"Value","description":"String to classify by format."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"IdClassifyRequest"},"IdFormatNormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"ID string to normalize (license number, etc.)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"IdFormatNormalizeRequest"},"JurisdictionChildrenBatchRequest":{"properties":{"parent_codes":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Parent Codes","description":"List of parent codes to get children for."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["parent_codes"],"title":"JurisdictionChildrenBatchRequest"},"JurisdictionChildrenRequest":{"properties":{"parent_code":{"type":"string","title":"Parent Code","description":"Parent jurisdiction code (e.g. 'US' to get all US children)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["parent_code"],"title":"JurisdictionChildrenRequest"},"JurisdictionListBatchRequest":{"properties":{"types":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Types","description":"List of jurisdiction types to list."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["types"],"title":"JurisdictionListBatchRequest"},"JurisdictionListRequest":{"properties":{"type":{"type":"string","title":"Type","description":"Jurisdiction type to list. Valid values: country, state, territory, district, armed_forces_postal."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["type"],"title":"JurisdictionListRequest"},"JurisdictionLookupBatchRequest":{"properties":{"codes":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Codes","description":"List of jurisdiction codes to look up."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["codes"],"title":"JurisdictionLookupBatchRequest"},"JurisdictionLookupRequest":{"properties":{"code":{"type":"string","title":"Code","description":"Jurisdiction code to look up (e.g. 'US', 'CA', 'GB')."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["code"],"title":"JurisdictionLookupRequest"},"JurisdictionNormalizeBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of jurisdiction codes or names to normalize."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"JurisdictionNormalizeBatchRequest"},"JurisdictionNormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Jurisdiction code or full name to normalize to a canonical record."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"JurisdictionNormalizeRequest"},"JurisdictionValidateBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of jurisdiction codes or names to validate."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"JurisdictionValidateBatchRequest"},"JurisdictionValidateRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Jurisdiction code or full name to validate."},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by jurisdiction type. Valid values: country, state, territory, district, armed_forces_postal. When omitted, all types are searched and the best match is returned (US-scoped types preferred when ambiguous)."},"parent_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Code","description":"Filter by parent code (e.g. 'US' to restrict to US states/territories/DC). Case-insensitive."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"JurisdictionValidateRequest"},"LanguageNormalizeBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"LanguageNormalizeBatchRequest"},"LanguageNormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Language code, ISO name, or locale tag."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"LanguageNormalizeRequest"},"MaintenanceErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"error_code":{"type":"string","title":"Error Code","default":"MAINTENANCE_MODE"},"message":{"type":"string","title":"Message"},"meta":{"$ref":"#/components/schemas/ErrorMeta"},"retry_after_seconds":{"type":"number","title":"Retry After Seconds"}},"type":"object","required":["message","retry_after_seconds"],"title":"MaintenanceErrorResponse","description":"503 envelope — the utility surface is in an admin-toggled\nmaintenance window. Retry after ``retry_after_seconds`` (also sent\nas the ``Retry-After`` header)."},"MarkdownRequest":{"properties":{"text":{"type":"string","title":"Text"},"uppercase_headings":{"type":"boolean","title":"Uppercase Headings","default":true},"preserve_code_blocks":{"type":"boolean","title":"Preserve Code Blocks","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"MarkdownRequest"},"MarkupMarginRequest":{"properties":{"cost":{"type":"number","title":"Cost"},"price":{"type":"number","title":"Price"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["cost","price"],"title":"MarkupMarginRequest"},"NPILookupBatchRequest":{"properties":{"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","maxItems":100,"minItems":1,"title":"Items","description":"List of NPI values to look up (max 100 — each is a live API call)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"NPILookupBatchRequest"},"NPILookupRequest":{"properties":{"npi":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Npi","description":"NPI value to look up in the NPPES registry."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["npi"],"title":"NPILookupRequest"},"NPISearchRequest":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name","description":"Provider first name (individual)."},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name","description":"Provider last name (individual)."},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name","description":"Organization name (NPI-2)."},"enumeration_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Enumeration Type","description":"Entity type filter: 'individual' (NPI-1) or 'organization' (NPI-2). Also accepts raw NPPES values 'NPI-1' / 'NPI-2'."},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State","description":"2-letter US state code."},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City name."},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"ZIP code (5 or 9 digit)."},"taxonomy_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taxonomy Description","description":"Specialty/taxonomy text search (e.g. 'family medicine')."},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","description":"Max results (1-200).","default":10},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","title":"NPISearchRequest"},"NPIValidateBatchRequest":{"properties":{"items":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of NPI values to validate (max 1000 per batch)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"NPIValidateBatchRequest"},"NPIValidateRequest":{"properties":{"npi":{"anyOf":[{"type":"string"},{"type":"integer"}],"title":"Npi","description":"NPI value to validate. Accepts string or integer."},"include_trace":{"type":"boolean","title":"Include Trace","description":"Include reasoning trace in meta.trace.","default":false}},"type":"object","required":["npi"],"title":"NPIValidateRequest"},"NameCleanRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Single name field to clean."}},"type":"object","required":["name"],"title":"NameCleanRequest"},"NameFormatRequest":{"properties":{"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"middle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Middle"},"last":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last"},"prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prefix"},"suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suffix"}},"type":"object","title":"NameFormatRequest"},"NameMatchKeyRequest":{"properties":{"first":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First"},"last":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last"}},"type":"object","title":"NameMatchKeyRequest"},"NamePairRequest":{"properties":{"a":{"type":"string","title":"A"},"b":{"type":"string","title":"B"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["a","b"],"title":"NamePairRequest"},"NameParseRequest":{"properties":{"full_name":{"type":"string","title":"Full Name","description":"Full name to parse."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["full_name"],"title":"NameParseRequest"},"NameRequest":{"properties":{"name":{"type":"string","title":"Name"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["name"],"title":"NameRequest"},"NextRequest":{"properties":{"expression":{"type":"string","title":"Expression"},"count":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Count","description":"How many future occurrences to return.","default":5},"from_datetime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Datetime","description":"ISO 8601 datetime to start iteration from. If omitted, uses now in the specified timezone. Naive datetimes are interpreted in `tz`."},"tz":{"type":"string","title":"Tz","description":"IANA timezone name, e.g. 'America/New_York'.","default":"UTC"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["expression"],"title":"NextRequest"},"NormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Currency code, name, or symbol to normalize."},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint","description":"ISO 3166-1 alpha-2 country code to disambiguate shared symbols."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"NormalizeRequest"},"NpaRequest":{"properties":{"area_code":{"type":"string","title":"Area Code"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["area_code"],"title":"NpaRequest"},"NullsClassifyBatchRequest":{"properties":{"items":{"items":{},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of values to classify (max 1000 per batch)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"NullsClassifyBatchRequest"},"NullsClassifyRequest":{"properties":{"value":{"title":"Value","description":"Value to classify. Accepts any JSON type."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"NullsClassifyRequest"},"OrgNameCleanRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Organization/facility name to clean."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["name"],"title":"OrgNameCleanRequest"},"ParseBatchRequest":{"properties":{"versions":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Versions"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["versions"],"title":"ParseBatchRequest"},"ParseLooseRequest":{"properties":{"value":{"title":"Value","description":"Value to parse. Accepts any JSON type."}},"type":"object","required":["value"],"title":"ParseLooseRequest"},"ParseRequest":{"properties":{"version":{"type":"string","title":"Version","description":"SemVer 2.0.0 string (leading 'v' tolerated)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["version"],"title":"ParseRequest"},"PctChangeRequest":{"properties":{"old":{"type":"number","title":"Old"},"new":{"type":"number","title":"New"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["old","new"],"title":"PctChangeRequest"},"PctDifferenceRequest":{"properties":{"a":{"type":"number","title":"A"},"b":{"type":"number","title":"B"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["a","b"],"title":"PctDifferenceRequest"},"PctOfTotalRequest":{"properties":{"part":{"type":"number","title":"Part"},"total":{"type":"number","title":"Total"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["part","total"],"title":"PctOfTotalRequest"},"PhoneFormatBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"},"style":{"type":"string","title":"Style","default":"parentheses"},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint","default":"US"},"add_country_code":{"type":"boolean","title":"Add Country Code","default":false},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"PhoneFormatBatchRequest"},"PhoneFormatRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Phone number to format."},"style":{"type":"string","title":"Style","description":"Output style: 'numeric' (digits only), 'dashed' (555-123-4567), 'parentheses' ((555) 123-4567), 'e164' (+15551234567), or 'international' (+1 555-123-4567).","default":"parentheses"},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint","default":"US"},"add_country_code":{"type":"boolean","title":"Add Country Code","description":"When true, prepend the country code to the formatted number for the numeric/dashed/parentheses styles. The e164 and international styles always include the country code.","default":false},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"PhoneFormatRequest"},"PhoneValidateBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint","default":"US"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"PhoneValidateBatchRequest"},"PhoneValidateRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Phone number to validate."},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint","description":"ISO 3166-1 alpha-2 country code used to parse the number when it lacks a leading '+' (e.g. 'US', 'GB', 'CA', 'AU'). Default 'US'. Ignored for numbers already in E.164 format.","default":"US"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"PhoneValidateRequest"},"QuotaExceededErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"error_code":{"type":"string","title":"Error Code","default":"QUOTA_EXCEEDED"},"message":{"type":"string","title":"Message"},"meta":{"$ref":"#/components/schemas/ErrorMeta"},"limit_type":{"type":"string","title":"Limit Type"},"limit_value":{"type":"integer","title":"Limit Value"},"current_tier":{"type":"string","title":"Current Tier"},"quota_reset":{"type":"integer","title":"Quota Reset"}},"type":"object","required":["message","limit_type","limit_value","current_tier","quota_reset"],"title":"QuotaExceededErrorResponse","description":"429 QUOTA_EXCEEDED envelope — monthly capacity exhausted.\n\nNOT retryable (unlike RATE_LIMITED): it doesn't lift until the next\nUTC calendar month, a tier upgrade, or an allowance purchase.\n``limit_type`` tells agents which recovery applies: ``monthly_quota``\n(Free hard cap — upgrade), ``included_exhausted`` (buy an overage\nallowance), ``overage_balance_exhausted`` (top up the allowance)."},"RateLimitErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"error_code":{"type":"string","title":"Error Code","default":"RATE_LIMITED"},"message":{"type":"string","title":"Message"},"meta":{"$ref":"#/components/schemas/ErrorMeta"},"retry_after_seconds":{"type":"number","title":"Retry After Seconds"},"limit_type":{"type":"string","title":"Limit Type"},"limit_value":{"type":"integer","title":"Limit Value"},"current_tier":{"type":"string","title":"Current Tier"},"upgrade_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Url"}},"type":"object","required":["message","retry_after_seconds","limit_type","limit_value","current_tier"],"title":"RateLimitErrorResponse","description":"429 error envelope with agent-friendly retry hints."},"RedactCreditCardRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Credit card number to redact."},"keep_last":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"Keep Last","default":4}},"type":"object","required":["value"],"title":"RedactCreditCardRequest"},"RedactEmailRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Email to redact."},"keep_prefix":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Keep Prefix","default":1}},"type":"object","required":["value"],"title":"RedactEmailRequest"},"RedactGenericRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Value to redact."},"keep_start":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Keep Start","default":2},"keep_end":{"type":"integer","maximum":20.0,"minimum":0.0,"title":"Keep End","default":2}},"type":"object","required":["value"],"title":"RedactGenericRequest"},"RedactPhoneRequest":{"properties":{"value":{"type":"string","title":"Value","description":"Phone number to redact."},"keep_last":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"Keep Last","default":4}},"type":"object","required":["value"],"title":"RedactPhoneRequest"},"RedactSSNRequest":{"properties":{"value":{"type":"string","title":"Value","description":"SSN to redact."}},"type":"object","required":["value"],"title":"RedactSSNRequest"},"ResponseMeta":{"properties":{"version":{"type":"string","title":"Version","default":"0.1.0"},"elapsed_ms":{"type":"integer","title":"Elapsed Ms","default":0},"cost_units":{"type":"integer","title":"Cost Units","default":1},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"trace":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Trace"},"rate_limit_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Remaining"},"rate_limit_reset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Reset"},"quota_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Remaining"},"quota_reset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Quota Reset"},"credit_remaining_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credit Remaining Usd"}},"additionalProperties":true,"type":"object","title":"ResponseMeta","description":"Metadata attached to every successful response."},"SatisfiesBatchRequest":{"properties":{"versions":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Versions"},"range":{"type":"string","title":"Range"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["versions","range"],"title":"SatisfiesBatchRequest"},"SatisfiesRequest":{"properties":{"version":{"type":"string","title":"Version","description":"Version to test."},"range":{"type":"string","title":"Range","description":"npm-style range expression. Supports ^, ~, <, <=, >, >=, =, !=, hyphen (a - b), wildcards (x, X, *), space/comma-joined AND clauses, and `||` OR."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["version","range"],"title":"SatisfiesRequest"},"ScoreBatchRequest":{"properties":{"pairs":{"items":{"items":{"type":"string"},"type":"array"},"type":"array","maxItems":1000,"minItems":1,"title":"Pairs","description":"List of [a, b] string pairs to score."},"strategy":{"type":"string","title":"Strategy","description":"Similarity strategy: ratio (character-level), partial_ratio (best substring), token_sort_ratio (ignores word order), token_set_ratio (ignores order + duplicates, default).","default":"token_set_ratio"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["pairs"],"title":"ScoreBatchRequest"},"ScoreRequest":{"properties":{"a":{"type":"string","title":"A","description":"First string to compare."},"b":{"type":"string","title":"B","description":"Second string to compare."},"strategy":{"type":"string","title":"Strategy","description":"Similarity strategy: ratio (character-level), partial_ratio (best substring), token_sort_ratio (ignores word order), token_set_ratio (ignores order + duplicates, default).","default":"token_set_ratio"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["a","b"],"title":"ScoreRequest"},"SlugifyRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text to slugify."},"separator":{"type":"string","maxLength":3,"title":"Separator","default":"-"},"max_length":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Max Length"},"lowercase":{"type":"boolean","title":"Lowercase","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"SlugifyRequest"},"StateNormalizeBatchRequest":{"properties":{"items":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Items"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["items"],"title":"StateNormalizeBatchRequest"},"StateNormalizeRequest":{"properties":{"value":{"type":"string","title":"Value","description":"US state code or full name."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"StateNormalizeRequest"},"StatsRequest":{"properties":{"values":{"items":{"type":"number"},"type":"array","maxItems":100000,"minItems":1,"title":"Values"},"percentiles":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Percentiles","description":"Percentiles to report, 0-100. Defaults to [25, 50, 75]."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["values"],"title":"StatsRequest"},"SuccessResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence"},"result":{"title":"Result"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["confidence","result"],"title":"SuccessResponse","description":"Canonical success envelope."},"SymbolRequest":{"properties":{"symbol":{"type":"string","title":"Symbol","description":"Currency symbol (e.g. '$', '€')."},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["symbol"],"title":"SymbolRequest"},"TaxonomyHierarchyBatchRequest":{"properties":{"codes":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Codes"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["codes"],"title":"TaxonomyHierarchyBatchRequest"},"TaxonomyHierarchyRequest":{"properties":{"code":{"type":"string","title":"Code","description":"NUCC provider taxonomy code."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["code"],"title":"TaxonomyHierarchyRequest"},"TaxonomyListBatchRequest":{"properties":{"filters":{"items":{"$ref":"#/components/schemas/TaxonomyListRequest"},"type":"array","maxItems":50,"minItems":1,"title":"Filters"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["filters"],"title":"TaxonomyListBatchRequest"},"TaxonomyListRequest":{"properties":{"grouping":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grouping","description":"Exact grouping name to list children of."},"classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification","description":"Exact classification name to list children of."},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Optional list of fields to return per row. Defaults to all. Valid fields: code, grouping, classification, specialization, definition, notes, display_name, section. The 'code' field is always returned."},"limit":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Limit","default":500},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","title":"TaxonomyListRequest"},"TaxonomyLookupBatchRequest":{"properties":{"codes":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Codes"},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Optional list of fields to return per row. Defaults to all. Valid fields: code, grouping, classification, specialization, definition, notes, display_name, section. The 'code' field is always returned."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["codes"],"title":"TaxonomyLookupBatchRequest"},"TaxonomyLookupRequest":{"properties":{"code":{"type":"string","title":"Code","description":"NUCC provider taxonomy code (e.g. '207Q00000X')."},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Optional list of fields to return per row. Defaults to all. Valid fields: code, grouping, classification, specialization, definition, notes, display_name, section. The 'code' field is always returned."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["code"],"title":"TaxonomyLookupRequest"},"TaxonomySearchBatchRequest":{"properties":{"queries":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Queries"},"mode":{"type":"string","title":"Mode","default":"semantic"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":10},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["queries"],"title":"TaxonomySearchBatchRequest"},"TaxonomySearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Free-text query, e.g. 'family medicine'."},"mode":{"type":"string","title":"Mode","description":"Search mode: 'exact' (case-insensitive equality on display_name or code), 'fuzzy' (rapidfuzz over display_name), or 'semantic' (vector KNN via the embedding service). Semantic mode falls back to fuzzy when the embed server is unavailable.","default":"semantic"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":10},"fields":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Optional list of fields to return per row. Defaults to all. Valid fields: code, grouping, classification, specialization, definition, notes, display_name, section. The 'code' field is always returned."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["query"],"title":"TaxonomySearchRequest"},"TextReadabilityRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text body to score."},"include_grade_label":{"type":"boolean","title":"Include Grade Label","description":"When True, include a recommended_audience label derived from Flesch RE.","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"TextReadabilityRequest"},"TypographicRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text to normalize."},"em_dash_to_double_hyphen":{"type":"boolean","title":"Em Dash To Double Hyphen","description":"Map em/horizontal-bar dashes to '--' instead of a single '-'.","default":false},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"TypographicRequest"},"TzRequest":{"properties":{"value":{"type":"string","title":"Value"},"country_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Hint"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"TzRequest"},"UnicodeFoldRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text to ASCII-fold."}},"type":"object","required":["text"],"title":"UnicodeFoldRequest"},"ValidateBatchRequest":{"properties":{"values":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Values","description":"List of identifier strings to validate."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["values"],"title":"ValidateBatchRequest"},"ValidationErrorResponse":{"properties":{"status":{"type":"string","title":"Status","default":"error"},"error_code":{"type":"string","title":"Error Code","default":"INVALID_REQUEST"},"message":{"type":"string","title":"Message"},"meta":{"$ref":"#/components/schemas/ErrorMeta"},"details":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Details","default":[]}},"type":"object","required":["message"],"title":"ValidationErrorResponse","description":"422 envelope — the request body failed schema validation.\n\nThe global validation handler re-shapes FastAPI's default\n``HTTPValidationError`` into the canonical envelope; ``details``\ncarries the per-field Pydantic errors (``loc``/``msg``/``type``)."},"WhitespaceNormalizeRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Text to normalize."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["text"],"title":"WhitespaceNormalizeRequest"},"ZipRequest":{"properties":{"zip":{"type":"string","title":"Zip","description":"5-digit US ZIP or ZIP+4 (e.g. '12345' or '12345-6789')."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["zip"],"title":"ZipRequest"},"snipget__api__routers__bucket_b__EmailRequest":{"properties":{"email":{"type":"string","title":"Email"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["email"],"title":"EmailRequest"},"snipget__api__routers__bucket_b__UrlRequest":{"properties":{"url":{"type":"string","title":"Url"},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["url"],"title":"UrlRequest"},"snipget__api__routers__cron__ValidateRequest":{"properties":{"expression":{"type":"string","title":"Expression","description":"Cron expression (5, 6, or 7 fields)."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["expression"],"title":"ValidateRequest"},"snipget__api__routers__format_validate__EmailRequest":{"properties":{"email":{"type":"string","title":"Email","description":"Email address to validate."},"allow_smtputf8":{"type":"boolean","title":"Allow Smtputf8","description":"Allow international characters in local part.","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["email"],"title":"EmailRequest"},"snipget__api__routers__format_validate__UrlRequest":{"properties":{"url":{"type":"string","title":"Url","description":"URL to validate."},"allowed_schemes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Schemes","description":"Optional scheme allowlist. Example: ['https'] to accept https-only."},"require_authority":{"type":"boolean","title":"Require Authority","description":"When True, reject schemeless or relative URLs.","default":true},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["url"],"title":"UrlRequest"},"snipget__api__routers__id_validate__ValidateRequest":{"properties":{"value":{"type":"string","title":"Value","description":"The identifier string to validate."},"include_trace":{"type":"boolean","title":"Include Trace","default":false}},"type":"object","required":["value"],"title":"ValidateRequest"}}}}