Skip to content

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 this

    Searches 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 this

    Reads 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 this

    Reads 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 this

    From 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.

Example request
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"
    }
  }'
Example response
{
  "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.

OptionWhat it coversWhat 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 ReportsAll active and inactive contract pharmacies, and all active and inactive labeler codes.Downloaded from Reports/Files.
Search and ExportSelected covered entity, contract pharmacy or manufacturer records and fields, exported to Excel.A search in OPAIS; the export is Excel only.
OPAIS by handMy 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

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.