Fous340B OPAIS
Turn 340B OPAIS into an API
Read a covered entity's record, its contract pharmacies and your My Tasks recertifications from 340B OPAIS, one API call each. A workflow can check your contract pharmacy list each weekday morning and email you pharmacies added or terminated.
Works with your own 340B OPAIS account. Fous is an independent product.
What you can build on OPAIS
Get a covered entity's details
Build thisSearches Covered Entities by 340B ID and reads the Covered Entity Details page: participation, dates, provider numbers and contacts.
- Takes
- 340B ID
- Returns
- 340B ID, entity name, entity type, participating, start date, termination date, Medicare provider number, grant number, NPI, edit date, authorizing official, primary contact
List a covered entity's contract pharmacies
Build thisReads the Contract Pharmacy tab of one covered entity: each pharmacy with its contract ID, pharmacy ID and contract dates.
- Takes
- 340B ID, active only (optional)
- Returns
- Pharmacy name, contract ID, pharmacy ID, contract begin date, contract termination date
Check My Tasks on My Dashboard
Build thisReads the My Tasks tab of My Dashboard, where a recertification shows up as a task, and the entities listed on the My Pending tab.
- Takes
- Nothing
- Returns
- Task type, 340B ID, entity name, pending entities
Submit a contract pharmacy termination
Build thisFrom the Contract Pharmacy tab, selects Terminate, enters a Termination Date and Termination Reason for each pharmacy you name and submits it.
- Takes
- 340B ID, pharmacy names, termination date, termination reason
- Returns
- 340B ID, pharmacies submitted, termination date, confirmation message
Automate OPAIS with a workflow
A workflow runs your methods as one process, with nobody at the screen. A schedule or a call from your own system starts it, the steps run in order, and the result arrives in your inbox or in the systems you already use.
Contract pharmacies added or terminated, each entity
Build this- Starts
- Every weekday at 6:00 Eastern, after the nightly update
- Step 1
- For each 340B ID you name, list the contract pharmacies on the Contract Pharmacy tab.
- Step 2
- Keep the pharmacies that are new or whose termination date changed since the last run.
- Step 3
- Email you the changes, one section per 340B ID.
Recertification tasks on My Dashboard, every Monday
Build this- Starts
- Every Monday at 8:00
- Step 1
- Check My Tasks on My Dashboard.
- Step 2
- Stop when there are no tasks.
- Step 3
- Email you each task with its type, 340B ID and entity name.
Covered entity record changes, posted to your compliance system
Build this- Starts
- Every day at 7:00 Eastern
- Step 1
- For each 340B ID, get the covered entity's details.
- Step 2
- Keep the entities whose participating flag, termination date or edit date changed since the last run.
- Step 3
- Post each one to your webhook with 340B ID, entity name and the changed fields.
You can run a workflow by hand on every plan, Free included. Schedules and webhook triggers come with the paid plans, from $29 a month.
Once built, one call from your code
Once you have built a method, it is one POST to /v1/runs from your backend, or a tool an AI agent calls over MCP. This is what “Get a covered entity's details” would look like.
curl https://api.fous.com/v1/runs \
-H "Authorization: Bearer $FOUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "340bregistration.hrsa.gov/get_covered_entity_details",
"input": {
"id_340b": "DSH990001"
}
}'
{
"status": "completed",
"data": {
"id_340b": "DSH990001",
"entity_name": "Northwind Regional Medical Center",
"entity_type": "DSH",
"participating": true,
"start_date": "2019-07-01",
"termination_date": null,
"medicare_provider_number": "990001",
"grant_number": null,
"npi": [
"1000000001"
],
"edit_date": "2026-10-28",
"authorizing_official": {
"title": "Chief Financial Officer"
},
"primary_contact": {
"title": "340B Program Manager"
}
}
}
An example with invented data, not a ready-made endpoint. The method exists in your organization once you build it, and its name, inputs and fields follow your request.
OPAIS’s own options
HRSA says there is no separate API or web service for programmatic access at this time. It publishes daily reports of covered entities, contract pharmacies and manufacturers, the covered entity report also as JSON, and search results export to Excel. Registrations, change requests, recertification and terminations are done in OPAIS by hand, with the authorizing official attesting.
| Option | What it covers | What it takes |
|---|---|---|
| Covered Entity Daily Report (Excel and JSON) | Covered entities with their shipping addresses and contract pharmacies. | Downloaded from Reports/Files; refreshed once a day between midnight and 2:00 Eastern. |
| Contract Pharmacy and Manufacturer Daily Reports | All active and inactive contract pharmacies, and all active and inactive labeler codes. | Downloaded from Reports/Files. |
| Search and Export | Selected covered entity, contract pharmacy or manufacturer records and fields, exported to Excel. | A search in OPAIS; the export is Excel only. |
| OPAIS by hand | My Dashboard tasks, registrations, change requests, recertification and contract pharmacy terminations. | An OPAIS account for the authorizing official or primary contact. |
Read on November 12, 2026: Frequently asked questions: CE Daily Report, Daily Reports, What you can do.
Signing in to OPAIS
OPAIS asks for your email address and password, then emails a six-digit User Authentication Code at every sign-in and asks you to accept the Rules of Behavior. Five failed attempts within 5 minutes lock the account for 15 minutes. With Fous you sign in once through OPAIS's own sign-in with your own account: the login is sealed with AES-256, the emailed code is handled, and an expired session is signed back in.
Worth knowing
- The JSON report needs a session
- HRSA added JSON to the Covered Entity Daily Report for automated downloads, but its FAQ says the postbacks and button clicks must happen within a current session and view state.
- The data changes once a night
- The daily reports are rebuilt between midnight and 2:00 Eastern, so checking more than once a day adds nothing. Start and termination dates in search are updated quarterly.
- The authorizing official attests last
- A primary contact can enter registrations, changes and recertifications, but nothing reaches OPA until the authorizing official attests. Recertifications with no or low-risk changes are approved automatically.
- Recertification clears pending requests
- When recertification starts, change and termination requests awaiting OPA review are rejected, and those awaiting attestation are canceled. Missing documentation by the deadline terminates the entity.
More in Healthcare
- NHSBSA Manage Your Service
- PECOS
- PCSE Online
- CAQH Provider Data Portal
- 340B ESP
- Henry Schein online ordering
- AAH Hub
- ABC Order
- Alliance Healthcare portal (UK)
- Cardinal Health Order Express
- McKesson Connect
- PharmaClik
- NHS Supply Chain Online Catalogue
- McKesson SupplyManager
- Medline.com
Other industries: HealthSherpa, Authorized Paid Representative Portal, CARM Client Portal, Schwab Advisor Center, INTTRA, RMIS.
Frequently asked questions
No. HRSA states there is no separate API or web service for programmatic access by external vendors at this time. The Covered Entity Daily Report comes as JSON and Excel, the contract pharmacy and manufacturer reports are daily downloads, and search results export to Excel.
Once a day, between midnight and 2:00 Eastern. HRSA notes that most vendors download it once early in the day or once a week, since a second download the same day has the same content.
Only the signed-in authorizing official or primary contact of the covered entity, from the Contract Pharmacy tab with Terminate. Each pharmacy needs a Termination Date and a Termination Reason, and the authorizing official attests before it goes to OPA.
They are cleared. Change and termination requests awaiting OPA review are rejected, those awaiting attestation are canceled, and the authorizing official and primary contact get an email.
No. Fous is an independent product. You use it with your own OPAIS account, and a method reads and does only what that account can.
Put 340B OPAIS behind an API call
Describe one job in Studio and see the method it builds, with 100 credits a month and no credit card, or book a demo and bring the sites your team signs in to.

Read nextHenry Schein online orderingAAH HubABC OrderHealthSherpaHow methods workHow workflows run
Fous is an independent product: it is not affiliated with, endorsed by or sponsored by the operator of 340B OPAIS (HRSA Office of Pharmacy Affairs). The name is used only to say which system this page is about. Something here wrong or out of date? Write to legal@fous.com.