Skip to content

Bulk Create Credentialing Rows

Creates credentialing rows for every combination of the given billing profiles and payers.

Endpoint

POST /v2/credentialing/bulk

Request Body

Parameter Type Required Description
billing_profile_ids array of string Yes Billing profiles to create rows for.
payer_ids array of string Yes Billing-profile payer row ids to cross with billing_profile_ids.
scope string Yes Which rows to create for each billing-profile/payer pair: the GROUP row, one row per provider, or both. One of GROUP, INDIVIDUAL, BOTH.
provider_ids array of string No Providers to cross with billing_profile_ids.
in_network boolean No Whether the provider is in-network with this payer.
network_status string No Whether the relationship is in-network or out-of-network.
effective_from string No
effective_to string No
only_missing boolean No Skip a (billing profile, payer, entity) combination that already has a row, instead of erroring.

Request

curl --location '{base_url}/v2/credentialing/bulk' \
  --header 'Authorization: Bearer JWT_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "billing_profile_ids": [
    "b7e4c1a2-6f3d-4e9b-9a51-2c8d0f7e3a14"
  ],
  "payer_ids": [
    "9f1c8a2e-4b31-4d0a-9c77-2f5ab8e10c44"
  ],
  "scope": "BOTH",
  "provider_ids": [
    "d27a6b10-9f34-4e82-b5c1-7a03e8946fd2"
  ],
  "in_network": true,
  "network_status": "IN_NETWORK",
  "effective_from": "2026-01-01",
  "effective_to": null,
  "only_missing": true
}'

Response

Success Response

Code: 200 OK

{
  "created": 12,
  "skipped": 3
}

Response Fields

Field Type Description
created integer Rows created.
skipped integer Rows skipped — already existed and only_missing was set, or no matching payer or provider.

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

  • scope controls which rows are created per pair: the GROUP row, one row per provider_ids entry, or BOTH.
  • only_missing skips a combination that already has a row instead of erroring.