Model
Do not model onboarding as an internal-only workflow.
PhysicianCan enter their own NPI, confirm profile details, publish priced services, and add availability after verification.Practice adminCan onboard and manage multiple providers for the same SCP or clinic organization.Front desk preparerCan prepare operational details for an authorized approver to attest.WorkforceCan support or remediate onboarding, but should not be the default product model.Prefill
Start with a public NPI readback.
Prefill is public and read-only. It tells the UI what OpenDoc knows about the provider before any claim or activation write happens.
curl https://api.opendoc.com/provider-onboarding/prefill/1467980912
Activation gates
Activation makes the provider live; Stripe KYC makes them instant-bookable.
NPI matchThe NPI must resolve in the OpenDoc provider directory/reference source.ServiceAt least one selected HSO must be bookable and priced with a real cash price.AvailabilityAt least one open availability slot is required.ContactA front-office email or phone is required so the practice can be notified on each booking.PayoutsStripe Connect is not required to activate, but until the practice completes Stripe Connect KYC (charges enabled) the provider is presented as request-visit only: no instant book and no confirmed-price presentation. Bookability turns on automatically the moment KYC completes.Activation example
Production activation is authenticated.
In production, anonymous activation writes are blocked. The caller must resolve to a provider/SCP access actor, provider agent, or workforce actor with onboarding/catalog permissions.
curl https://api.opendoc.com/provider-onboarding/activate \
-X POST \
-H "Authorization: Bearer $OPENDOC_PROVIDER_OR_WORKFORCE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"npi": "1467980912",
"givenName": "Charles",
"familyName": "DeCook",
"displayName": "Charles DeCook, MD",
"primarySpecialty": "Orthopedic Surgery",
"practice": {
"name": "Example Orthopedic Clinic",
"contactName": "Front Desk",
"frontOfficeEmail": "[email protected]",
"frontOfficePhone": "+1-555-0100"
},
"services": [
{
"hsoId": "00000000-0000-4000-8000-000000000003",
"cashPriceCents": 27500
}
],
"availability": [
{
"startsAt": "2026-07-08T14:00:00.000Z",
"endsAt": "2026-07-08T14:30:00.000Z"
}
]
}'
Separate directory visibility from bookability. A provider can exist in search/reference data before they are claimed, activated, priced, and transactable.