Common questions about Spravato and TMS eligibility checks and claims
Interventional psychiatry billing doesn't look like other behavioral health billing. One eligibility check at intake isn't enough for a course of treatment.
A transcranial magnetic stimulation (TMS) course is about 30 daily sessions over six weeks. Spravato (esketamine) dosing can run for months.
The patient's coverage can change during the course. Nothing tells the practice when it does.
This guide answers questions we commonly hear from interventional psychiatry teams billing through Stedi.
Can I use procedure codes in eligibility requests?
In most cases, no. Most medical payers don't return benefits for procedure codes, like 90868 for a TMS session. This applies to both Current Procedural Terminology (CPT) and Healthcare Common Procedure Coding System (HCPCS) codes. Some reject the request.
Unless you know the payer supports procedure codes, send a Service Type Code (STC) instead. To find the STC for a procedure code, use our free CPT/HCPCS to STC lookup tool.
Which STCs should I use for eligibility checks?
In an eligibility request, an STC tells the payer which benefits you're asking about. But not every payer supports the same STCs.
Testing is the best way to find out which STCs work for each payer. Our docs explain general STC testing tips.
Step 1. Start with STC 30 (Health Benefit Plan Coverage)
All medical payers support STC 30, which makes it a baseline. Many payers return their STC 30 response instead when you send an STC they don't support.
Under STC 30, payers must return benefits for MH (Mental Health), 98 (Professional (Physician) Visit – Office), and 88 (Pharmacy). This applies when the plan covers them. MH is broad, though, and often won't carry the detail you need.
Step 2. Test more specific STCs
Try one or more STCs from the following table.
| STC | Description |
|---|---|
MH | Mental Health |
A4 | Psychiatric |
A6 | Psychotherapy |
A8 | Psychiatric – Outpatient |
98 | Professional (Physician) Visit – Office |
88 | Pharmacy |
98 applies to the visit and observation portion of a Spravato session.
Send one STC per request. Many payers don't support multiple STCs in a single check.
Step 3. Compare to the baseline
Compare each response against your STC 30 baseline.
If an STC returns behavioral health benefits that STC 30 didn't, the payer supports that STC. Use it for that payer going forward. An identical response means the payer ignored the STC you sent.
Repeat for each payer. You can't assume STCs that work for one payer apply to another.
Check the service object on every benefit entry. Don't assume a missing MH entry means the plan excludes the benefit.
Why did the response come back with no behavioral health benefits?
Either the plan carved those benefits out to another company, or the payer didn't send them.
Payers often carve out behavioral health benefits to another entity, called a carveout administrator (admin). Many payers return the carveout admin's name and contact information in the eligibility response, but not behavioral health cost share. For example:
The Real-Time Eligibility Check JSON endpoint returns a plans array. The carveout admin is in plans[].benefits.contactFollowingEntityForInformation[].relatedEntities:
{
"plans": [
{
"benefits": {
"contactFollowingEntityForInformation": [
{
"service": {
"system": "STC",
"value": "MH",
"definition": "Mental Health"
},
"relatedEntities": [
{
"type": "THIRD_PARTY_ADMINISTRATOR",
"name": { "organization": "ACME BEHAVIORAL HEALTH" }, // Carveout admin
"contacts": [{ "phoneNumbers": ["1234567890"] }]
}
],
...
}
]
}
}
],
...
}The Batch Eligibility Check, Insurance Discovery, Real-Time Eligibility Check Raw X12, and Real-Time Eligibility Check JSON - Legacy endpoints return a benefitsInformation array. The carveout admin is in benefitsInformation[].benefitsRelatedEntities:
{
"benefitsInformation": [
{
"code": "U", // Contact Following Entity for Eligibility or Benefit Information
"serviceTypeCodes": ["MH"], // Mental Health
"benefitsRelatedEntities": [
{
"entityIdentifier": "Third-Party Administrator",
"entityType": "Non-Person Entity",
"entityName": "ACME BEHAVIORAL HEALTH", // Carveout admin
"contactInformation": {
"contacts": [
{
"communicationMode": "Telephone",
"communicationNumber": "1234567890"
}
]
}
}
],
...
}
],
...
}To get the behavioral health benefits, send a second eligibility check to the carveout admin. Look up the admin's payer ID by name in the Payer Network.
The carveout admin may return the member ID in a different format. Keep the member ID you submitted for your claims.
Some payers also include the carveout as a free-text note in the entry's messages or additionalInformation.description field. Wording varies from payer to payer. Match on a term like MANAGED SEPARATELY rather than a full phrase.
The admin needs its own Electronic Remittance Advice (ERA) enrollment. If you enroll with the health plan instead, claims still process but no ERAs come back. Nothing warns you.
For more details, see Why you're missing carveout benefits in eligibility checks.
Can an eligibility check tell me whether Spravato is a medical or pharmacy benefit?
No. Eligibility responses don't include drug-level coverage rules. Pharmacy benefit managers (PBMs) set those rules.
If Spravato is covered under the medical benefit, the provider bills for both the drug and the visit. If it's covered under the pharmacy benefit, the provider bills only for the visit. To find out which applies, check the payer's drug policy or call the PBM.
Can an eligibility check tell me if prior authorization is required?
Sometimes. Check the benefit entry for the behavioral health STC. For example:
The Real-Time Eligibility Check JSON endpoint returns a priorAuthIndicator field on each benefit entry:
{
"plans": [
{
"benefits": {
"coInsurance": [
{
"percent": "0.2",
"priorAuthIndicator": "REQUIRED", // Prior authorization is required
"service": {
"system": "STC",
"value": "A4",
"definition": "Psychiatric"
},
...
}
]
}
}
],
...
}The Batch Eligibility Check, Insurance Discovery, Real-Time Eligibility Check Raw X12, and Real-Time Eligibility Check JSON - Legacy endpoints return an authOrCertIndicator field on each benefitsInformation entry:
{
"benefitsInformation": [
{
"code": "A", // Co-insurance
"benefitPercent": "0.2",
"authOrCertIndicator": "Y", // Prior authorization is required
"serviceTypeCodes": ["A4"], // Psychiatric
...
}
],
...
}The indicator applies to one service type. Other service types may differ.
An eligibility check won't tell you what the payer requires for approval. Those requirements are in the payer's medical policy. For more, see How to check for prior authorization requirements in a 271 eligibility response.
Can I submit prior authorizations through Stedi?
No. Stedi doesn't request, track, or store prior authorizations.
You can still use Stedi to run eligibility checks, submit claims, and receive ERAs. You can also run prior authorization alongside Stedi.
To get the authorization, use the payer's portal or a third-party prior authorization platform. Our Platform Partners directory includes prior authorization vendors.
How do I track coverage across a treatment course?
Check a patient's eligibility in real time before every session to ensure coverage is up to date.
Session caps
Most plans limit the number of TMS sessions per benefit period. Some payers return both the session cap and the number of sessions remaining. Others include the cap in a free-text note, and the wording varies by payer.
Some payers don't return session caps at all. If you can't find this information, try checking the payer's portal or giving them a call.
Panel refreshes
To keep patient information current, run batch eligibility checks midway through treatment. You can include up to 10,000 checks in a single request.
Batch checks happen asynchronously, so they take longer than real-time checks. For tips on scheduling, see How to optimize monthly eligibility refresh checks.
Which codes go on Spravato and TMS claims?
Spravato uses Healthcare Common Procedure Coding System (HCPCS) Level II codes. The Centers for Medicare & Medicaid Services (CMS) maintains these codes for its programs, and other payers use them too. TMS uses Current Procedural Terminology (CPT) codes.
Spravato and TMS billing codes
| Procedure code | Service |
|---|---|
J0013 | Esketamine, nasal spray, 1 mg |
G2082 | Established-patient visit with supervised esketamine self-administration up to 56 mg, including 2 hours post-administration observation |
G2083 | The same visit with a dose greater than 56 mg |
90867 | Initial TMS session |
90868 | Follow-up TMS session |
90869 | Follow-up TMS session with motor threshold re-check |
CMS discontinued S0013 and replaced it with J0013 effective January 1, 2026. Some payers still accept J3490 (unclassified drugs), so you may see all three codes in production.
J0013 is not payable by Medicare. Medicare pays for the drug through G2082 and G2083. Map each payer ID to the code it accepts.
For more information, see CMS's HCPCS quarterly update.
How do I submit Spravato and TMS claims?
Use a professional claim for clinic and office visits, and an institutional claim for hospital outpatient visits. You can submit both using Stedi's APIs, SFTP, or the Stedi portal.
Most payers require the 11-digit national drug code (NDC) on the J0013 service line. Include the prior authorization number on the claim too.
Use the Create Professional Claim (CMS-1500) JSON endpoint. Put the NDC in serviceLines[].drugIdentification. Put the prior authorization number in encounter.referenceNumbers.priorAuthorization:
{
"encounter": {
"referenceNumbers": {
"priorAuthorization": "PA1234567" // Prior authorization number
},
...
},
"serviceLines": [
{
"procedureCode": {
"code": "J0013" // Esketamine, nasal spray, 1 mg
},
"units": "84", // 84-mg dose, billed as 84 units
"placeOfService": "11", // Office
"drugIdentification": {
"nationalDrugCode": "50458002803", // 84-mg kit, three 28-mg devices
"unitCount": "3", // Three devices in the kit
"unitOfMeasure": "UNIT"
},
...
}
],
...
}Use the Professional Claims (837P) JSON endpoint. Put the NDC in claimInformation.serviceLines[].drugIdentification. Put the prior authorization number in claimInformation.claimSupplementalInformation.priorAuthorizationNumber:
{
"claimInformation": {
"claimSupplementalInformation": {
"priorAuthorizationNumber": "PA1234567" // Prior authorization number
},
"serviceLines": [
{
"professionalService": {
"procedureIdentifier": "HC", // HCPCS
"procedureCode": "J0013", // Esketamine, nasal spray, 1 mg
"serviceUnitCount": "84", // 84-mg dose, billed as 84 units
"placeOfServiceCode": "11", // Office
...
},
"drugIdentification": {
"serviceIdQualifier": "N4", // NDC in 5-4-2 format
"nationalDrugCode": "50458002803", // 84-mg kit, three 28-mg devices
"nationalDrugUnitCount": "3", // Three devices in the kit
"measurementUnitCode": "UN" // Unit
},
...
}
],
...
},
...
}Use the Professional Claims (837P) Raw X12 endpoint. Put the prior authorization number in REF*G1 of Loop 2300 (Claim Information). Put the NDC in LIN03 and the drug quantity in CTP04 of Loop 2410 (Drug Identification):
REF*G1*PA1234567~
...
SV1*HC:J0013*840*UN*84*11**1~ // Line charge
LIN**N4*50458002803~
CTP****3*UN~
...Stedi validates every claim against a library of claim edits that match what payers check. Those edits find coding and format problems, not medical-policy problems.
To test a claim before you send it to a payer, use test mode. Submit a test claim to the Stedi Test Payer to get a test 277CA and a test ERA. For the test ERA, you need an ERA enrollment with the Stedi Test Payer.
Get started with Stedi
If you're building eligibility or claims workflows for interventional psychiatry, Stedi can help.
To get started, sign up for a free sandbox account. It takes less than two minutes. No credit card is required.
When you're ready, upgrade to production on our pay-as-you-go plan. There are no monthly minimums or setup fees. You only pay for the transactions you use.