The Stedi connector lets your AI agent act in each user's Stedi account. Each user connects their own Stedi API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 17 tools.
- Tools
- 17
- What they doRead · write · destructive
- 16 · 1 · 016 read1 write0 destructive
- Users sign in with
- API key
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Stedi connection
In AgentKit > Connections, create a Stedi connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Console steps with screenshots
Stedi connections use a Stedi API key. One key works for every Stedi API the tools call: payers, eligibility, claim status, claims and reports.
-
Create a Stedi API key
In the Stedi portal, open API keys and create a key in Test or Production mode.
- Test keys return mock responses: for eligibility checks, send only Stedi’s mock request payloads, never real patient data; for claims, use payer ID
STEDI. - Production keys reach real payers. Real-time claim status (
stedi_check_claim_status) accepts only production keys, for claims a payer has accepted.
- Test keys return mock responses: for eligibility checks, send only Stedi’s mock request payloads, never real patient data; for claims, use payer ID
-
Create the connection
In the Scalekit dashboard, go to AgentKit > Connections > Create Connection, find Stedi and click Create. The connection name is the
connection_nameyour code passes. -
Add a connected account
To test, open the connection, click the Connected Accounts tab > Add Account, enter the user’s identifier, such as
user_123, and paste the key as API Key. Paste the key only, without aBearerprefix.In production, each user opens the authorization link and enters the key there.
-
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'stedi'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Stedi:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'stedi_list_claims',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "stedi"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Stedi:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="stedi_list_claims",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user opens the link once and enters their Stedi credentials there. If your app already has a user's credentials, add the account from your backend instead, as the console steps above show. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolstedi_check_claim_statusSend a real-time 276/277 claim status request to a payer through Stedi for a claim the payer has already accepted.Read-onlyCheck Claim Status
Send a real-time 276/277 claim status request to a payer through Stedi for a claim the payer has already accepted. Returns the payer's 277 response as JSON: a claims array where each matching claim has claimStatus (status category and codes, payer claim number, charge and paid amounts, dates) and serviceDetails, plus payer, providers, subscriber, errors and the raw X12. Use when a 277CA or 835 ERA has not arrived in the expected time. Use stedi_list_claims or stedi_get_claim_timeline to see what Stedi has already received. Works with production API keys only.
Inputs
providersarrayrequired- The billing provider (exactly one) and optionally service providers on the claim. Each entry has providerType (BillingProvider or ServiceProvider), npi, and organizationName or firstName and lastName; tin is sometimes required by the payer. Example: [{"providerType": "BillingProvider", "npi": "1999999984", "organizationName": "Example Clinic"}].
subscriberobjectrequired- The subscriber on the claim: memberId, firstName and lastName are required; add dateOfBirth (YYYYMMDD) and gender (M or F) when the subscriber is the patient. Example: {"memberId": "TEST12345", "firstName": "Test", "lastName": "Patient", "dateOfBirth": "19800101"}.
trading_partner_service_idstringrequired- The payer ID the claim was sent to (primary payer ID, Stedi payer ID or alias).
dependentobject- The patient, when the patient is a dependent on the subscriber's policy: firstName, lastName, dateOfBirth (YYYYMMDD) and gender (M or F). Example: {"firstName": "Test", "lastName": "Child", "dateOfBirth": "20150101"}.
encounterobject- Identifies the claim. Stedi recommends a date-of-service range (beginningDateOfService and endDateOfService, YYYYMMDD); you can also pass the payer's claim number (tradingPartnerClaimNumber), patientAccountNumber or submittedAmount. Sending too much detail can hide matches. Example: {"beginningDateOfService": "20260101", "endDateOfService": "20260107"}.
trading_partner_namestring- The payer's name, such as Cigna or Aetna. Optional.
stedi_check_coordination_of_benefitsCheck whether a patient has other active health coverage and which payer is primary, using Stedi's coordination of benefits (COB) database.Read-onlyCheck Coordination of Benefits
Check whether a patient has other active health coverage and which payer is primary, using Stedi's coordination of benefits (COB) database. Returns coordinationOfBenefits (whether COB applies and the payer responsibility sequence, such as primary or secondary), benefitsInformation for the other active plans found, plan dates, and payer, subscriber and errors details. Use when a patient may have more than one plan, before billing. Use stedi_check_eligibility for benefits under one known plan; the payer must support COB checks (filter stedi_search_payers by coordination_of_benefits).
Inputs
encounterobjectrequired- The date of service (YYYY-MM-DD) and the service type code; use 30 (health benefit plan coverage). Example: {"dateOfService": "2026-01-15", "serviceTypeCode": "30"}.
providerobjectrequired- The provider requesting the check: organizationName (or firstName and lastName for an individual) and npi. Example: {"organizationName": "Example Clinic", "npi": "1999999984"}.
subscriberobjectrequired- The primary policyholder, or a dependent with their own member ID: memberId, firstName, lastName and dateOfBirth (YYYY-MM-DD). Example: {"memberId": "TEST12345", "firstName": "Test", "lastName": "Patient", "dateOfBirth": "1980-01-01"}.
trading_partner_service_idstringrequired- The payer ID of a Stedi-supported COB payer the patient is known to have coverage with.
dependentobject- A dependent listed on the subscriber's policy who has no member ID of their own: firstName, lastName and dateOfBirth. Example: {"firstName": "Test", "lastName": "Child", "dateOfBirth": "2015-01-01"}.
stedi_check_eligibilityRun a real-time 270/271 insurance eligibility and benefits check with a payer through Stedi.Read-onlyCheck Eligibility
Run a real-time 270/271 insurance eligibility and benefits check with a payer through Stedi. Returns the payer's 271 response as JSON: payer, provider and subscriber details, plans with their benefits (coverage status, copays, coinsurance, deductibles), errors and warnings, plus the raw X12. Use before a visit to confirm active coverage and patient responsibility. Use stedi_check_coordination_of_benefits to find other coverage; use stedi_search_payers first to get the payer ID.
Inputs
payer_idstringrequired- The payer ID to send the check to: the primary payer ID, Stedi payer ID or any payer ID alias from the Payer Network. Test API keys only accept Stedi's mock payer requests.
providerobjectrequired- The provider requesting the check. It needs a name, given as an organization name or a person's first and last name, and usually the provider's 10-digit NPI. Tax ID and other identifiers are only needed when a payer asks for them. Example: {"name": {"organization": "Example Clinic"}, "npi": "1999999984"}.
subscriberobjectrequired- The primary policyholder, or a dependent who has their own member ID. Send the member ID, the name as a person (firstName, lastName) and the date of birth (YYYY-MM-DD); payers match on these. Gender (MALE or FEMALE) and address are optional. Example: {"memberId": "TEST12345", "name": {"person": {"firstName": "Test", "lastName": "Patient"}}, "dateOfBirth": "1980-01-01"}.
dependentobject- A dependent to check, only when the patient is listed under the subscriber's policy and has no member ID of their own. One dependent per check. Give the name (person firstName and lastName), date of birth and relationship to the subscriber (SPOUSE, CHILD or OTHER_ADULT). Example: {"name": {"person": {"firstName": "Test", "lastName": "Child"}}, "dateOfBirth": "2015-01-01", "relationToSubscriber": "CHILD"}.
eligibility_search_idstring- Identifier that groups several eligibility checks for the same patient into one eligibility search record in the Stedi portal.
encounterobject- What benefits to ask about. List services as code system plus value: STC service type codes (for example 30 for general health plan coverage), CPT or HCPCS codes. Optionally add a service date or date range (dates.service); without one the payer uses today. Example: {"services": [{"system": "STC", "value": "30"}]}.
external_patient_idstring- Your own unique identifier for the patient. Stedi uses it to correlate past eligibility checks for the same person; recommended on every request.
payer_namestring- The payer's name, such as Cigna or Aetna. Optional and informational.
stedi_get_277ca_reportRetrieve a processed 277CA claim acknowledgment from Stedi as JSON.Read-onlyGet 277CA Report
Retrieve a processed 277CA claim acknowledgment from Stedi as JSON. Returns a transactions array; each 277CA lists payers with their providers and claims, and each claim's status (accepted or rejected) with status category codes and rejection reasons. Use to see whether a payer accepted or rejected submitted claims. Find the transaction ID with stedi_list_transactions (transaction_set_id 277) or stedi_poll_transactions.
Inputs
transaction_idstringrequired- Stedi's transaction ID of the processed 277 claim acknowledgment transaction. Find it with List Transactions (filter by transaction set 277), Poll Transactions or a claim's timeline.
stedi_get_claimRetrieve one claim record with a summary of its latest submission.Read-onlyGet Claim
Retrieve one claim record with a summary of its latest submission. Returns the claim's id, status, statusReportedBy, patientControlNumber, patientName, stediPayerId, submittedAt, total charge and paid amounts, datesOfService and type. Use to check a claim's current status. Use stedi_get_claim_timeline for every submission, acknowledgment and payment, and stedi_list_claims to find the claim ID.
Inputs
claim_idstringrequired- Stedi's claim ID: the claimId from Submit Professional Claim or the id of an item from List Claims.
stedi_get_claim_timelineList the timeline of one claim: its submissions, 277CA acknowledgments and ERA payment information, newest first.Read-onlyGet Claim Timeline
List the timeline of one claim: its submissions, 277CA acknowledgments and ERA payment information, newest first. Returns items (timeline entries for submissions, 277CA acknowledgments and ERA payments) and nextPageToken. Use to follow a claim's full lifecycle or find the transaction ID of its 277CA or ERA. Use stedi_get_claim for the current status only.
Inputs
claim_idstringrequired- Stedi's claim ID: the claimId from Submit Professional Claim or the id of an item from List Claims.
page_sizeinteger- Maximum number of timeline entries per page. Stedi defaults to 100.
page_tokenstring- Opaque token from the nextPageToken field of a previous response, used to fetch the next page. Omit for the first page.
stedi_get_era_reportRetrieve a processed 835 Electronic Remittance Advice (ERA) from Stedi as JSON.Read-onlyGet 835 ERA Report
Retrieve a processed 835 Electronic Remittance Advice (ERA) from Stedi as JSON. Returns a transactions array; each ERA has payer and payee, financialInformation (payment amount, method and date), paymentAndRemitReassociationDetails (check or EFT trace number), detailInfo with per-claim payment and adjustment details, and providerAdjustments. Use to reconcile what a payer paid on claims. Find the transaction ID with stedi_list_transactions (transaction_set_id 835) or stedi_poll_transactions.
Inputs
transaction_idstringrequired- Stedi's transaction ID of the processed 835 ERA transaction. Find it with List Transactions (filter by transaction set 835), Poll Transactions or a claim's timeline.
stedi_get_payerRetrieve one payer record from Stedi's Payer Network by its Stedi payer ID.Read-onlyGet Payer
Retrieve one payer record from Stedi's Payer Network by its Stedi payer ID. Returns a payer object with stediId, displayName, primaryPayerId, aliases, names, coverage types, operating states, programs, supported transaction types and enrollment requirements. Use when you already have the Stedi payer ID. Use stedi_search_payers to look a payer up by name, primary payer ID or alias; this endpoint does not accept those.
Inputs
stedi_idstringrequired- The Stedi payer ID, a permanent identifier Stedi assigns to each payer (the stediId field in search results). The primary payer ID and aliases are not accepted here.
stedi_get_professional_claim_submissionRetrieve the data of one professional claim submission made through the CMS-1500 JSON endpoint, by its submission ID.Read-onlyGet Professional Claim Submission
Retrieve the data of one professional claim submission made through the CMS-1500 JSON endpoint, by its submission ID. Returns claimId, submissionId, stediPayerId, processedAt and data, the claim fields as submitted (payer, submitter, billing, insured, patient, encounter, service lines). Use to review exactly what was sent, for example before correcting a rejected claim. Use stedi_get_claim for the claim's current status.
Inputs
submission_idstringrequired- The submissionId returned by Submit Professional Claim. Each resubmission of a claim gets a new submission ID.
stedi_get_transactionRetrieve the details of one processed transaction by its transaction ID.Read-onlyGet Transaction
Retrieve the details of one processed transaction by its transaction ID. Returns transactionId, status, direction, mode, processedAt, x12 metadata, businessIdentifiers, partnership, translationErrors, and artifacts with download URLs for the input and output documents. Use to inspect a transaction found with stedi_list_transactions. Use stedi_get_era_report or stedi_get_277ca_report for the parsed ERA or acknowledgment.
Inputs
transaction_idstringrequired- Stedi's transaction ID, from List Transactions or Poll Transactions.
stedi_list_claimsList claim records in the Stedi account, newest submission first, with optional filters for status, patient control numbers and submission date range.Read-onlyList Claims
List claim records in the Stedi account, newest submission first, with optional filters for status, patient control numbers and submission date range. Returns items (each with id, status, statusReportedBy, patientControlNumber, patientName, stediPayerId, submittedAt, total charge and paid amounts, datesOfService and type, from the latest submission) and nextPageToken. Use to monitor claims or find a claim ID. Use stedi_get_claim for one claim and stedi_get_claim_timeline for its full history.
Inputs
page_sizeinteger- Maximum number of claims per page. Stedi defaults to 100.
page_tokenstring- Opaque token from the nextPageToken field of a previous response, used to fetch the next page. Omit for the first page.
patient_control_numbersarray- Only return claims with any of these patient control numbers (the identifier you assigned to the claim).
statusarray- Only return claims in any of these processing statuses: SUBMITTED, RECEIVED, ACCEPTED, REJECTED, PROCESSED, DENIED or UNKNOWN.
submitted_afterstring- Only return claims submitted after this time, as an ISO 8601 timestamp.
submitted_beforestring- Only return claims submitted before this time, as an ISO 8601 timestamp.
stedi_list_payersList payers in Stedi's Payer Network, one page at a time.Read-onlyList Payers
List payers in Stedi's Payer Network, one page at a time. Returns items (each a payer record with stediId, displayName, primaryPayerId, aliases, supported transaction types and enrollment requirements) and nextPageToken. Use to page through or sync the full payer list. Use stedi_search_payers to find a specific payer by name or ID.
Inputs
page_sizeinteger- Maximum number of payers to return per page. This tool sends 100 by default; Stedi itself returns every payer in one very large response when no page size is sent.default
100 page_tokenstring- Opaque token from the nextPageToken field of a previous response, used to fetch the next page. Omit for the first page.
stedi_list_transactionsList transactions Stedi has processed in the account, newest first, with optional filters such as transaction set (835 for ERAs, 277 for claim acknowledgments), direction, mode, status and date range.Read-onlyList Transactions
List transactions Stedi has processed in the account, newest first, with optional filters such as transaction set (835 for ERAs, 277 for claim acknowledgments), direction, mode, status and date range. Returns items (each with transactionId, status, direction, mode, processedAt, x12 metadata including the transaction set, businessIdentifiers, partnership and artifacts with download URLs) and nextPageToken. Use to find ERAs or 277CAs and their transaction IDs. Use stedi_poll_transactions to fetch only transactions processed since a given time.
Inputs
business_identifierstring- Only return transactions containing a business identifier with this value, such as a patient control number or check number.
directionstring- INBOUND for transactions received from payers or partners, OUTBOUND for those you sent, or UNKNOWN.one of
INBOUNDOUTBOUNDUNKNOWN element_idstring- The X12 element ID the business identifier belongs to, such as 127 (Reference Identification). Only valid together with business_identifier.
fromstring- Only return transactions created at or after this ISO 8601 timestamp.
modestring- Only return test, production or other transactions.one of
testproductionother page_sizeinteger- Maximum number of transactions per page, up to 500. Stedi defaults to 100.
page_tokenstring- Opaque token from the nextPageToken field of a previous response, used to fetch the next page. Omit for the first page.
partnership_idstring- Only return transactions sent or received on this partnership.
statusstring- Only return transactions Stedi processed successfully (succeeded) or not (failed).one of
succeededfailed tostring- Only return transactions created up to and including this ISO 8601 timestamp.
transaction_set_idstring- Only return this type of transaction, as a 3-digit X12 transaction set code: 835 for ERAs, 277 for claim acknowledgments, 837 for claims, 270 or 271 for eligibility, 999 for implementation acknowledgments.
stedi_poll_transactionsFetch transactions Stedi processed after a given time, oldest first, for incremental syncing.Read-onlyPoll Transactions
Fetch transactions Stedi processed after a given time, oldest first, for incremental syncing. Returns items (transaction summaries with transactionId, status, direction, mode, processedAt, x12 metadata and businessIdentifiers) and nextPageToken to continue from. Use to pick up new ERAs and acknowledgments since the last check. Use stedi_list_transactions to browse or filter all transactions. Set start_date_time on the first call and page_token afterwards.
Inputs
page_sizeinteger- Maximum number of transactions per page, up to 500. Stedi defaults to 100.
page_tokenstring- The nextPageToken from a previous poll, to continue where it left off. Supply this or start_date_time.
start_date_timestring- Return transactions processed after this ISO 8601 timestamp, which must be at least one minute in the past. Supply this or page_token.
stedi_search_payersSearch Stedi's Payer Network by payer name, payer ID or alias, with fuzzy matching, and optionally filter by supported transactions, coverage type, state or insurance program.Read-onlySearch Payers
Search Stedi's Payer Network by payer name, payer ID or alias, with fuzzy matching, and optionally filter by supported transactions, coverage type, state or insurance program. Returns items ranked by relevance, each with the payer record (stediId, displayName, primaryPayerId, aliases, coverage types, supported transaction types and enrollment requirements), the matched text and a score, plus nextPageToken. Use to find the payer ID for an eligibility check, claim or claim status request. Use stedi_get_payer when you already have the Stedi payer ID, and stedi_list_payers to export the whole network.
Inputs
claim_paymentstring- Filter payers by 835 Electronic Remittance Advice (ERA) support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER claim_statusstring- Filter payers by real-time 276/277 claim status support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER coordination_of_benefitsstring- Filter payers by coordination of benefits (COB) check support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER coverage_typesarray- Only return payers that support all of these coverage types: medical, dental and/or vision. Payers Stedi has not classified are excluded.
dental_claim_submissionstring- Filter payers by 837D dental claim submission support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER eligibility_checkstring- Filter payers by real-time 270/271 eligibility check support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER institutional_claim_submissionstring- Filter payers by 837I institutional claim submission support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER operating_statesarray- Only return payers that operate in all of these two-letter US state or territory codes. Use NATIONAL for payers operating in all 50 states; territories such as PR must be listed explicitly. Payers without state classifications are excluded.
page_sizeinteger- Maximum number of payers to return per page. Stedi defaults to 20.
page_tokenstring- Opaque token from the nextPageToken field of a previous response, used to fetch the next page. Omit for the first page.
professional_claim_submissionstring- Filter payers by 837P professional claim submission support: SUPPORTED, NOT_SUPPORTED, ENROLLMENT_REQUIRED (supported once the provider is enrolled with the payer) or EITHER (supported with or without enrollment). When several transaction filters are set, a payer must match all of them.one of
SUPPORTEDNOT_SUPPORTEDENROLLMENT_REQUIREDEITHER programsarray- Only return payers that participate in any of these insurance programs: AUTOMOBILE_MEDICAL, COMMERCIAL, DISABILITY, LIABILITY_MEDICAL, MEDICAID, MEDICARE, MEDICARE_ADVANTAGE, TITLE_V, TRICARE, VETERANS_AFFAIRS, WORKERS_COMPENSATION.
querystring- Text to search the Payer Network for: a payer name, payer ID or alias. Case-insensitive with fuzzy matching, so 'cig', '62308' and 'SX071' all find Cigna. If omitted, only the filters are applied.
stedi_validate_professional_claimValidate an 837P professional claim (CMS-1500 JSON layout) against Stedi's payer checks, edits and mapping without sending it to the payer.Read-onlyValidate Professional Claim
Validate an 837P professional claim (CMS-1500 JSON layout) against Stedi's payer checks, edits and mapping without sending it to the payer. Returns an empty object when the claim passes, or an errors array describing each failed edit. Use before stedi_submit_professional_claim, with the same inputs, to fix problems first. Nothing is submitted or stored.
Inputs
authorizationobjectrequired- Signature and assignment-of-benefits indicators (CMS-1500 boxes 12, 13, 27, 31). Example: {"patientReleasesMedicalInfo": "YES", "insuredAuthorizesAssignment": "YES", "providerAcceptsAssignment": "ASSIGNED", "providerSignature": "ON_FILE"}.
billingobjectrequired- Billing details (CMS-1500 boxes 25, 26, 28, 32, 33): the billing provider (name, address, NPI and taxonomy code), the tax ID, your patientControlNumber and the totalCharge as a decimal string; optionally the service facility. Example: {"billingProvider": {"name": {"organization": "Example Clinic"}, "identifiers": {"npi": "1999999984", "taxonomyCode": "207Q00000X"}, "address": {"addressLine1": "123 Example St", "city": "Springfield", "state": "IL", "postalCode": "12345"}}, "taxId": {"ein": "123456789"}, "patientControlNumber": "TEST-001", "totalCharge": "100.00"}.
encounterobjectrequired- Clinical details of the encounter: at least the primaryDiagnosisCode (ICD-10, without the dot), plus optional other diagnoses, referring or supervising providers, clinical dates, prior authorization and resubmission details. Example: {"primaryDiagnosisCode": "J0190"}.
insuredobjectrequired- The subscriber who holds the policy being billed (CMS-1500 boxes 1, 1a, 4, 7, 11). Required: name, insuranceType (MEDICARE, MEDICAID, TRICARE, CHAMPVA, FECA_BLK_LUNG or OTHER) and paymentResponsibilityLevelCode (PRIMARY). Also send the memberId, dateOfBirth (YYYY-MM-DD), gender and address. Example: {"memberId": "TEST12345", "name": {"person": {"firstName": "Test", "lastName": "Patient"}}, "dateOfBirth": "1980-01-01", "gender": "FEMALE", "insuranceType": "OTHER", "paymentResponsibilityLevelCode": "PRIMARY", "address": {"addressLine1": "1 Example Ave", "city": "Springfield", "state": "IL", "postalCode": "12345"}}.
payerobjectrequired- The payer being billed: its payer ID and name. With a test API key, use STEDI as the payer ID. Example: {"id": "60054", "name": {"organization": "Aetna"}}.
purposestringrequired- Why the claim is submitted: CHARGEABLE for a standard fee-for-service claim with at least one charge, REPORTING for an encounter report with no payment expected, SUBROGATION_DEMAND for a subrogation claim.one of
CHARGEABLEREPORTINGSUBROGATION_DEMAND service_linesarrayrequired- The services billed (CMS-1500 box 24), one object per line: datesOfService (start and end), procedureCode (code and optional modifiers), lineItemChargeAmount, units, placeOfService and the diagnosisCodes it relates to. Example: [{"datesOfService": {"start": "2026-01-15", "end": "2026-01-15"}, "procedureCode": {"code": "99213"}, "lineItemChargeAmount": "100.00", "units": "1", "placeOfService": "11", "diagnosisCodes": ["J0190"]}].
submitterobjectrequired- The entity submitting the claim to Stedi: its name, a contact phone number or email, and its ETIN if one was assigned. Example: {"name": {"organization": "Example Billing"}, "contact": {"phoneNumber": "5555551234"}}.
other_insuredarray- Other coverage the patient holds, for coordination of benefits (CMS-1500 boxes 9, 9a, 9d), one object per policy. Each needs memberId, name, otherPayer (payer ID and name), responsibilityLevel (PRIMARY, SECONDARY or TERTIARY), relationshipToInsured, claimFilingIndicator (such as COMMERCIAL_INSURANCE or BLUE_CROSS_BLUE_SHIELD) and authorization (insuredAuthorizesAssignment and patientReleasesMedicalInfo). Example: [{"memberId": "TEST67890", "name": {"person": {"firstName": "Test", "lastName": "Spouse"}}, "otherPayer": {"id": {"payerId": "00000"}, "name": {"organization": "Example Payer"}}, "responsibilityLevel": "SECONDARY", "relationshipToInsured": "SPOUSE", "claimFilingIndicator": "COMMERCIAL_INSURANCE", "authorization": {"insuredAuthorizesAssignment": "YES", "patientReleasesMedicalInfo": "YES"}}].
patientobject- The patient, only when they are not the insured. All of name, dateOfBirth (YYYY-MM-DD), gender, address and relationshipToInsured (for example CHILD or SPOUSE) are required. Example: {"name": {"person": {"firstName": "Test", "lastName": "Child"}}, "dateOfBirth": "2015-01-01", "gender": "MALE", "relationshipToInsured": "CHILD", "address": {"addressLine1": "1 Example Ave", "city": "Springfield", "state": "IL", "postalCode": "12345"}}.
stedi_submit_professional_claimSubmit an 837P professional claim to a payer through Stedi, using JSON fields laid out like the CMS-1500 form.WriteSubmit Professional Claim
Submit an 837P professional claim to a payer through Stedi, using JSON fields laid out like the CMS-1500 form. Returns claimId and submissionId when the claim passes Stedi's edits; otherwise also an errors array, and the claim is stored as REJECTED (HTTP 201 either way). Use to bill a payer for professional services. Run stedi_validate_professional_claim first to catch errors without sending; track the result with stedi_get_claim and stedi_get_claim_timeline. With a test API key, set the payer id to STEDI.
Inputs
authorizationobjectrequired- Signature and assignment-of-benefits indicators (CMS-1500 boxes 12, 13, 27, 31). Example: {"patientReleasesMedicalInfo": "YES", "insuredAuthorizesAssignment": "YES", "providerAcceptsAssignment": "ASSIGNED", "providerSignature": "ON_FILE"}.
billingobjectrequired- Billing details (CMS-1500 boxes 25, 26, 28, 32, 33): the billing provider (name, address, NPI and taxonomy code), the tax ID, your patientControlNumber and the totalCharge as a decimal string; optionally the service facility. Example: {"billingProvider": {"name": {"organization": "Example Clinic"}, "identifiers": {"npi": "1999999984", "taxonomyCode": "207Q00000X"}, "address": {"addressLine1": "123 Example St", "city": "Springfield", "state": "IL", "postalCode": "12345"}}, "taxId": {"ein": "123456789"}, "patientControlNumber": "TEST-001", "totalCharge": "100.00"}.
encounterobjectrequired- Clinical details of the encounter: at least the primaryDiagnosisCode (ICD-10, without the dot), plus optional other diagnoses, referring or supervising providers, clinical dates, prior authorization and resubmission details. Example: {"primaryDiagnosisCode": "J0190"}.
insuredobjectrequired- The subscriber who holds the policy being billed (CMS-1500 boxes 1, 1a, 4, 7, 11). Required: name, insuranceType (MEDICARE, MEDICAID, TRICARE, CHAMPVA, FECA_BLK_LUNG or OTHER) and paymentResponsibilityLevelCode (PRIMARY). Also send the memberId, dateOfBirth (YYYY-MM-DD), gender and address. Example: {"memberId": "TEST12345", "name": {"person": {"firstName": "Test", "lastName": "Patient"}}, "dateOfBirth": "1980-01-01", "gender": "FEMALE", "insuranceType": "OTHER", "paymentResponsibilityLevelCode": "PRIMARY", "address": {"addressLine1": "1 Example Ave", "city": "Springfield", "state": "IL", "postalCode": "12345"}}.
payerobjectrequired- The payer being billed: its payer ID and name. With a test API key, use STEDI as the payer ID. Example: {"id": "60054", "name": {"organization": "Aetna"}}.
purposestringrequired- Why the claim is submitted: CHARGEABLE for a standard fee-for-service claim with at least one charge, REPORTING for an encounter report with no payment expected, SUBROGATION_DEMAND for a subrogation claim.one of
CHARGEABLEREPORTINGSUBROGATION_DEMAND service_linesarrayrequired- The services billed (CMS-1500 box 24), one object per line: datesOfService (start and end), procedureCode (code and optional modifiers), lineItemChargeAmount, units, placeOfService and the diagnosisCodes it relates to. Example: [{"datesOfService": {"start": "2026-01-15", "end": "2026-01-15"}, "procedureCode": {"code": "99213"}, "lineItemChargeAmount": "100.00", "units": "1", "placeOfService": "11", "diagnosisCodes": ["J0190"]}].
submitterobjectrequired- The entity submitting the claim to Stedi: its name, a contact phone number or email, and its ETIN if one was assigned. Example: {"name": {"organization": "Example Billing"}, "contact": {"phoneNumber": "5555551234"}}.
idempotency_keystring- A unique string for this submission. Retrying with the same key within 24 hours returns the original result instead of submitting the claim twice.
other_insuredarray- Other coverage the patient holds, for coordination of benefits (CMS-1500 boxes 9, 9a, 9d), one object per policy. Each needs memberId, name, otherPayer (payer ID and name), responsibilityLevel (PRIMARY, SECONDARY or TERTIARY), relationshipToInsured, claimFilingIndicator (such as COMMERCIAL_INSURANCE or BLUE_CROSS_BLUE_SHIELD) and authorization (insuredAuthorizesAssignment and patientReleasesMedicalInfo). Example: [{"memberId": "TEST67890", "name": {"person": {"firstName": "Test", "lastName": "Spouse"}}, "otherPayer": {"id": {"payerId": "00000"}, "name": {"organization": "Example Payer"}}, "responsibilityLevel": "SECONDARY", "relationshipToInsured": "SPOUSE", "claimFilingIndicator": "COMMERCIAL_INSURANCE", "authorization": {"insuredAuthorizesAssignment": "YES", "patientReleasesMedicalInfo": "YES"}}].
patientobject- The patient, only when they are not the insured. All of name, dateOfBirth (YYYY-MM-DD), gender, address and relationshipToInsured (for example CHILD or SPOUSE) are required. Example: {"name": {"person": {"firstName": "Test", "lastName": "Child"}}, "dateOfBirth": "2015-01-01", "gender": "MALE", "relationshipToInsured": "CHILD", "address": {"addressLine1": "1 Example Ave", "city": "Springfield", "state": "IL", "postalCode": "12345"}}.
No tools match.