StateIQ APIv1.0

Introduction

The StateIQ API provides programmatic access to NEMSIS state configuration data, schematron validation rules, and XML validation services. Use our API to validate ePCR records against state-specific requirements, query state configuration details, and search across all 51 US states.

Base URL: https://stateiq.amsler.io/api/v1

Authentication

All API requests require an API key passed in the x-api-key header.

x-api-key: siq_live_your_key_here

API keys are managed through the StateIQ Settings page. Keys have the following scopes:

states:readQuery state data, agencies, facilities, elements
search:readSearch across all states
validate:writeSubmit XML records for validation

Rate Limits

Rate limit headers are included on every response:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1712134800

Default limit is 1,000 requests per hour per API key. Contact us to increase limits for your organization.

Errors

The API uses conventional HTTP response codes to indicate success or failure.

400Bad RequestInvalid parameters
401UnauthorizedMissing or invalid API key
403ForbiddenValid key but insufficient scope
429Too Many RequestsRate limit exceeded (1000/hour default)
500Internal ErrorServer error
503Service UnavailableValidation service offline

Error Response Format

{
  "error": "Missing required scope: validate:write",
  "code": 403
}

Health Check

GET/api/v1/health

Returns the current status of the API. This endpoint does not require authentication.

Parameters

No parameters required.

Code Example

curl https://stateiq.amsler.io/api/v1/health

Response

{
  "status": "ok",
  "version": "1.0",
  "service": "StateIQ API",
  "timestamp": "2026-04-03T12:00:00.000Z"
}

List States

GET/api/v1/states

Returns summary data for all 51 US states including agency counts, facility counts, surveillance scores and vendor information.

Parameters

No parameters required.

Code Example

curl https://stateiq.amsler.io/api/v1/states \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": [
    {
      "state_code": "06",
      "state_name": "California",
      "software_vendor": "ImageTrend, Inc.",
      "software_name": "Elite",
      "effective_date": "2026-03-03",
      "required_elements": 229,
      "custom_elements": 0,
      "agency_count": 1088,
      "facility_count": 10507,
      "surveillance_score": 0
    },
    ...
  ],
  "count": 51
}

Get State

GET/api/v1/states/{code}

Returns detailed information for a specific state including summary data and surveillance flags.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation (e.g., CA, PA, TX) or FIPS code (e.g., 06, 42, 48)

Code Example

curl https://stateiq.amsler.io/api/v1/states/CA \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": {
    "state_code": "06",
    "state_name": "California",
    "software_vendor": "ImageTrend, Inc.",
    "software_name": "Elite",
    "effective_date": "2026-03-03",
    "required_elements": 229,
    "custom_elements": 0,
    "agency_count": 1088,
    "facility_count": 10507,
    "surveillance_score": 0,
    "surveillance": {
      "opioid": false,
      "naloxone": false,
      "trauma": false,
      "homeless": false
    },
    "hrsa": {
      "pc_hpsa_count": 374,
      "pc_hpsa_avg_score": 17.80,
      "mh_hpsa_count": 312,
      "mh_hpsa_avg_score": 16.90
    }
  }
}

State Agencies

GET/api/v1/states/{code}/agencies

Returns the list of EMS agencies registered in a state.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation or FIPS code
limitqueryoptionalMaximum number of results (default: 100, max: 1000)

Code Example

curl "https://stateiq.amsler.io/api/v1/states/PA/agencies?limit=50" \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": [
    {
      "id": 12345,
      "state_code": "42",
      "agency_id": "42001",
      "agency_name": "Pittsburgh EMS"
    },
    ...
  ],
  "count": 50
}

State Facilities

GET/api/v1/states/{code}/facilities

Returns healthcare facilities in a state including hospitals, trauma centers, and other destinations.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation or FIPS code
limitqueryoptionalMaximum number of results (default: 100, max: 1000)
typequeryoptionalFilter by facility type code (e.g., 1701001 for hospital)

Code Example

curl "https://stateiq.amsler.io/api/v1/states/TX/facilities?limit=100" \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": [
    {
      "id": 98765,
      "state_code": "48",
      "facility_code": "TX-HOU-001",
      "facility_name": "Houston Methodist Hospital",
      "facility_type_code": "1701001",
      "address": "6565 Fannin St",
      "city_code": "Houston",
      "state_abbr": "TX",
      "zip_code": "77030",
      "npi": "1234567890",
      "coordinates": "29.7106,-95.3987"
    },
    ...
  ],
  "count": 100
}

State Elements

GET/api/v1/states/{code}/elements

Returns required and custom NEMSIS elements configured for a state.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation or FIPS code
sectionqueryoptionalFilter by NEMSIS section prefix (e.g., eArrest, eMedications)
typequeryoptionalFilter by element type: "required" or "custom"

Code Example

curl "https://stateiq.amsler.io/api/v1/states/NY/elements?section=eArrest" \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": {
    "required": [
      {
        "id": 1234,
        "state_code": "36",
        "element_id": "eArrest.01",
        "element_label": "Cardiac Arrest"
      },
      ...
    ],
    "custom": [
      {
        "id": 5678,
        "state_code": "36",
        "element_id": "eArrest.NY01",
        "label": "Arrest Location Type",
        "description": "NY-specific arrest location",
        "is_multiselect": false,
        "parent_section": "eArrest"
      },
      ...
    ]
  },
  "count": 15
}

State Formulary

GET/api/v1/states/{code}/formulary

Returns medication formulary for a state organized by certification level.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation or FIPS code
detailedqueryoptionalSet to "true" to include medication codes per cert level

Code Example

curl "https://stateiq.amsler.io/api/v1/states/FL/formulary" \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": [
    {
      "state_code": "12",
      "state_name": "Florida",
      "cert_label": "Paramedic",
      "medication_count": 87
    },
    {
      "state_code": "12",
      "state_name": "Florida",
      "cert_label": "EMT",
      "medication_count": 23
    },
    ...
  ],
  "count": 4
}

State Validation Rules

GET/api/v1/states/{code}/rules

Returns schematron validation rules for a state. These rules define the business logic used to validate ePCR XML records.

Parameters

NameTypeRequiredDescription
codepathrequiredTwo-letter state abbreviation or FIPS code
element_idqueryoptionalFilter rules by element ID (partial match)
rolequeryoptionalFilter by severity: "error" or "warning"
limitqueryoptionalMaximum number of results (default: 500, max: 1000)

Code Example

curl "https://stateiq.amsler.io/api/v1/states/PA/rules?element_id=eArrest&role=error" \
  -H "x-api-key: siq_live_your_key_here"

Response

{
  "data": [
    {
      "rule_id": "paSch_eArrest.01_check",
      "element_id": "eArrest.01",
      "role": "error",
      "pattern_title": "Cardiac Arrest Check",
      "message": "eArrest.01 must be present when cardiac arrest occurred",
      "context": "nem:eArrest",
      "test": "nem:eArrest.01"
    },
    ...
  ],
  "count": 12,
  "limit": 500,
  "page": 0
}

Validate All States

POST/api/v1/validate

Validates an ePCR XML record against all 51 state schematron rule sets. Returns a comprehensive report showing which states the record would pass or fail.

Request Body

multipart/form-data

filerequiredXML file to validate (ePCR record)

Parameters

No parameters required.

Code Example

curl -X POST https://stateiq.amsler.io/api/v1/validate \
  -H "x-api-key: siq_live_your_key_here" \
  -F "file=@your_record.xml"
Use the Validate page to test XML submission interactively.

Response

{
  "data": {
    "total_states": 51,
    "passed": 45,
    "failed": 6,
    "results": [
      {
        "state": "CA",
        "pass_rate": 100,
        "errors": 0,
        "warnings": 2
      },
      {
        "state": "PA",
        "pass_rate": 97,
        "errors": 1,
        "warnings": 0
      },
      ...
    ]
  }
}

Validate Single State

POST/api/v1/validate/{state}

Validates an ePCR XML record against a specific state's NEMSIS schematron rules. Returns detailed results including each rule that passed, failed as error, or failed as warning.

Request Body

multipart/form-data

filerequiredXML file to validate (ePCR record)

Parameters

NameTypeRequiredDescription
statepathrequiredTwo-letter state code (e.g., CA, PA, TX)

Code Example

curl -X POST https://stateiq.amsler.io/api/v1/validate/PA \
  -H "x-api-key: siq_live_your_key_here" \
  -F "file=@your_record.xml"
Use the Validate page to test XML submission interactively.

Response

{
  "data": {
    "state": "PA",
    "pass_rate": 97,
    "rules_passed": 32,
    "errors": 1,
    "warnings": 0,
    "skipped": 10,
    "results": [
      {
        "rule_id": "paSch_dAgency.04_check",
        "role": "error",
        "message": "EMS Agency State must equal 42",
        "element_id": "dAgency.04",
        "location": "/EMSDataSet/Header/DemographicGroup"
      }
    ]
  }
}

StateIQ API v1.0

Questions? Contact Support