For AI agents: the documentation index is at /docs/payerbox/llms.txt. A Markdown version of this page is available at /docs/payerbox/api-reference/configuration-resources/um-tenant-config.md or by requesting it with the Accept: text/markdown header.
Payerbox Docs

UMTenantConfig

Custom resource that configures forwarding of Prior Auth submissions to a payer's utilization management (UM) system. Its StructureDefinition is registered by Payerbox at startup; instances are managed over the FHIR REST API at <base>/fhir/UMTenantConfig.

One instance per payer per UM system. Instances are re-read about once a minute, so changes apply without a restart. Narrative overview: UM System Integration.

Authentication

UMTenantConfig is an administrative resource — access is governed by the same Aidbox access policies as any other resource, and is not part of the PAS partner-facing scope set. See Authentication.

Routing

ElementCard.TypeDescription
connector1..1codeguidingcare or pas-passthrough. Any other value invalidates the config
insurer.reference0..1stringOrganization reference matched against Claim.insurer
insurer.identifier.system0..1uriIdentifier system matched against the submitted insurer Organization
insurer.identifier.value0..1stringIdentifier value

Identifier match is attempted first and requires the insurer Organization to be present in the submitted Bundle. Reference match compares the last two path segments, so Organization/payer-1 and http://example.org/fhir/Organization/payer-1 are equivalent.

Endpoint and delivery policy

ElementCard.TypeDefaultDescription
endpoint.baseUrl0..1urlBase URL of the UM API
endpoint.timeoutMs0..1integer30000Per-attempt request timeout
endpoint.connectTimeoutMs0..1integer10000Connect timeout
endpoint.retry.maxAttempts0..1integer5Delivery attempts before the Task fails
endpoint.retry.backoffSeconds0..*integer[30, 120, 600, 1800]Delay per attempt; the last value repeats
endpoint.reconcile.maxAttempts0..1integer5Reconciliation attempts for an ambiguous delivery
endpoint.reconcile.delaySeconds0..1integer300Delay between reconciliation attempts
endpoint.headers.name1..1stringGateway header name
endpoint.headers.value0..1stringLiteral header value
endpoint.headers.valueEnv0..1stringEnvironment variable holding the value

Each header entry needs exactly one of value or valueEnv.

Authentication to the UM system

ElementCard.TypeDescription
endpoint.auth.type0..1codeoauth2-client-credentials, api-key, or none (default when absent)
endpoint.auth.tokenUrl0..1urlOAuth2 token endpoint
endpoint.auth.clientId0..1stringOAuth2 client id, literal
endpoint.auth.clientIdEnv0..1stringEnvironment variable holding the client id
endpoint.auth.clientSecretEnv0..1stringEnvironment variable holding the client secret
endpoint.auth.scope0..1stringOAuth2 scope, literal
endpoint.auth.scopeEnv0..1stringEnvironment variable holding the scope
endpoint.auth.headerName0..1stringHeader carrying the key, for api-key
endpoint.auth.valueEnv0..1stringEnvironment variable holding the key value

Secrets are always referenced by environment-variable name. There is no element that stores a secret value.

Transform

ElementCard.TypeDescription
insurerReference0..1stringOrganization reference stamped on the outgoing UM Claim. Required in practice — a blank value invalidates the config
defaults.authRequester0..1stringFallback authRequester. Without it, delivery fails unless the request supplies the value
defaults.authType0..1stringFallback authType
defaults.treatmentType0..1stringFallback treatmentType
defaults.authCurrentOwner0..1stringSent only when present
requiredSupplemental.name1..1stringSupplemental field the UM tenant template requires
requiredSupplemental.value0..1stringFallback value when the request carries no matching Claim.supportingInfo entry
lobBenId.identifierSystem0..1uriCoverage.identifier system carrying the member's line-of-business benefit id
conceptMaps.name1..1stringMapping name from the table below
conceptMaps.reference1..1stringConceptMap reference
inquireRefresh0..1booleanFetch the live decision from the UM system on Claim/$inquire (default false)
passThroughExtensions0..1booleanForward vendor extensions already present on the inbound Claim (default false)

The transform elements above are consumed by the guidingcare connector. pas-passthrough forwards the PAS Bundle unchanged and uses only routing, endpoint and inquireRefresh.

ConceptMap names

conceptMaps.nameTranslatesNotes
claimType->authClassClaim.type → UM authorization classFalls back to outpatient
service->authTypeClaim.item[0].productOrServiceauthTypeOverridden by Claim.subType; falls back to defaults.authType
service->treatmentTypeClaim.item[0].productOrServicetreatmentTypeFalls back to defaults.treatmentType
priority->authPriorityClaim.priority → UM priorityRequired — no mapping and no unmapped default fails delivery
pos->labelClaim.item[0].locationCodeableConcept → place-of-service labelMay depend on the resolved auth class via dependsOn on property urn:prior-auth:um:authClass
careTeamRole->slotClaim.careTeam.rolereferred-by, referred-to, rendering, facility, admittingTarget system urn:prior-auth:um:provider-slot
providerNpi->gcIdNPI → the UM system's internal provider idFalls back to the NPI when unmapped
decisionStatus->reviewActionUM decision status → X12 005010/306 reviewActionFalls back to A4 (Pended)

A ConceptMap group may declare unmapped with mode: "fixed" to supply a default target. Targets with equivalence unmatched or disjoint are ignored.

Examples

{
  "resourceType": "UMTenantConfig",
  "id": "payer-1-um",
  "connector": "pas-passthrough",
  "insurer": {
    "reference": "Organization/payer-1",
    "identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "1234567893" }
  },
  "endpoint": {
    "baseUrl": "https://um.example.org/fhir",
    "timeoutMs": 30000,
    "retry": { "maxAttempts": 5, "backoffSeconds": [30, 120, 600, 1800] },
    "auth": {
      "type": "oauth2-client-credentials",
      "tokenUrl": "https://um.example.org/auth/token",
      "clientIdEnv": "UM_PAYER1_CLIENT_ID",
      "clientSecretEnv": "UM_PAYER1_CLIENT_SECRET",
      "scopeEnv": "UM_PAYER1_SCOPE"
    }
  },
  "insurerReference": "Organization/payer-1",
  "inquireRefresh": true
}
{
  "resourceType": "UMTenantConfig",
  "id": "payer-2-guidingcare",
  "connector": "guidingcare",
  "insurer": {
    "reference": "Organization/payer-2",
    "identifier": { "system": "http://hl7.org/fhir/sid/us-npi", "value": "9876543210" }
  },
  "endpoint": {
    "baseUrl": "https://um-gateway.example.net/epa",
    "timeoutMs": 90000,
    "retry": { "maxAttempts": 5, "backoffSeconds": [30, 120, 600, 1800] },
    "auth": {
      "type": "oauth2-client-credentials",
      "tokenUrl": "https://login.example.net/oauth2/v2.0/token",
      "clientIdEnv": "UM_PAYER2_CLIENT_ID",
      "clientSecretEnv": "UM_PAYER2_CLIENT_SECRET",
      "scopeEnv": "UM_PAYER2_SCOPE"
    },
    "headers": [
      { "name": "ocp-apim-subscription-key", "valueEnv": "UM_PAYER2_SUBSCRIPTION_KEY" },
      { "name": "tenant-id", "value": "payer-2-tenant" }
    ]
  },
  "insurerReference": "Organization/payer2.example.net",
  "defaults": {
    "authRequester": "CONTRACTED PROVIDER",
    "authType": "Durable Medical Equipment Medicaid (MLTC)",
    "treatmentType": "Durable Medical Equipment"
  },
  "requiredSupplemental": [{ "name": "AOR on File?", "value": "Yes" }],
  "lobBenId": { "identifierSystem": "https://example.net/lobBenID" },
  "conceptMaps": [
    { "name": "claimType->authClass", "reference": "ConceptMap/um-payer2-authclass" },
    { "name": "priority->authPriority", "reference": "ConceptMap/um-payer2-authpriority" },
    { "name": "pos->label", "reference": "ConceptMap/um-payer2-pos" },
    { "name": "careTeamRole->slot", "reference": "ConceptMap/um-payer2-provider-roles" },
    { "name": "providerNpi->gcId", "reference": "ConceptMap/um-payer2-provider-npi" },
    { "name": "decisionStatus->reviewAction", "reference": "ConceptMap/um-payer2-reviewaction" }
  ],
  "inquireRefresh": false,
  "passThroughExtensions": false
}

Readiness

Each config compiles to ready or invalid. An invalid config is excluded from routing: its payer's submissions are stored and returned as queued, but never delivered. Check GET /health:

{
  "um": {
    "tenants": {
      "payer-1-um": { "status": "ready", "gaps": [], "warnings": [] },
      "payer-2-guidingcare": {
        "status": "invalid",
        "gaps": ["env UM_PAYER2_CLIENT_SECRET not set", "ConceptMap/um-payer2-pos not found"],
        "warnings": []
      }
    }
  }
}
ConditionEffect
connector unknownGap — invalid
insurerReference blankGap — invalid
Environment variable named by clientSecretEnv, valueEnv or a header valueEnv not setGap — invalid
oauth2-client-credentials with neither clientId nor clientIdEnvGap — invalid
Referenced ConceptMap missing or not compilableGap — invalid
defaults.authRequester absentWarning — config stays ready; delivery fails unless the request supplies the value

Gaps found at delivery time rather than at load time (for example a Coverage without the lobBenId identifier system) fail that Task and are recorded in ClaimResponse.error[].

Header and auth values are read from the environment of the Prior Auth service. Adding a new environment variable requires a restart; changing anything inside the resource does not.

Last updated: