> ## Documentation Index
> Fetch the complete documentation index at: https://docs.readyhealth.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> How requirements move from VMS and checklists through fulfillment and back to the VMS

A **requirement** is a compliance item a candidate must satisfy for a job or placement — for example a BLS card, a TB test, or an OIG exclusion check.

Ready Health owns the loop around those items:

1. **Ingest** the requirement list from the VMS or another source
2. **Fulfill** each item with a document, registry search, primary source verification or generated statement
3. **Upload** the compiled packet back to the VMS

```mermaid actions={false} theme={null}
flowchart TD
    api["Job / Placement API"] --> sync["Requirement sync"]
    sources["VMS, MSP email, or pre-configuration"] --> sync
    sync --> list["Requirement list"]
    list --> fulfill["Fulfillment"]
    fulfill --> docs["Documents"]
    fulfill --> searches["Searches"]
    fulfill --> stmts["Statements"]
    docs --> upload["Upload to VMS"]
    searches --> upload
    stmts --> upload
```

## What triggers the lifecycle

Creating or updating a [job](/api-reference/endpoint/create-job) or [placement](/api-reference/endpoint/create-placement) queues the sync. Which source Ready Health reads from — VMS scrape, MSP email, or a pre-configured template — is set per integration. Ready Health manages access credentials to the VMS and ATS systems required.

See [Requirement ingestion](/guides/requirement-ingestion) for sources and the resulting requirement list.

## What fulfillment looks like

Each ingested requirement has a `fulfillmentType`:

| Type | What Ready Health creates |
| - | - |
| `DOCUMENT` | A document slot the candidate (or your app) fills |
| `REGISTRY_SEARCH` | A [search](/guides/search) (exclusions, license verification, etc.) |
| `STATEMENT` | A generated [statement](/guides/statements) |
| `PASS_THROUGH` | No new artifact — the item is already satisfied or handled outside Ready Health |

`GET /placement/{id}` returns the candidate’s requirement rows and their status (`PENDING` → `IN_PROGRESS` → `FULFILLED`, plus reject / expire / skip states).

## Uploading back to the VMS

Once the relevant requirements are `FULFILLED`, call [Upload Packet to VMS](/api-reference/endpoint/upload-packet). Upload is async; poll [package status](/api-reference/endpoint/get-package-status) until the packet is `UPLOADED`.

See [VMS Upload](/guides/vms-upload).
