Skip to content

Create Credentialing Row

Creates a credentialing row for one billing-profile/payer/entity combination.

Endpoint

POST /v2/credentialing

Request Body

Parameter Type Required Description
billing_profile_id string Yes The billing profile this record belongs to.
payer_id string Yes The billing-profile payer row's id — from List Billing Profile Payers. Not the payer registry id.
entity string Yes Who this row is for: the literal string GROUP for the org-level row, or a provider id for an individual row.
in_network boolean No Whether the provider is in-network with this payer. On a billing-profiles organisation it's derived, like network_status.
network_status string No Whether the relationship is in-network or out-of-network. On a billing-profiles organisation it's derived: IN_NETWORK when the row is in network on its dates, OUT_OF_NETWORK otherwise. Writing OUT_OF_NETWORK there ends a row that covered past dates today; otherwise it marks a provider row not_credentialed and clears a GROUP row's dates. One of IN_NETWORK, OUT_OF_NETWORK.
effective_from string (date) No YYYY-MM-DD.
effective_to string (date) No YYYY-MM-DD.
submitted_at string (date) No Date the application was submitted, YYYY-MM-DD.
approved_at string (date) No When the payer approved the application. Drives derived_status. YYYY-MM-DD.
committee boolean No Whether this row went through committee review. On a billing-profiles organisation it reads true exactly when committee_date is set, and true sent without a date sets committee_date to today.
claim_hold object No Puts claims on hold for this row. Individual rows only — not accepted when entity is GROUP. See Claim Hold.
cosigner object No The co-signer covering this row while credentialing is in progress. Individual rows only — not accepted when entity is GROUP. The co-signer must hold an ACTIVE credentialing row on the same billing profile and payer. See Cosigner.
plan string No Omit (or DEFAULT) for the DEFAULT row. A card plan type creates that plan's override row, pre-filled from the DEFAULT row, which must exist. Billing-profiles organisations only.
committee_date string (date) No The date the committee approved the provider, YYYY-MM-DD. Billing-profiles organisations only; left out of responses when unset.
not_credentialed boolean No Provider rows: the payer refused to credential this provider. Billing-profiles organisations only; left out of responses unless true.
not_accepted boolean No GROUP rows: the payer does not accept the clinic. Billing-profiles organisations only; left out of responses unless true.

Claim Hold

Parameter Type Required Description
from string (date) or null Conditional When the hold starts. Required when claim_hold is sent. YYYY-MM-DD.
to string (date) or null No When the hold ends. null for an open-ended hold. YYYY-MM-DD.

Cosigner

Parameter Type Required Description
provider_id string or null Conditional The co-signing provider. Required when cosigner is sent.
effective_from string (date) or null No YYYY-MM-DD.
effective_to string (date) or null No YYYY-MM-DD.

Request

Create a provider's row:

curl --location '{base_url}/v2/credentialing' \
  --header 'Authorization: Bearer JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "billing_profile_id": "b7e4c1a2-6f3d-4e9b-9a51-2c8d0f7e3a14",
  "payer_id": "9f1c8a2e-4b31-4d0a-9c77-2f5ab8e10c44",
  "entity": "d27a6b10-9f34-4e82-b5c1-7a03e8946fd2",
  "network_status": "IN_NETWORK",
  "effective_from": "2026-01-01",
  "submitted_at": "2026-06-01",
  "approved_at": "2026-07-15",
  "claim_hold": {
    "from": "2026-09-01",
    "to": null
  }
}'

Response

Success Response

Code: 201 Created

{
  "id": "3a6d2f8b-1c4e-4b7a-8e2d-5f9c0a1b3d7e",
  "billing_profile_id": "b7e4c1a2-6f3d-4e9b-9a51-2c8d0f7e3a14",
  "payer_id": "9f1c8a2e-4b31-4d0a-9c77-2f5ab8e10c44",
  "payer_name": null,
  "entity": "d27a6b10-9f34-4e82-b5c1-7a03e8946fd2",
  "entity_name": "Morgan Delgado",
  "npi_type": "INDIVIDUAL",
  "in_network": true,
  "network_status": "IN_NETWORK",
  "effective_from": "2026-01-01",
  "effective_to": null,
  "submitted_at": "2026-06-01",
  "approved_at": "2026-07-15",
  "committee": false,
  "claim_hold": {
    "from": "2026-09-01",
    "to": null
  },
  "cosigner": {
    "provider_id": "d27a6b10-9f34-4e82-b5c1-7a03e8946fd2",
    "effective_from": "2026-01-01",
    "effective_to": null
  },
  "derived_status": "ACTIVE",
  "retroactive": {
    "applies": true,
    "days": 30
  },
  "profile_payer_credentialing_id": null,
  "plan": "DEFAULT",
  "credentialing_status": "CREDENTIALED",
  "group_network_status": "IN_NETWORK"
}

The Location header carries the URL of the created resource.

Response Fields

Field Type Description
id string The credentialing row's id.
billing_profile_id string or null The billing profile this record belongs to.
payer_id string or null The billing-profile payer row's id — from List Billing Profile Payers. Not the payer registry id.
payer_name string or null
entity string Who this row is for: the literal string GROUP for the org-level row, or a provider id for an individual row.
entity_name string or null Display name for entity — "Group" for the GROUP row, otherwise the provider's name.
npi_type string or null Whether this is a group NPI or an individual NPI. One of GROUP, INDIVIDUAL.
in_network boolean or null Whether the provider is in-network with this payer. On a billing-profiles organisation it's derived, like network_status.
network_status string or null Whether the relationship is in-network or out-of-network. On a billing-profiles organisation it's derived: IN_NETWORK when the row is in network on its dates, OUT_OF_NETWORK otherwise. Writing OUT_OF_NETWORK there ends a row that covered past dates today; otherwise it marks a provider row not_credentialed and clears a GROUP row's dates. One of IN_NETWORK, OUT_OF_NETWORK.
effective_from string or null
effective_to string or null
submitted_at string or null Date the application was submitted, YYYY-MM-DD.
approved_at string or null When the payer approved the application. Drives derived_status.
committee boolean Whether this row went through committee review. On a billing-profiles organisation it reads true exactly when committee_date is set, and true sent without a date sets committee_date to today.
claim_hold object or null Puts claims on hold for this row. null releases the hold. Set through Hold Claims / Release Claims, or inline on create and update. See Claim Hold.
cosigner object or null The co-signer covering this row while credentialing is in progress. null removes it. The co-signer must hold an ACTIVE credentialing row on the same billing profile and payer. See Cosigner.
derived_status string Computed from submitted_at, approved_at, effective_from and effective_to — never set directly. One of NONE, SUBMITTED, DUE, ACTIVE, EXPIRED.
retroactive object or null Derived from the payer's retroactive credentialing rules. Never set directly. See Retroactive.
profile_payer_credentialing_id integer or null A stable id in the downstream billing system, once published. null before publish.
plan string DEFAULT (every plan) or the card plan type this row overrides. Billing-profiles organisations only; absent elsewhere.
credentialing_status string Computed from the row's dates and refusal flag — never set directly. A GROUP row: IN_NETWORK, PENDING, NOT_ACCEPTED or NO_CONTRACT. A provider row: CREDENTIALED, PENDING, NOT_CREDENTIALED, ENDED or NONE. Billing-profiles organisations only. One of IN_NETWORK, PENDING, NOT_ACCEPTED, NO_CONTRACT, CREDENTIALED, NOT_CREDENTIALED, ENDED, NONE.
group_network_status string The credentialing_status of the clinic (GROUP) row for this row's billing profile, payer and plan, falling back to its DEFAULT row; NO_CONTRACT when there is none. Billing-profiles organisations only. One of IN_NETWORK, PENDING, NOT_ACCEPTED, NO_CONTRACT.
not_credentialed boolean Provider rows: the payer refused to credential this provider. Billing-profiles organisations only; left out of responses unless true.
not_accepted boolean GROUP rows: the payer does not accept the clinic. Billing-profiles organisations only; left out of responses unless true.
committee_date string or null The date the committee approved the provider, YYYY-MM-DD. Billing-profiles organisations only; left out of responses when unset.

Claim Hold

Field Type Description
from string or null When the hold starts.
to string or null When the hold ends. null for an open-ended hold.

Cosigner

Field Type Description
provider_id string or null The co-signing provider.
effective_from string or null
effective_to string or null

Retroactive

Field Type Description
applies boolean Whether a retroactive grace period applies to this row.
days integer Length of the retroactive window in days; 0 when applies is false.

Error Response

Code: 400 Bad Request

{
  "code": "bad_request",
  "message": "Validation failed",
  "errors": [
    {
      "field": "patient_id",
      "message": "must be a string"
    }
  ]
}

Every error has the same shape — a machine-readable code, a message, and an errors[] array that's empty when there's nothing field-specific to report. The HTTP status is authoritative.

Status code Meaning
400 Bad Request bad_request The request body or parameters failed validation. errors[] names the offending fields.
401 Unauthorized unauthorized The access token is missing, malformed or expired.
403 Forbidden forbidden The request references a resource outside the token's organisation or clinic scope.
404 Not Found not_found No such resource, or it's outside your scope.
409 Conflict conflict The record conflicts with existing state — see the endpoint's notes.
412 Precondition Failed precondition_failed If-Match is stale. Re-read the resource and retry.
423 Locked locked The organisation has a publish in progress. Retry once it finishes.
428 Precondition Required precondition_required If-Match is required on this write.
429 Too Many Requests rate_limited Rate limit exceeded. Back off and retry.
500 Internal Server Error internal_error Unexpected server error.
502 Bad Gateway upstream_error Upstream service failed or timed out.

Notes

  • payer_id here is the billing-profile payer row id — from List Billing Profile Payers, not the payer registry id.
  • entity is the literal string GROUP for the org-level row, or a provider id for an individual row.
  • 409 on a duplicate (billing profile, payer, entity).
  • On a billing-profiles organisation, a create matching a row that was ended and kept as history returns 409 CRED_ROW_ENDED: extend that row's effective_to with Update Credentialing Row instead, which re-opens it.
  • On a billing-profiles organisation, plan set to a card plan type creates that plan's override row, pre-filled from the DEFAULT row, which must exist; without plan the DEFAULT row is created, as before. payer_id stays the payer's DEFAULT row either way.
  • network_status / in_network and committee are still accepted there: IN_NETWORK keeps the row with its dates (undated reads as incomplete, not in network), and committee: true without committee_date sets it to today.
  • On other organisations a card plan type in plan, a committee_date, or not_credentialed / not_accepted set to true returns 400 BILLING_PROFILES_ONLY; plan: "DEFAULT" and false are accepted.
  • plan, include_plan_overrides, credentialing_status, group_network_status, committee_date, not_credentialed and not_accepted arrive with the payer-credentialing release. Until it reaches your environment they are absent from responses and refused on writes (400).
  • When onboarding refuses a write, each errors[] entry carries a code naming the rule that failed, and field names the field in snake_case, as this API spells it (an empty field means the whole row, or the whole create, not one field). A 400 for a body that fails this API's own schema check (an unknown field, a wrong type, a value outside the listed ones) has no code; its field is the JSON pointer of the offending value (/effective_from) or the name of the missing field. Codes from this endpoint: DUPLICATE_PLAN_ROW (409, the plan's row exists), CRED_ROW_ENDED (409, the row exists as history), PLAN_OVERRIDE_NEEDS_DEFAULT, PLAN_INVALID, REFUSAL_WITH_DATES (not_credentialed or not_accepted together with dates), COSIGNER_NOT_AFFILIATED, COSIGNER_NO_EMR_ID, COSIGNER_SELF, COSIGNER_NOT_CREDENTIALED, BILLING_PROFILES_ONLY.
  • claim_hold and cosigner apply to individual rows only — not to GROUP.