Skip to main content
POST
/
v1
/
prior-authorizations
Create a prior authorization
curl --request POST \
  --url https://api.example.com/v1/prior-authorizations \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "requesting_provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "patient_data": {
    "first_name": "<string>",
    "last_name": "<string>",
    "date_of_birth": "2023-12-25"
  },
  "payor_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "payor_data": {
    "insurance_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "member_id": "ABC123456"
  },
  "service": {
    "specialty": "aba",
    "service_type_codes": [
      "AS"
    ],
    "start_date": "2025-01-01",
    "end_date": "2025-12-31",
    "cpt_codes": [
      {
        "code": "97153",
        "units": "160"
      }
    ],
    "locations": [
      "office",
      "home"
    ]
  },
  "servicing_provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "servicing_location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "notes": "<string>",
  "scheduled_submission_date": "2025-02-01",
  "copy_files_from_prior_authorization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "company_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "patient_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "patient_first_name": "<string>",
  "patient_last_name": "<string>",
  "patient_date_of_birth": "2023-12-25",
  "active": true,
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "created_by_user_id": "<string>",
  "appeal_notes": "<string>",
  "appeal_number": "<string>",
  "appeal_availability": [
    {
      "day": "<string>",
      "start": "<string>",
      "end": "<string>"
    }
  ],
  "notes": "<string>",
  "payor_member_id": "<string>",
  "payor_insurance_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "payor_insurance": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>"
  },
  "requesting_provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "servicing_provider_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "servicing_location_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "requesting_provider": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "npi": "<string>",
    "type": "<string>",
    "is_active": true,
    "tax_id": "<string>",
    "location": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "name": "<string>"
    }
  },
  "servicing_provider": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "npi": "<string>",
    "type": "<string>",
    "is_active": true,
    "tax_id": "<string>",
    "location": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "name": "<string>"
    }
  },
  "servicing_location": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "address": "<string>",
    "city": "<string>",
    "state": "<string>",
    "zip_code": "<string>",
    "address_2": "<string>"
  },
  "created_by_user": {
    "id": "<string>",
    "name": "<string>",
    "email": "<string>",
    "image": "<string>",
    "user_type": "<string>"
  },
  "service": {
    "service_type_codes": [
      "<string>"
    ],
    "start_date": "2023-12-25",
    "end_date": "2023-12-25",
    "cpt_codes": [
      {
        "code": "<string>",
        "units": "<string>",
        "unit_type": "units"
      }
    ],
    "locations": []
  },
  "result": {
    "start_date": "2023-12-25",
    "end_date": "2023-12-25",
    "cpt_codes": [
      {
        "code": "<string>",
        "units": "<string>",
        "unit_type": "units"
      }
    ],
    "locations": [],
    "authorization_number": "<string>",
    "reference_number": "<string>",
    "notes": "<string>",
    "ai_summary": "<string>",
    "ai_summary_generated_at": "2023-11-07T05:31:56Z"
  },
  "files": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "name": "<string>",
      "path": "<string>",
      "created_at": "2023-11-07T05:31:56Z",
      "display_name": "<string>",
      "type": "<string>",
      "size": 123,
      "metadata": {},
      "url": "<string>"
    }
  ],
  "file_count": 123,
  "submitted_at": "2023-11-07T05:31:56Z",
  "decided_at": "2023-11-07T05:31:56Z",
  "last_followed_up_at": "2023-11-07T05:31:56Z",
  "scheduled_submission_date": "2023-12-25",
  "completed": false,
  "completed_at": "2023-11-07T05:31:56Z",
  "completed_by_user_id": "<string>",
  "completed_by_user": {
    "id": "<string>",
    "name": "<string>",
    "email": "<string>",
    "image": "<string>",
    "user_type": "<string>"
  }
}

Authorizations

X-API-Key
string
header
required

Body

application/json

Create a prior authorization.

Provide exactly one of patient_id (existing patient id) or patient_data (inline demographics; server find-or-creates).

Optionally provide one of payor_id (existing patient-payor id, validated to belong to the resolved patient) or payor_data (inline; server links to an existing payor row on the resolved patient that matches the catalog id). If neither is provided and no payor exists on the patient for that catalog id, the authorization is created without a linked payor.

type
enum<string>
required

Authorization category. assessment for an initial evaluation, treatment for ongoing services, reassessment for a renewed evaluation of an existing authorization, reassessment_and_treatment for a combined re-assessment plus continued-treatment request.

Available options:
assessment,
treatment,
reassessment,
reassessment_and_treatment
Example:

"treatment"

requesting_provider_id
string<uuid>
required

Credentialing record id for the provider requesting the authorization.

patient_id
string<uuid> | null

Existing patient id. When provided, the patient is looked up by id (must belong to your company and be active). Mutually exclusive with patient_data.

patient_data
PatientInlineData · object

Inline demographics for find-or-create resolution. The server looks up an existing patient by (first_name, last_name, date_of_birth); if not found, a new patient is created and normal patient-created side effects fire (webhook, workflow automation, activity log). Mutually exclusive with patient_id.

payor_id
string<uuid> | null

Existing patient-payor id (must belong to the resolved patient and be active). Mutually exclusive with payor_data. Write-only resolution input — this id is used to derive and freeze the member id + insurance id onto the authorization at create time. It is NOT returned on the resource. To read payor information, use payor_member_id, payor_insurance_id, and payor_insurance on the response.

payor_data
PayorInlineData · object

Inline payor reference by catalog id. The server looks up an existing payor row on the resolved patient that points to this catalog entry; if none, the authorization is created without a linked payor. Mutually exclusive with payor_id. Write-only resolution input — the resolved member id + insurance id are frozen onto the authorization as a snapshot. Read them back via payor_member_id, payor_insurance_id, and payor_insurance.

service
ServiceBlock · object

Requested service details (specialty, dates, CPT codes, places of service).

servicing_provider_id
string<uuid> | null

Credentialing record id for the servicing provider. Omit when the servicing provider is the same as the requesting provider.

servicing_location_id
string<uuid> | null

Company-location id where services will be rendered.

organization_id
string<uuid> | null

Business entity (organization) this authorization belongs to. Optional.

notes
string | null

Free-text notes attached to the authorization. Editable post-creation.

scheduled_submission_date
string<date> | null

Date this authorization should be submitted (YYYY-MM-DD). When set in the future, the request is held out of the active review queue until that date. Omit or send null to submit whenever it is picked up.

Example:

"2025-02-01"

copy_files_from_prior_authorization_id
string<uuid> | null

When set, the new authorization is seeded with copies of the attached documents from this existing authorization (which must belong to your company). Each document is re-linked as a new file record pointing at the same stored object — the source authorization keeps its own copies. Used to duplicate an authorization (e.g. an assessment into a treatment).

Response

Successful Response

Response schema for a prior authorization record.

id
string<uuid>
required
company_id
string<uuid>
required
type
enum<string>
required

Authorization type.

Available options:
assessment,
treatment,
reassessment,
reassessment_and_treatment
status
enum<string>
required

Lifecycle state of a prior authorization.

Available options:
pending,
in_review,
extra_information_needed,
decided,
cancelled
patient_id
string<uuid>
required

Patient this authorization belongs to; use it to open the patient record. Demographics submitted on this PA are the frozen patient_* fields below.

patient_first_name
string
required

Patient first name as submitted on this authorization. Frozen at create time — not updated when the patient record changes.

patient_last_name
string
required

Patient last name as submitted on this authorization. Frozen at create time.

patient_date_of_birth
string<date>
required

Patient date of birth (YYYY-MM-DD) as submitted on this authorization. Frozen at create time.

active
boolean
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
created_by_user_id
string | null
decision
enum<string> | null

Payor outcome on a decided authorization.

Available options:
approved,
partially_approved,
denied,
no_authorization_required
appeal_status
enum<string> | null

Appeal lifecycle. Applies only when decision is denied or partially_approved.

NULL is meaningful: it means no appeal decision has been made yet — the caller hasn't yet asked for one. Setting any value below is an explicit commitment that someone is (or isn't) pursuing the appeal:

requested — operator/patient asked for an appeal; team hasn't started. appealing — team is actively working the appeal. appeal_approved — terminal, won. appeal_denied — terminal, lost. not_appealing — terminal, operator decided not to pursue.

Available options:
requested,
appealing,
appeal_approved,
appeal_denied,
not_appealing
appeal_notes
string | null

Rationale captured when an appeal was requested. Null when no appeal has been requested.

appeal_number
string | null

Appeal case/reference number issued by the payor. Null until the payor assigns one.

appeal_availability
AppealAvailabilitySlot · object[] | null

Requester availability windows captured when an appeal was requested. Null when none provided.

notes
string | null
payor_member_id
string | null

Member id as submitted on this authorization. Frozen at create time.

payor_insurance_id
string<uuid> | null

Insurance partner id (from the insurances catalog) as submitted on this authorization. Frozen at create time.

payor_insurance
PriorAuthorizationInsurance · object

Nested insurance partner ({id, name}) for the FROZEN snapshot.

Resolved from the payor_insurance relationship, which loads regardless of the insurance's is_active flag — so a PA submitted under a since- deactivated insurance still carries its name for display.

requesting_provider_id
string<uuid> | null

Credentialing-record id of the requesting provider. Always present unless the provider record was later removed (FK is ON DELETE SET NULL).

servicing_provider_id
string<uuid> | null

Credentialing-record id of the servicing provider. Null when the servicing provider is the same as the requesting provider or unset.

servicing_location_id
string<uuid> | null

Company-location id where services are rendered. Null when unset.

organization_id
string<uuid> | null

Business entity (organization) this authorization belongs to. Null when unset.

requesting_provider
PriorAuthorizationProvider · object

Expanded requesting-provider object. Present ONLY when requested via expand[]=requesting_provider; null otherwise. Use requesting_provider_id for the reference.

servicing_provider
PriorAuthorizationProvider · object

Expanded servicing-provider object. Present ONLY when requested via expand[]=servicing_provider; null otherwise.

servicing_location
PriorAuthorizationServicingLocation · object

Expanded servicing-location object. Present ONLY when requested via expand[]=servicing_location; null otherwise.

created_by_user
PriorAuthorizationUser · object

Nested user (created_by) in response.

service
PriorAuthorizationServiceResponse · object

Service request details returned in the response.

See PriorAuthorizationResultResponse for the rationale on validation_alias.

result
PriorAuthorizationResultResponse · object

Payor decision details. Populated only when status is decided.

Uses validation_alias (not alias) so the alias only applies to input (reading the parent PA's result_start_date etc. columns via from_attributes). Output uses the field name; otherwise FastAPI's response_model_by_alias=True default would leak the column-prefixed name onto the wire and the frontend would see resultStartDate after transformFromAPI instead of the expected startDate.

files
PriorAuthorizationFile · object[] | null

Attached files with signed download URLs. Present ONLY on GET /{id} with expand[]=files; always null on the list endpoint (use file_count there). Signed URLs are minted only when this is expanded.

file_count
integer | null

Number of attached files. Always present (a cheap aggregate); independent of expand.

submitted_at
string<date-time> | null
decided_at
string<date-time> | null
last_followed_up_at
string<date-time> | null

Last time staff followed up with the payor on this authorization's status. Null until the first follow-up.

scheduled_submission_date
string<date> | null

Date this authorization should be submitted to the payor. When set in the future, the request is held out of the active review queue until that date. Null when no scheduled date is set.

completed
boolean
default:false

True when the clinic has marked this authorization done (it leaves the default list). Derived from completed_at.

completed_at
string<date-time> | null

When the authorization was marked done. Null while outstanding.

completed_by_user_id
string | null

Id of the user who marked it done. Null while outstanding.

completed_by_user
PriorAuthorizationUser · object

The user who marked it done (Solum staff identity is masked for customer viewers). Null while outstanding.