Skip to content

Update Credentialing Row

Updates a credentialing row and returns the updated record.

Endpoint

PATCH /v2/credentialing/{credentialing_id}

Path Parameters

Parameter Type Required Description
credentialing_id string Yes The credentialing row's id.

Headers

Header Required Description
If-Match Yes ETag from a prior read, or *. A missing value returns 428; a stale one 412.

Request Body

Parameter Type Required Description
in_network boolean or null No 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 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.
effective_from string or null No
effective_to string or null No
submitted_at string or null No Date the application was submitted, YYYY-MM-DD.
approved_at string or null No When the payer approved the application. Drives derived_status.
committee boolean or null 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 or null No Puts claims on hold for this row. null releases the hold. Not accepted on a GROUP row.
cosigner object or null No The co-signer covering this row. null removes it. Not accepted on a GROUP row.
committee_date string or null No The date the committee approved the provider, YYYY-MM-DD. Billing-profiles organisations only; left out of responses when unset.
not_credentialed boolean or null No Provider rows: the payer refused to credential this provider. Billing-profiles organisations only; left out of responses unless true.
not_accepted boolean or null No GROUP rows: the payer does not accept the clinic. Billing-profiles organisations only; left out of responses unless true.

Request

Send only the fields to change:

curl --location '{base_url}/v2/credentialing/3a6d2f8b-1c4e-4b7a-8e2d-5f9c0a1b3d7e' \
  --request PATCH \
  --header 'Authorization: Bearer JWT_TOKEN' \
  --header 'If-Match: "<etag>"' \
  --header 'Content-Type: application/merge-patch+json' \
  --data '{
  "approved_at": "2026-07-15"
}'

Response

Success Response

Code: 200 OK

{
  "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"
}

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

  • PATCH is a JSON Merge Patch (RFC 7386): an omitted field is left alone, an explicit null clears it, and an array replaces the existing one wholesale.
  • Send at least one field — an empty body returns 400.
  • Send If-Match with the ETag from a prior read. * opts into last-writer-wins. A stale value returns 412; a missing one returns 428.
  • claim_hold: null releases the hold; cosigner: null removes the co-signer.
  • Only the fields listed above are accepted; any other returns 400.
  • committee_date, not_credentialed (provider rows) and not_accepted (GROUP rows) are for billing-profiles organisations: elsewhere sending any of them — even as null or false — returns 400 BILLING_PROFILES_ONLY. network_status: "OUT_OF_NETWORK" on a billing-profiles organisation ends a row that covered past dates today; otherwise it marks a provider row not_credentialed and clears a GROUP row's dates.
  • A history row (one ended by a delete, a payer detach or a provider delete) is re-opened by moving its effective_to past the clinic-local today, or clearing it. A history row can't be edited (400 CRED_ROW_READ_ONLY) when its provider was deleted, its payer is no longer on its billing profile, or it is a plan override row whose plan had its own payer row when the row ended and that payer row has since been removed.
  • 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: PAST_COVERAGE_LOCKED, CRED_ROW_READ_ONLY, REFUSAL_WITH_DATES, COSIGNER_NOT_AFFILIATED, COSIGNER_NO_EMR_ID, COSIGNER_SELF, COSIGNER_NOT_CREDENTIALED, FORBIDDEN_WHEN (a provider-row field on a GROUP row, or the reverse), BILLING_PROFILES_ONLY.