HCPCS code J0900 – Deleted testosterone enanthate/estradiol valerate injection code
J0900 is a deleted HCPCS Level II code for injection, testosterone enanthate and estradiol valerate, up to 1 cc. CMS deleted it effective January 1, 2015, so it is not valid on current claims.
Bill testosterone cypionate with J1071 and testosterone enanthate with J3121, each at one unit per 1 mg given. Match the code to the drug named on the vial, and report its NDC on the same claim line.
- Level
- Level II
- Category
- J — Drugs administered other than oral method
- Status
- Deleted, effective January 1, 2015
- Billable
- No
- Code also known as
- Testosterone enanthate/estradiol valerate injection
Let Pabau's smart automation suggest the right codes, reduce claim denials, and keep your practice compliant—effortlessly.
- AI-powered code suggestions
- Real-time compliance checks
- Faster claims, fewer denials
Automate repetitive tasks and focus on what matters most—your patients.
Reduce coding errors and ensure compliance with the latest regulations.
Clean claims, fewer denials, and faster reimbursements.
Powerful insights and reporting to help your practice thrive.
HIPAA compliant SOC 2 certified GDPR-compliant Trusted by 4,000+ clinics worldwide
Key takeaways
HCPCS code J0900 was deleted effective January 1, 2015, so a claim that still carries it is rejected as an invalid code.
J0900 described injection, testosterone enanthate and estradiol valerate, up to 1 cc, which is a combination product and not testosterone cypionate.
Bill testosterone cypionate with J1071 and testosterone enanthate with J3121, both at one unit per 1 mg given.
A 200 mg dose of either drug is 200 units, reported with the drug’s NDC and one unit of CPT 96372 for the injection.
Pabau, the practice management platform we build, validates each claim before submission, so coding and unit errors get fixed before the payer sees them.
HCPCS code J0900: Definition and code status
HCPCS code J0900 is a deleted Level II code for injection, testosterone enanthate and estradiol valerate, up to 1 cc. The Centers for Medicare & Medicaid Services (CMS) deleted it effective January 1, 2015, and it has not been reactivated.
J0900 never described testosterone cypionate on its own. For a cypionate injection, bill J1071, injection, testosterone cypionate, 1 mg. For testosterone enanthate alone, bill J3121, injection, testosterone enanthate, 1 mg.
The AAPC deleted-code record for J0900 lists the former descriptor and the 2015 deletion date. Any date of service from 2015 onward needs one of the active codes instead. Our HCPCS code guides cover the active drug codes in the same format as this page.
J0900 code details at a glance
What to bill instead of J0900
Bill J1071 when the vial holds testosterone cypionate, and J3121 when it holds testosterone enanthate. Neither active code describes the estradiol combination that J0900 covered.
Read the ester off the vial label before you pick the code. Cypionate and enanthate are different drugs with different NDCs. Billing J1071 for an enanthate vial puts a code and an NDC on the same line that do not match.
A combination or compounded product falls outside both active codes. If a payer accepts it at all, follow its unclassified-drug instructions. Those usually point to J3490 with the drug name, dose and NDC.
Testosterone undecanoate has its own code, J3145, so it never goes under J1071 or J3121 either. The decision path below starts at the vial label and ends at the claim line.

For cypionate claims in more depth, see our guide to J1071.
How to bill J1071 and J3121: Units and claim lines
Both active codes bill one unit per 1 mg, so the unit count equals the milligrams given. A patient who receives a 200 mg injection of testosterone cypionate is billed 200 units of J1071.
Unit errors usually come from counting vials or milliliters instead of milligrams. A 1 mL draw from a 200 mg/mL vial is still 200 units.
Report the drug on one line and the injection on another. CPT 96372 covers the intramuscular injection and is billed once per injection, whatever the dose. A drug line without its administration line, or 96372 billed twice for one injection, triggers bundling and duplicate-service edits.
Each drug line also carries the 11-digit NDC in 5-4-2 format, with its unit qualifier and quantity. Medicaid requires it on physician-administered drug claims, and many commercial payers do too.
Pro Tip
Record the dose drawn and given in the clinical note, not only the dose ordered. If the order was 200 mg but the patient received 175 mg, bill 175 units and note why the dose changed.
Medicare and Medicaid coverage for testosterone injections
Medicare Part B covers a physician-administered testosterone injection when it is given incident to a physician’s service and the indication is documented. Payment is generally set at average sales price plus 6% (ASP+6%).
CMS publishes the per-unit payment limits for J1071 and J3121 in the quarterly Medicare Part B ASP Drug Pricing Files. Check the current quarter’s file before quoting patients or projecting revenue. The Physician Fee Schedule look-up tool does not carry these drug rates.
Before you bill Part B, check your Medicare Administrative Contractor’s (MAC) self-administered drug (SAD) exclusion list in the Medicare Coverage Database. A drug on that list is not payable under Part B, even when it is given in the office.
Local coverage determinations (LCDs) can add documentation rules beyond national policy, so search the same database for your MAC jurisdiction. Build those LCD fields into your injection note template, so the chart supports each claim before it goes out.
Medicaid coverage varies by state. Some programs pay on an ASP basis, while others use their own fee schedules or require step therapy. Keep a copy of the published state rate on file for audits.
Prior authorization for testosterone injections
Traditional Medicare does not usually require prior authorization for J1071 or J3121. Medicare Advantage plans, commercial payers and many state Medicaid programs often do, and their criteria change by plan year.
Payers that require prior authorization typically ask for:
- A diagnosis of hypogonadism or another documented indication, with its ICD-10-CM code
- Lab results showing low serum total testosterone, usually two separate readings below the payer’s threshold
- A prescribing physician attestation of medical necessity
- Failure of, or a contraindication to, alternative treatments where the plan’s criteria require it
- The planned dose, frequency and treatment duration
Total testosterone lab tests are reported with CPT 84403, so the request can cite each dated result.
Verify the requirement with the patient’s specific plan, not only the payer’s general portal. Plans within one payer family can carry different formulary tiers and criteria.
JW and JZ modifiers on testosterone claims
The JW and JZ modifiers apply only to drugs from single-dose containers. Testosterone cypionate and enanthate are often supplied in multi-dose vials, and a multi-dose vial line carries neither modifier.
Check the vial label for “single-dose” or “multi-dose” before you choose. Payers that follow Medicare policy may return a single-dose line that carries neither JW nor JZ.
Pro Tip
For single-dose vials, set up a claim template for each testosterone encounter. When drug is discarded, line 1 carries the given units and line 2 carries the discarded units with JW. When none is discarded, one line carries JZ.
Documentation requirements for J1071 and J3121 claims
The chart must support each element of the claim before it goes out. A claim paid without supporting documentation can still be recouped on audit.
- Physician order: A signed order naming testosterone cypionate or enanthate, the concentration, dose in mg, frequency and route
- Drug name and concentration: The chart note names the drug and its strength, for example testosterone cypionate 200 mg/mL
- NDC and lot number: The 11-digit NDC from the vial used, plus the lot number for controlled-substance traceability
- Dose given: The mg the patient received, not only the dose ordered, with any discarded amount from a single-dose vial
- Route and site: Intramuscular, with the injection site recorded, for example gluteus medius or deltoid
- Date of service: It matches the date on the claim exactly
- Treating provider: The name, NPI and credentials of the treating or supervising physician
- Clinical indication: The diagnosis supporting medical necessity, with its ICD-10-CM code
Testosterone cypionate and enanthate are Schedule III controlled substances, so the lot number and prescribing record matter for audits as well as billing. When the billing workflow reads from the clinical record, NDCs and lot numbers stop getting lost between the nursing note and the billing queue.
Place of service and facility vs. non-facility billing
Report the place of service where the injection was given: POS 11 for a physician office, or POS 22 or 19 for hospital outpatient. In a hospital outpatient department, the hospital usually bills the drug on its facility claim. Confirm who reports J1071 or J3121 before you submit.
Common testosterone injection denials and how to fix them
The costliest testosterone denial is also the easiest to prevent: A claim that still carries J0900. Payers reject it as invalid for the date of service, often with claim adjustment reason code (CARC) 181.
Every claim built from the same charge template fails the same way until the template changes. Sound denial management at the practice level stops one stale code from turning into months of rework.
For NDC denials, check the 5-4-2 format (labeler, product, package) and the unit qualifier. A clean claim checklist that includes NDC validation catches this class of denial before it reaches the payer.
How Pabau prevents coding errors on testosterone injection claims
Many testosterone coding errors start in a charge template that no one has reviewed in years. A code deleted in 2015 can sit in that template, and each new claim inherits it.
In Pabau’s claims management software, each claim is raised from the patient’s invoice, so the service code and units come from the visit record. Claim validation checks every claim for missing or invalid details before it leaves Pabau.
When a payer rejects a claim, Pabau shows the reason and flags it as “Needs action”, so your team can correct and resubmit it. Authorization codes follow the appointment through to the claim, which matters on Medicare Advantage and commercial plans.

Submit testosterone injection claims with fewer denials
Pabau raises each claim from the patient’s invoice and validates it before submission. Coding and unit errors get fixed in-house, not after a payer rejection.

Conclusion
If J0900 still appears anywhere in your billing setup, remove it now. Search your fee schedule, charge templates and saved superbills for the code, then map each testosterone product to J1071 or J3121 by its vial label.
That setup work takes an afternoon, while a stale code can reject claims for months. Once each NDC is tied to the right per-milligram code, units and modifiers follow from the dose. Book a demo to see how Pabau validates testosterone injection claims before they reach the payer.
Continue your research
Billing testosterone cypionate today? HCPCS code J1071: Testosterone cypionate injection billing guide walks through units, NDC reporting and denials for the active cypionate code.
Unsure how to bill the injection itself? CPT code 96372 billing guide explains when the administration code applies and which modifiers it takes.
Need a structured framework for injectable drug billing compliance? What is revenue cycle management explains how to connect clinical documentation to claim submission across an entire practice.
Billing testosterone undecanoate instead? HCPCS code J3145: Billing guide for testosterone undecanoate covers the per-milligram code for that long-acting injection.
Want to reduce claim rejections before they reach the payer? Submitting clean claims walks through the pre-submission checks that catch NDC errors, unit mismatches, and modifier problems.
Frequently asked questions
Is HCPCS code J0900 still valid?
No. J0900 was deleted effective January 1, 2015, and it has not been reactivated. Claims with a date of service from 2015 onward must use an active code.
What did J0900 describe?
J0900 described injection, testosterone enanthate and estradiol valerate, up to 1 cc. It was a combination product billed by volume, not a testosterone cypionate code.
What code do I use instead of J0900?
Use J1071 for testosterone cypionate and J3121 for testosterone enanthate. Both bill one unit per 1 mg given, so match the code to the drug named on the vial.
How many units do I bill for a 200 mg testosterone injection?
Bill 200 units. J1071 and J3121 both define one unit as 1 mg, so the unit count equals the milligrams given. Count the dose given, not the vial size or the dose ordered.
Does J1071 cover testosterone enanthate?
No. J1071 covers testosterone cypionate only. Testosterone enanthate is billed with J3121, and the NDC on the claim line must match the drug you bill.
Where do I find the Medicare payment rate for J1071 or J3121?
Check the CMS Medicare Part B ASP Drug Pricing Files, which CMS updates each quarter. The Physician Fee Schedule look-up tool does not list these drug payment limits.
Why was my J0900 claim denied?
The claim was denied because J0900 is no longer a valid code. Replace it with J1071 or J3121 to match the drug given, check the units and NDC, then resubmit.



