NAV Navigation
curl javascript python ruby

Glidian API v1.0

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

The Glidian API provides access to endpoints that support starting and submitting authorizations in the Glidian tool. This is currently meant to be used in conjunction with the online tool which provides a more comprehensive UI for tracking and reviewing communications with payors.

The API is organized around REST and HTTP features. We use a secret API key to authenticate, and return JSON in every API response, which include errors and additional information.

Note: Historically, it has been possible to access the API without specifying a version. This is deprecated and starting June 1, 2024, you must use a version specifier when accessing the API.

Note: This version is still available for existing users, but please use version 2 of the API for any new integration projects.

Base URLs:

Email: Glidian Support Team

Authentication

Authentication for the Glidian API is done in the following steps:

1. Obtain a client ID and secret key from the Glidian developer portal or directly from Glidian support team. An API key grants many privileges and should be kept secret (and secure).

2. Send the client ID and secret key to the token url. You will receive a JWT token in response that grants continued access to the API until it expires. When it expires, you will have to generate a new token through the same token url.

3. Include the provided JWT token with all requests to the API in the Authentication header as a Bearer token. An example is included with each endpoint demonstrating this. If the token has expires or is invalid, you will receive a 401 response.

All API requests must be made over HTTPS and every request must be authenticated.

- Flow: clientCredentials

- Token URL = [/oauth2/token](/oauth2/token)

Errors

Error Examples

{
  "status_code": 400,
  "errors": [
    {
      "input": "client_id",
      "code": "missing_value",
      "message": "The required input 'client_id' is missing a value"
    }
  ]
}
{
  "status_code": 401,
  "errors": [
    {
      "code": "invalid_token",
      "message": "The access token sent is invalid or expired"
    }
  ]
}
{
  "status_code": 403,
  "errors": [
    {
      "input": "user_id",
      "code": "access_restricted",
      "message": "Access is restricted to not allow access to a resource"
    }
  ]
}
{
  "status_code": 404,
  "errors": [
    {
      "code": "no_match_found",
      "message": "No matches were found for the parameters provided"
    }
  ]
}
{
  "status_code": 404,
  "errors": [
    {
      "input": "state_id",
      "code": "resource_not_found",
      "message": "No match found for the specified resource id"
    }
  ]
}
{
  "status_code": 500,
  "errors": [
    {
      "code": "server_error",
      "message": "An unexpected error occured on the server"
    }
  ]
}

HTTP status codes to expect from all endpoints

HTTP Status Code Code Description
200 OK
400 Request was malformed and needs to be corrected
401 Access restricted due to incorrect or missing credentials
403 Access restricted to the given resource/endpoint for this developer
404 No resource(s) found matching request
500 An unexpected error occured on the server

Errors will always be returned in the following format

Name Type Required Description
» status_code integer false HTTP status code of the error response
» errors [ErrorCode] true
»» input string false Name of the input if this is a validation error
»» code string true Unique code identifying the type of error this is
»» message string true Developer message describing the error code
»» more_info string false URL to more information if available

Specific Error codes to expect in Error responses. The following "Extra Fields" may come with the error response:

Error Code HTTP Codes Description Extra Fields
missing_value 400 The stated input is required, and is missing a value input
not_type_string 400 The stated input needs to be type string and is either not a string or cannot be parsed as a string input
not_type_number 400 The stated input needs to be type number and is either not a number or cannot be parsed as a number input
empty_string 400 The stated input needs to be type string and cannot be an empty string input
not_date_string 400 The stated input needs to be type string and in an ISO-8601 date format input
not_type_array 400 The stated input must be parseable into an array input
invalid_value 400 The stated input must be a valid value among a list. The list of values is provided in the error message response input
min_length_error 400 The stated input must have a minimum length of entries, usually at least 1 input
max_file_limit 400 The maximum file limit has been exceeded
invalid_file 400 A file provided is invalid and needs to be in a different format input
edi_not_supported 400 This endpoint does not support EDI based insurance maps
invalid_credentials 401 The credentials provided are invalid
missing_token 401 This indicates that there is either no authorization header or the token value is missing from the header
invalid_header 401 The authorizations header is not in the expected format
invalid_token 401 The token provided is invalid
access_restricted 403 Access for this developer is restricted to not allow access to a particular resource, listed in the input field input
no_match_found 404 No results were found with the parameters provided
resource_not_found 404 No resource was found matching the ID provided input
server_error 500 An unexpected error occured on the server. The developers are notified whenever this happens.

Token

Endpoint for generating access token using client ID and secret key. Please note that token URLs are not versioned. These should be accessed without the /v1 prefix -- see code samples for examples.

generateToken

Code samples

curl --request POST \
  --url https://api.glidian.com/oauth2/token \
  --data '{"grant_type":"client_credentials","client_id":"CLIENT_ID_VALUE","client_secret":"CLIENT_SECRET_VALUE"}'
fetch("https://api.glidian.com/oauth2/token", {
  "method": "POST",
  "headers": {},
  "body": "{\"grant_type\":\"client_credentials\",\"client_id\":\"CLIENT_ID_VALUE\",\"client_secret\":\"CLIENT_SECRET_VALUE\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "{\"grant_type\":\"client_credentials\",\"client_id\":\"CLIENT_ID_VALUE\",\"client_secret\":\"CLIENT_SECRET_VALUE\"}"

conn.request("POST", "/oauth2/token", payload)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/oauth2/token")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request.body = "{\"grant_type\":\"client_credentials\",\"client_id\":\"CLIENT_ID_VALUE\",\"client_secret\":\"CLIENT_SECRET_VALUE\"}"

response = http.request(request)
puts response.read_body

POST /oauth2/token

Generates an access token for temporary access to the API

Body parameter

{
  "grant_type": "client_credentials",
  "client_id": "CLIENT_ID_VALUE",
  "client_secret": "CLIENT_SECRET_VALUE"
}

Parameters

Parameter In Type Required Description
grant_type body string false Grant type as specified by OAuth2 protocol. Currently only 'client_credentials' is supported.
client_id body string true ID specific to this client
client_secret body string true Secret specific to this client

Example responses

{
  "access_token": "ACCESS_TOKEN_VALUE",
  "token_type": "bearer",
  "expires_in": 3600
}

Response Schema

Status Code 200

Name Type Required Description
» access_token string true Access token generated. Include this in other endpoint requests to gain access.
» token_type string true Token type as specified by OAuth2 protocol
» expires_in integer true When this token will expire in seconds from the time it was generated

Error Codes

Error Code HTTP Status Code Input
missing_value 400 client_id
not_type_string 400 client_id
empty_string 400 client_id
missing_value 400 client_secret
not_type_string 400 client_secret
empty_string 400 client_secret
not_type_string 400 grant_type
invalid_value 400 grant_type
invalid_credentials 401

Users

Access to users on the Glidian tool associated with this developer account. Whenever referring to "Users" in this API, this is a reference to the users of the actual Glidian web tool. This is different from the developer who has been granted access to this API for the user's account. Example: Joe from Genetic Laboratories has access to the Glidian web portal where he directly enters in patient information to send to insurance. Joe does not have access to the API and is considered the "User" in this scenario. Jane is from the developer team of the same organization and is helping Joe submit prior authorizations quicker. She has access to the API and will see Joe show up among her users list. Jane is considered the "Developer" in this scenario.

getUsers

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/users \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/users", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/users", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/users")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /users

Retrieves all active users associated with this account

Example responses

{
  "users": [
    {
      "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "username": "Joe",
      "email": "joe@lab.com",
      "teams": []
    },
    {
      "id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
      "username": "Sally",
      "teams": [
        "Radiology"
      ]
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» users [User] true
»» id string true ID for the user object in the form of a UUID
»» username string true Username for this user
»» email string false Email on file for this user
»» teams [string] false

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401

getTeams

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/teams \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/teams", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/teams", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/teams")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /teams

Retrieves all associated teams for the current account.

Example responses

{
  "teams": [
    {
      "name": "Department One"
    },
    {
      "name": "Department Two"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» teams [Team] true
»» name string true The team name.

BaseFields

BaseFields are what we call standardized definitions of common fields to hold patient and provider information. Each BaseField object identifies the ID for the field, a name, and a category that together uniquely identify the field.

These are mostly used to tell you what fields are actually needed to send in an authorization request for a particular insurance. They are also used to then organize the values you want to enter into each field so that they can be sent correctly to the final destination.

getBaseFields

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/base-fields \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/base-fields", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/base-fields", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/base-fields")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /base-fields

Retrieves all base fields along with their IDs, names, etc.

Example responses

{
  "base_fields": [
    {
      "id": 30,
      "name": "id",
      "category": "patient",
      "description": "The patient's insurance ID number"
    },
    {
      "id": 100,
      "name": "npi",
      "category": "provider",
      "description": "NPI of the referring provider"
    },
    {
      "id": 130,
      "name": "name",
      "category": "provider",
      "description": "Full name of the referring provider"
    },
    {
      "id": 131,
      "name": "firstName",
      "category": "provider",
      "description": "First name of the referring provider"
    },
    {
      "id": 133,
      "name": "lastName",
      "category": "provider",
      "description": "Last name of the referring provider"
    },
    {
      "id": 370,
      "name": "officeContact",
      "category": "rendering",
      "description": "Contact name for the rendering provider's office"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» base_fields [BaseField] true
»» id integer true ID for this base field
»» name string true Describes the type of field (eg. name, id, address, etc.)
»» category string true Describes the broader category of field (eg. patient, provider, etc.)
»» description string true Description explaining what this base field is for

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401

StatusOptions

getStatusOptions

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/status-options \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/status-options", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/status-options", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/status-options")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /status-options

Retrieves all status options as pairs of IDs and labels

Example responses

{
  "status_options": [
    {
      "id": 4,
      "label": "Action Required"
    },
    {
      "id": 6,
      "label": "Review In Progress"
    },
    {
      "id": 9,
      "label": "Approved"
    },
    {
      "id": 21,
      "label": "Member Not Eligible",
      "is_deprecated": true
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» status_options [StatusOption] true
»» id integer true ID for this status option
»» label string true Label representing this status option
»» is_deprecated boolean false Status has been deprecated and will not be used for future updates. Historical updates
may still use this status.

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401

OrderingNpis

getOrderingNpis

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/ordering-npis \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/ordering-npis", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/ordering-npis", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/ordering-npis")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /ordering-npis

Retrieves all valid ordering NPIs that are registered with Glidian

Example responses

{
  "ordering_npis": [
    "1234567890",
    "1987543210",
    "1223334444"
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» ordering_npis [string] true

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401

Submission

The submission flow is a recommended, step-by-step process for submitting a new authorization request. It allows a developer to select a valid state, insurance, and service that an authorization should be requested for. Once these are chosen, a unique identifier called an "insurance map ID" is used to specify how the authorization will be submitted. When this ID is sent along with field data, a new draft authorization record can be created. To get the correct insurance map ID and values, follow these steps:

  1. Get an ID for the state that the insurance is in using the getStates endpoint
  2. Get an ID for the insurance optionally querying by state ID with the getInsurance endpoint
  3. Get an ID for the target service among those that are available using the getServices endpoint
  4. Use the previous 3 IDs to get the insurance map ID and list of base fields available for this submission. Map your patient/provider/medical data into these base field IDs (e.g. patient ID base field has ID 10 - create an object with { 'base_field_id': 10, 'value': 'John Doe' }).
  5. Submit an authorization by creating a 'Draft' or 'Submitted' case using the mapped data values along with a user ID and the insurance map ID

getStates

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/submission/states \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/submission/states", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/submission/states", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/submission/states")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /submission/states

Retrieves all states supported in the system

Query parameters

{
  "insurance_id": 24
}

Parameters

Parameter In Type Required Description
insurance_id query integer false ID for the insurance object

Example responses

{
  "states": [
    {
      "id": 1,
      "abbreviation": "AL",
      "name": "Alabama"
    },
    {
      "id": 5,
      "abbreviation": "CA",
      "name": "California"
    },
    {
      "id": 43,
      "abbreviation": "TX",
      "name": "Texas"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» states [State] true
»» id integer true ID of the state
»» abbreviation string true Standard abbreviation for the state
»» name string true Name of the state/location

Error Codes

Error Code HTTP Status Code Input
not_type_number 400 insurance_id
missing_token 401
invalid_header 401
invalid_token 401

getInsurance

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/submission/insurance \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/submission/insurance", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/submission/insurance", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/submission/insurance")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /submission/insurance

Retrieves all insurance supported for a given state

Retrieves all insurance supported for a given state including those supported on a nationwide level. Specifying the appropriate state allows for the retrieval of the correct authorization form or method in the case that the form or method is specific to a given state (accounting for local laws or preferences).

Query parameters

{
  "state_id": 49
}

Parameters

Parameter In Type Required Description
state_id query integer false ID for the state object

Example responses

{
  "insurance": [
    {
      "id": 46,
      "name": "Humana (Medicare)"
    },
    {
      "id": 80,
      "name": "Wellmark Blue Cross and Blue Shield"
    },
    {
      "id": 328,
      "name": "Blue Shield of California (Federal Employee Plan)"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» insurance [Insurance] true
»» id integer true ID of the insurance company
»» name string true Name of the insurance

Error Codes

Error Code HTTP Status Code Input
not_type_number 400 state_id
missing_token 401
invalid_header 401
invalid_token 401

getServices

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/submission/services \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/submission/services", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/submission/services", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/submission/services")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /submission/services

Retrieves services available for submission

This endpoint generates a list of services that are currently available for your account. If you pass an insurance id, the results will be limited to services for that insurance.

Query parameters

{
  "insurance_id": 24
}

Parameters

Parameter In Type Required Description
insurance_id query integer false ID for the insurance object

Example responses

{
  "services": [
    {
      "id": 29,
      "name": "General Procedure",
      "type": "Procedure"
    },
    {
      "id": 37,
      "name": "BRCA Test",
      "type": "Lab"
    },
    {
      "id": 38,
      "name": "Molecular and Genetic Testing",
      "type": "Lab"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» services [Service] true
»» id integer true ID of the service
»» name string true Name of the service
»» type string true Describes the type of service (eg. Drug, Procedure, Lab, etc.)

Error Codes

Error Code HTTP Status Code Input
missing_value 400 state_id
not_type_number 400 state_id
missing_value 400 insurance_id
not_type_number 400 insurance_id
missing_token 401
invalid_header 401
invalid_token 401

getPreferredMap

Code samples

curl --request GET \
  --url 'https://api.glidian.com/v1/submission/insurance-maps/preferred-map?insurance_id=123&service_id=123' \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/submission/insurance-maps/preferred-map?insurance_id=123&service_id=123", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/submission/insurance-maps/preferred-map?insurance_id=123&service_id=123", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/submission/insurance-maps/preferred-map?insurance_id=123&service_id=123")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /submission/insurance-maps/preferred-map

Provides an insurance map id, medium object, and prefilled fields

This endpoint returns a few items:

  1. insurance_map_id - This is used to identify which "insurance map" is used for the provided combination of state, insurance, and service. An "insurance map" is just a way to uniquely identify a state, insurance, and service bundled with a particular form of communication with the insurance, which our team needs to start the authorization the right way. Providing the insurance map ID to other endpoints tells us exactly how our tool should send the authorization and where to send it. We describe this output in the url as a "preferred map" because sometimes there are multiple insurance maps for the requested inputs, and we prioritize the one that is preferred by our tool and our users.

  2. medium - The medium object is used to describe details about the "medium" through which we transmit a particular authorization(eg. Fax, Web Portal, EDI, etc.). As an example, medium can contain a set of base field IDs that are available to be included through this medium. This tells your team what fields they need to enter so that the minimum amount of information can be included.

  3. prefilled_fields - This is a list of field IDs and field values that need to be included with any submission to our tool. They are set by users and typically help with the processing of the authorization. An example would be to include a note on each request to Blue Shield that states "We are allowed to request retro requests up to 3 business days" to help reduce denials for retro auths. It is not required to include these fields on each submission, but it is highly recommended.

Query parameters

{
  "state_id": 49,
  "insurance_id": 24,
  "service_id": 100
}

Parameters

Parameter In Type Required Description
state_id query integer false ID for the state object. This is optional as long as state does not make a difference in what insurance map is returned. If it does make a difference, then an error is returned. This can occur if the process for authorization is different based on the state it takes place in. For example, UnitedHealthCare of Washington might have a different process than UnitedHealthCare of Texas.
insurance_id query integer true ID for the insurance object
service_id query integer true ID for the service object

Detailed descriptions

state_id: ID for the state object. This is optional as long as state does not make a difference in what insurance map is returned. If it does make a difference, then an error is returned. This can occur if the process for authorization is different based on the state it takes place in. For example, UnitedHealthCare of Washington might have a different process than UnitedHealthCare of Texas.

Example responses

{
  "insurance_map_id": 42,
  "medium": {
    "base_field_ids": [
      30,
      40,
      50,
      100,
      130,
      370
    ]
  },
  "prefilled_fields": [
    {
      "id": "1004",
      "value": "We are allowed to request retro requests up to 3 business days"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» insurance_map_id integer true ID of the preferred insurance map to use
» medium Medium true
»» base_field_ids [integer] true Base field IDs present in the medium
» prefilled_fields [object] true
»» id string true Field id that this value should be sent with
»» value string true Value to prepopulate field with

Error Codes

Error Code HTTP Status Code Input
missing_value 400 state_id
not_type_number 400 state_id
missing_value 400 insurance_id
not_type_number 400 insurance_id
missing_value 400 service_id
not_type_number 400 service_id
missing_token 401
invalid_header 401
invalid_token 401
no_match_found 404

createDraftRecord

Code samples

curl --request POST \
  --url https://api.glidian.com/v1/submission/users/123e4567-e89b-12d3-a456-426614174000/draft-records \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form reference_number=AAAA-123-654444 \
  --form reference_number_two=BBBB-456-222222 \
  --form urgent=true \
  --form 'urgent_reason=Text describing urgent reason' \
  --form insurance_map_id=52 \
  --form 'form_data=[ [Object] ]' \
  --form 'file=[ '\''FILE_1_BINARY_DATA'\'', '\''FILE_2_BINARY_DATA'\'' ]' \
  --form team=Oncology
const form = new FormData();
form.append("reference_number", "AAAA-123-654444");
form.append("reference_number_two", "BBBB-456-222222");
form.append("urgent", true);
form.append("urgent_reason", "Text describing urgent reason");
form.append("insurance_map_id", 52);
form.append("form_data", [{"id":10,"value":"Jane Doe"}]);
form.append("file", ["FILE_1_BINARY_DATA","FILE_2_BINARY_DATA"]);
form.append("team", "Oncology");

fetch("https://api.glidian.com/v1/submission/users/123e4567-e89b-12d3-a456-426614174000/draft-records", {
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  },
  "body": form
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_number\"\r\n\r\nAAAA-123-654444\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_number_two\"\r\n\r\nBBBB-456-222222\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"urgent\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"urgent_reason\"\r\n\r\nText describing urgent reason\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"insurance_map_id\"\r\n\r\n52\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_data\"\r\n\r\n[object Object]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nFILE_1_BINARY_DATA,FILE_2_BINARY_DATA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"team\"\r\n\r\nOncology\r\n-----011000010111000001101001--\r\n"

headers = {
    'Authorization': "Bearer ACCESS_TOKEN",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/v1/submission/users/123e4567-e89b-12d3-a456-426614174000/draft-records", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/submission/users/123e4567-e89b-12d3-a456-426614174000/draft-records")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_number\"\r\n\r\nAAAA-123-654444\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reference_number_two\"\r\n\r\nBBBB-456-222222\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"urgent\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"urgent_reason\"\r\n\r\nText describing urgent reason\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"insurance_map_id\"\r\n\r\n52\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"form_data\"\r\n\r\n[object Object]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nFILE_1_BINARY_DATA,FILE_2_BINARY_DATA\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"team\"\r\n\r\nOncology\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body

POST /submission/users/{user_id}/draft-records

Allows a new record to be generated in a draft state

Allows a new record to be generated in a draft state for the given user. Given the appropriate id-value pairs, this will populate a record with the provided values and start it in a draft state for users to complete on the main web portal.

Make sure to include prefilled fields returned by the preferred-map endpoint to ensure a submission with the highest chance of being processed correctly.

Attachments can also be included as binaries in a file array. These same files will be available to download and remove in the draft record and will not be concatenated until the request is actually sent out.

NOTE: This endpoint takes request data as multipart/form-data instead of json like other endpoints

Body parameter

reference_number: AAAA-123-654444
reference_number_two: BBBB-456-222222
urgent: true
urgent_reason: Text describing urgent reason
insurance_map_id: 52
form_data:
  - id: 10
    value: Jane Doe
file:
  - FILE_1_BINARY_DATA
  - FILE_2_BINARY_DATA
team: Oncology

Parameters

Parameter In Type Required Description
user_id path string true ID for the user object in the form of a UUID string
reference_number body string false Custom reference number assigned to this case for customer tracking. This will be tracked in addition to Glidian's own internal ID.
reference_number_two body string false Second custom reference number assigned to this case for customer tracking. This will be tracked similar to the first reference number.
urgent body boolean false Flag to indicate if this case should be handled urgently. This will expedite the case within Glidian and will also be included with payer submissions, if their forms allow.
urgent_reason body string false Text description of why this case needs to be handled urgently. Will be submitted to payers where their forms allow.
insurance_map_id body integer true ID of the insurance map to use
team body string false The team the record should be shared with. If not specified, defaults to the draft owner's team.
form_data body [FieldDatum] true An array of FieldDatum values that will fill the fields of the record
» id body integer true ID of the field to fill with the given value
» value body string true Value to enter into the record field
file body [string] false File binaries to include that will be attached to the draft record created

Example responses

{
  "record_id": "ABC12345"
}

Response Schema

Status Code 200

Name Type Required Description
» record_id string true ID of the record that has been created in a draft status

Error Codes

Error Code HTTP Status Code Input
not_type_string 400 reference_number
not_type_string 400 reference_number_two
not_type_boolean 400 urgent
not_type_string 400 urgent_reason
missing_value 400 insurance_map_id
not_type_number 400 insurance_map_id
missing_value 400 form_data
not_type_array 400 form_data
min_length_error 400 form_data
invalid_value 400 form_data
not_type_number 400 form_data.[index].id
not_type_string 400 form_data.[index].value
max_file_limit 400
edi_not_supported 400
invalid_file 400 file
missing_token 401
invalid_header 401
invalid_token 401
access_restricted 403 user_id
resource_not_found 404 user_id
resource_not_found 404 insurance_map_id

Dashboard

Endpoints used to access information in user dashboards, such as records, record statuses, and other record details

getRecords

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/dashboard/records \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/dashboard/records", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/dashboard/records", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/records")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /dashboard/records

Retrieves all the records for the associated account

Retrieves all the records from a particular account, including the latest status, insurance, service type, and other details

Query parameters

{
  "last_update_start_date": "2018-01-00T00:00:00.000Z",
  "last_update_end_date": "2018-12-00T00:00:00.000Z",
  "status_ids": [
    3,
    10
  ],
  "record_ids": [
    "MOL61235",
    "GEN98721"
  ]
}

Parameters

Parameter In Type Required Description
last_update_start_date query string(date) false UTC date in ISO-8601 format for the earliest date returned for a record's last status update. If none of 'last_update_start_date', 'last_update_end_date', and 'record_ids' is provided, 'last_update_start_date' will default to 30 days ago (in Pacific Timezone).
last_update_end_date query string(date) false UTC date in ISO-8601 format for the latest date returned for a record's last status update
status_ids query array[integer] false Array of status option Ids that the search should be limited to.
record_ids query array[string] false Array of record Ids that the search should be limited to

Detailed descriptions

status_ids: Array of status option Ids that the search should be limited to.

Example responses

{
  "records": [
    {
      "id": "MOL61235",
      "created_at": "2017-06-20T09:18:26.000Z",
      "insurance_map_id": 94,
      "reference_number": "AAAA-123-654321",
      "payor_reference_number": "OP0566111111",
      "urgent": true,
      "urgent_reason": "Text explanantion of why case is urgent",
      "owner": {
        "id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
        "username": "Sally",
        "dashboard_status": "Actived"
      },
      "state": {
        "id": 1,
        "name": "California"
      },
      "insurance": {
        "id": 52,
        "name": "Aetna"
      },
      "service": {
        "id": 47,
        "name": "Molecular and Genetic Testing",
        "type": "Lab"
      },
      "latest_status": {
        "id": 2041,
        "created_at": "2017-06-20T09:18:26.000Z",
        "label": "Submitted"
      },
      "procedure_statuses": []
    },
    {
      "id": "GEN98721",
      "created_at": "2018-01-12T09:21:52.000Z",
      "insurance_map_id": 152,
      "reference_number": "AAAA-123-654444",
      "reference_number_two": "BBBB-456-222222",
      "auth_number": "R123001123",
      "auth_approval_from_date": "2018-01-12T00:00:00.000Z",
      "auth_approval_to_date": "2018-04-12T00:00:00.000Z",
      "owner": {
        "id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
        "username": "Sally",
        "dashboard_status": "Archived"
      },
      "state": {
        "id": 5,
        "name": "Texas"
      },
      "insurance": {
        "id": 4,
        "name": "UnitedHealthCare"
      },
      "service": {
        "id": 5,
        "name": "General Procedure",
        "type": "Procedure"
      },
      "latest_status": {
        "id": 4095,
        "created_at": "2018-01-18T13:42:13.000Z",
        "label": "Approved (Letter)"
      },
      "procedure_statuses": [
        {
          "procedure_code_type": "CPT",
          "procedure_code": "81479",
          "quantity": 1,
          "status": "APPROVED"
        },
        {
          "procedure_code_type": "CPT",
          "procedure_code": "81162",
          "quantity": 3,
          "status": "AUTH_NOT_REQUIRED"
        }
      ]
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» records [Record] false
»» id string true ID of the record
»» created_at string(date) true UTC date in ISO-8601 format for when the record was created
»» insurance_map_id integer true ID of the insurance map associated with this record
»» reference_number string false Custom reference number provided by developer when draft was created
»» reference_number_two string false Second custom reference number provided by developer when draft was created
»» urgent boolean false Boolean flag indicating if the case is marked as urgent
»» urgent_reason string false Text summarizing the reason for marking a case as urgent
»» auth_number string false Authorization number assigned to this case by insurance
»» payor_reference_number string false Latest reference number given by the payor before an authorization number is assigned
»» auth_approval_from_date string(date) false If provided, this is the earliest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
»» auth_approval_to_date string(date) false If provided, this is the latest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
»» owner object true User object for the owner of this record
»»» id string true ID for the user object in the form of a UUID
»»» username string true Username for this user
»»» dashboard_status enum true The visibility status of this record on the owner's dashboard
»» state object true
»»» id integer true ID of the state
»»» name string true Name of the state/location
»» insurance Insurance true
»»» id integer true ID of the insurance company
»»» name string true Name of the insurance
»» service Service true
»»» id integer true ID of the service
»»» name string true Name of the service
»»» type string true Describes the type of service (eg. Drug, Procedure, Lab, etc.)
»» latest_status RecordStatus true
»»» id integer true Record ID of the record status
»»» created_at string(date) true UTC date in ISO-8601 format for when this record status was created
»»» label string true Describes the status type (eg. Denied, Approved, etc.)
»»» reason string false For Denied, Cancelled, and Action Required statuses, the reason provided for this status.
»»» details string false For Denied, Cancelled, and Action Required statuses, additional information about the reason. For example, if the reason was "Not medically necessary," then this field will include a rationale for that determination (if provided by the payor)
»» procedure_statuses [ProcedureStatus] true An array of procedure statuses with relevant information. Please note that this array will be empty for cases created in Glidian before individual procedure codes started being tracked.
»»» procedure_code_type string true The type of procedure code being listed. The only option right now is CPT
»»» procedure_code string true The value of the procedure code without the quantity identifier
»»» quantity number true The number of units for the given procedure code
»»» status string true The current status of this procedure code under review. The possible options include PENDING, APPROVED, AUTH_NOT_REQUIRED, and DENIED
»»» modifiers string false

Error Codes

Error Code HTTP Status Code Input
not_date_string 400 last_update_start_date
not_date_string 400 last_update_end_date
not_type_array 400 status_ids
min_length_error 400 status_ids
invalid_value 400 status_ids.[index]
not_type_array 400 record_ids
min_length_error 400 record_ids
invalid_value 400 record_ids.[index]
missing_token 401
invalid_header 401
invalid_token 401

getRecord

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/dashboard/records/MOL1234567 \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/dashboard/records/MOL1234567", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/dashboard/records/MOL1234567", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/records/MOL1234567")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /dashboard/records/{record_id}

Retrieves specific information about a given record

Retrieves specific information about a given record, expanding on what is returned by the /records endpoint. Specifically, this endpoint will alway return record objects with the field_details argument which will include specific field values related to this record

Parameters

Parameter In Type Required Description
record_id path string true ID for a given record

Example responses

{
  "record": {
    "id": "MOL61235",
    "created_at": "2017-06-20T09:18:26.000Z",
    "insurance_map_id": 94,
    "reference_number": "AAAA-123-654321",
    "urgent": true,
    "urgent_reason": "Text explanantion of why case is urgent",
    "auth_number": "R123001123",
    "payor_reference_number": "12013301234",
    "owner": {
      "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "username": "Joe",
      "dashboard_status": "Deleted"
    },
    "state": {
      "id": 1,
      "name": "California"
    },
    "insurance": {
      "id": 52,
      "name": "Aetna"
    },
    "service": {
      "id": 47,
      "name": "Molecular and Genetic Testing",
      "type": "Lab"
    },
    "latest_status": {
      "id": 2041,
      "created_at": "2017-06-20T09:18:26.000Z",
      "label": "Submitted"
    },
    "procedure_statuses": [
      {
        "procedure_code_type": "CPT",
        "procedure_code": "81162",
        "quantity": 1,
        "status": "PENDING"
      }
    ],
    "field_details": {
      "cpt_codes": "81162",
      "icd_codes": "Z80.3, Z80.41",
      "service_date_range": "11/10/2018 - 11/15/2018"
    }
  }
}

Response Schema

Status Code 200

Name Type Required Description
» record DetailedRecord false
»» id string true ID of the record
»» created_at string(date) true UTC date in ISO-8601 format for when the record was created
»» insurance_map_id integer true ID of the insurance map associated with this record
»» reference_number string false Custom reference number provided by developer when draft was created
»» reference_number_two string false Second custom reference number provided by developer when draft was created
»» urgent boolean false Boolean flag indicating if the case is marked as urgent
»» urgent_reason string false Text summarizing the reason for marking a case as urgent
»» auth_number string false Authorization number assigned to this case by insurance
»» payor_reference_number string false Latest reference number given by the payor before an authorization number is assigned
»» auth_approval_from_date string(date) false If provided, this is the earliest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
»» auth_approval_to_date string(date) false If provided, this is the latest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
»» team string false The team the record is assigned to or null when the record is not assigned to a team.
»» owner object true User object for the owner of this record
»»» id string true ID for the user object in the form of a UUID
»»» username string true Username for this user
»»» dashboard_status enum true The visibility status of this record on the owner's dashboard
»» state object true
»»» id integer true ID of the state
»»» name string true Name of the state/location
»» insurance Insurance true
»»» id integer true ID of the insurance company
»»» name string true Name of the insurance
»» service Service true
»»» id integer true ID of the service
»»» name string true Name of the service
»»» type string true Describes the type of service (eg. Drug, Procedure, Lab, etc.)
»» latest_status RecordStatus true
»»» id integer true Record ID of the record status
»»» created_at string(date) true UTC date in ISO-8601 format for when this record status was created
»»» label string true Describes the status type (eg. Denied, Approved, etc.)
»»» reason string false For Denied, Cancelled, and Action Required statuses, the reason provided for this status.
»»» details string false For Denied, Cancelled, and Action Required statuses, additional information about the reason. For example, if the reason was "Not medically necessary," then this field will include a rationale for that determination (if provided by the payor)
»» procedure_statuses [ProcedureStatus] true An array of procedure statuses with relevant information. Please note that this array will be empty for cases created in Glidian before individual procedure codes started being tracked. Also note that this is a parsed, more reliable version of the cpt_codes field in the field_details section since that value is the raw, unformated value provided by users on submission
»»» procedure_code_type string true The type of procedure code being listed. The only option right now is CPT
»»» procedure_code string true The value of the procedure code without the quantity identifier
»»» quantity number true The number of units for the given procedure code
»»» status string true The current status of this procedure code under review. The possible options include PENDING, APPROVED, AUTH_NOT_REQUIRED, and DENIED
»»» modifiers string false
»» field_details object true Holds any additional fields that are returned with a GET request for a particular record
»»» cpt_codes string false CPT codes set for this record. This is the raw value initially provided by users. For a more reliable, up-to-date set of CPT values, refer to procedure_statuses.
»»» icd_codes string false ICD 10 codes set for this record
»»» service_date_range string false Service date range set for this record.
»»» service_data_range string false (Deprecated) This is a duplicate of service_date_range that was originally created due to a typo. As a result, this field is deprecated and will be present in v1 but will be removed in a future version of the API

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id

addAttachmentsToDraftRecord

Code samples

curl --request POST \
  --url https://api.glidian.com/v1/dashboard/records/MOL1234567/attachments \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'file=[ '\''FILE_1_BINARY_DATA'\'', '\''FILE_2_BINARY_DATA'\'' ]'
const form = new FormData();
form.append("file", ["FILE_1_BINARY_DATA","FILE_2_BINARY_DATA"]);

fetch("https://api.glidian.com/v1/dashboard/records/MOL1234567/attachments", {
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  },
  "body": form
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nFILE_1_BINARY_DATA,FILE_2_BINARY_DATA\r\n-----011000010111000001101001--\r\n"

headers = {
    'Authorization': "Bearer ACCESS_TOKEN",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/v1/dashboard/records/MOL1234567/attachments", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/records/MOL1234567/attachments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nFILE_1_BINARY_DATA,FILE_2_BINARY_DATA\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body

POST /dashboard/records/{record_id}/attachments

Attaches clinical docs to Draft record

Attach clinical documents to a created draft record. NOTE: This endpoint takes request data as multipart/form-data instead of json like other endpoints.

Body parameter

file:
  - FILE_1_BINARY_DATA
  - FILE_2_BINARY_DATA

Parameters

Parameter In Type Required Description
record_id path string true ID for a given record
file body [string] false File binaries to include that will be attached to the draft record created

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id
invalid_input 400 file

getRecordClinicalQuestions

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/dashboard/records/MOL1234567/clinical-questions", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /dashboard/records/{record_id}/clinical-questions

Retrieves information about the clinical questions for a record

Provides the clinical questions for this record and any previously submitted responses.

Parameters

Parameter In Type Required Description
record_id path string true ID for a given record

Example responses

{
  "questions": [
    {
      "id": 1,
      "prompt": "Does patient have a family history of this condition?",
      "type": "select",
      "options": [
        "Yes",
        "No",
        "Unknown"
      ]
    }
  ],
  "responses": [
    {
      "question_id": 1,
      "value": "Yes"
    }
  ],
  "are_all_questions_answered": true
}

Response Schema

Status Code 200

Name Type Required Description
» questions [ClinicalQuestion] false
»» id number true ID of the Clinical Question
»» prompt string true the text of the question to display to an end-user
»» type enum true the data type of the question. Implies validation rules. For example, if type is select, the response value must be one of the values in the list. For multi-select, the response must an array of values from the options.
»» options [string] false Valid options for a select, select-other, and multi-select question types.
» responses [ClinicalQuestionResponse] false
»» question_id number true must correspond to a valid ClinicalQuestion id
»» value string,array true the response to this question. multi-select questions require an array value of valid options.
»» other_value string false For select-other questions only, the value to use when Other is selected.
»» is_valid boolean¦null false Indicates whether the provided response is valid for the question. The value may be null when a question was answered previously but a record was updated and that question is no longer relevant.
» are_all_questions_answered boolean false

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id

updateRecordClinicalQuestions

Code samples

curl --request POST \
  --url https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --data '{"responses":[{"question_id":1,"value":"No"},{"question_id":2,"value":null},{"question_id":3,"value":"Other","other_value":"Both maternal and paternal"}]}'
fetch("https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions", {
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  },
  "body": "{\"responses\":[{\"question_id\":1,\"value\":\"No\"},{\"question_id\":2,\"value\":null},{\"question_id\":3,\"value\":\"Other\",\"other_value\":\"Both maternal and paternal\"}]}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "{\"responses\":[{\"question_id\":1,\"value\":\"No\"},{\"question_id\":2,\"value\":null},{\"question_id\":3,\"value\":\"Other\",\"other_value\":\"Both maternal and paternal\"}]}"

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("POST", "/v1/dashboard/records/MOL1234567/clinical-questions", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/records/MOL1234567/clinical-questions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'
request.body = "{\"responses\":[{\"question_id\":1,\"value\":\"No\"},{\"question_id\":2,\"value\":null},{\"question_id\":3,\"value\":\"Other\",\"other_value\":\"Both maternal and paternal\"}]}"

response = http.request(request)
puts response.read_body

POST /dashboard/records/{record_id}/clinical-questions

Retrieves information about the clinical questions for a record

Set or update responses to clinical questions. Newly submitted responses are merged with any previous responses, overwriting responses with the same question_id. To remove a response, set the value to null.

For example, if you first submit: [{ question_id: 1, value: "Yes"}, { question_id: 2, value: "Unknown" }, { question_id: 3, value: "Maternal" }]

And then submit: [{ question_id: 2, value: null }, { question_id: 3, value: "Paternal" }]

Then the final stored responses will be: [{ question_id: 1, value: "Yes"}, { question_id: 3, value: "Paternal" }]

Body parameter

{
  "responses": [
    {
      "question_id": 1,
      "value": "No"
    },
    {
      "question_id": 2,
      "value": null
    },
    {
      "question_id": 3,
      "value": "Other",
      "other_value": "Both maternal and paternal"
    }
  ]
}

Parameters

Parameter In Type Required Description
record_id path string true ID for a given record
responses body [ClinicalQuestionResponse] false Responses to clinical questions.
» question_id body number true must correspond to a valid ClinicalQuestion id
» value body string,array true the response to this question. multi-select questions require an array value of valid options.
» other_value body string false For select-other questions only, the value to use when Other is selected.
» is_valid body boolean¦null false Indicates whether the provided response is valid for the question. The value may be null when a question was answered previously but a record was updated and that question is no longer relevant.

Example responses

{
  "questions": [
    {
      "id": 1,
      "prompt": "Does patient have a family history of this condition?",
      "type": "select",
      "options": [
        "Yes",
        "No",
        "Unknown"
      ]
    }
  ],
  "responses": [
    {
      "question_id": 1,
      "value": "Yes"
    }
  ],
  "are_all_questions_answered": true
}

Response Schema

Status Code 200

Name Type Required Description
» responses [ClinicalQuestionResponse] false
»» question_id number true must correspond to a valid ClinicalQuestion id
»» value string,array true the response to this question. multi-select questions require an array value of valid options.
»» other_value string false For select-other questions only, the value to use when Other is selected.
»» is_valid boolean¦null false Indicates whether the provided response is valid for the question. The value may be null when a question was answered previously but a record was updated and that question is no longer relevant.

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id
not_type_string 400
missing_value 400
invalid_value 400

getRecordStatuses

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/dashboard/record-statuses \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/dashboard/record-statuses", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/dashboard/record-statuses", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/record-statuses")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /dashboard/record-statuses

Retrieves all status updates for this account.

Retrieves the status updates for this account within the default or given time range, with a default to previous 30 days (when no time range is provided) or with a maximum time range of 3 months. If from_date is provided, then to_date must also be provided (or vice versa). Also allows for filtering by status.

Parameters

Parameter In Type Required Description
statuses query string false Comma-separated list of statuses that the search should be limited to (eg. Denied, Approved, etc.). Labels can be case-insensitive.
from_date query string(date) false UTC date in ISO-8601 format for the earliest date returned for a record's status update
to_date query string(date) false UTC date in ISO-8601 format for the latest date returned for a record's status update

Detailed descriptions

statuses: Comma-separated list of statuses that the search should be limited to (eg. Denied, Approved, etc.). Labels can be case-insensitive.

Example responses

{
  "record_statuses": [
    {
      "created_at": "2021-02-25T16:53:13.609Z",
      "label": "Submitted",
      "reason": null,
      "details": null,
      "id": "MOL943290"
    },
    {
      "created_at": "2021-02-26T16:53:13.609Z",
      "label": "Action Required",
      "reason": "Additional Clinical Info",
      "details": "Additional Clinical Information Requested",
      "id": "MOL943290"
    }
  ]
}

Response Schema

Status Code 200

Name Type Required Description
» record-statuses [RecordStatus] false
»» id integer true Record ID of the record status
»» created_at string(date) true UTC date in ISO-8601 format for when this record status was created
»» label string true Describes the status type (eg. Denied, Approved, etc.)
»» reason string false For Denied, Cancelled, and Action Required statuses, the reason provided for this status.
»» details string false For Denied, Cancelled, and Action Required statuses, additional information about the reason. For example, if the reason was "Not medically necessary," then this field will include a rationale for that determination (if provided by the payor)

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
invalid_date 400 from_date
invalid_date 400 to_date
invalid_input 400 statuses

getRecordStatusAttachment

Code samples

curl --request GET \
  --url https://api.glidian.com/v1/dashboard/record-statuses/123/status-attachment \
  --header 'Authorization: Bearer ACCESS_TOKEN'
fetch("https://api.glidian.com/v1/dashboard/record-statuses/123/status-attachment", {
  "method": "GET",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("GET", "/v1/dashboard/record-statuses/123/status-attachment", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/dashboard/record-statuses/123/status-attachment")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'

response = http.request(request)
puts response.read_body

GET /dashboard/record-statuses/{record_status_id}/status-attachment

Retrieves the status attachment for a given record status

Retrieves the status attachment for a given record status. This is returned as a buffer that can be interpreted as a pdf. If the status does not have an attachment, an error is returned indicating that there was nothing found.

Parameters

Parameter In Type Required Description
record_status_id path integer true ID for a given record status

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_status_id
no_match_found 404

Embed Sessions

Embed sessions are used to grant access to a specific record for a short time, without needing the end-user to create a Glidian portal account. Due to the security implications of this workflow, this feature is disabled by default. If you feel that your organization would benefit from this feature, please contact our team to set up a consultation. To initate an embed session, use POST /embed-sessions and redirect the user to the url included in the response. The URL expires in one minute, and can only be used once.

createEmbedSession

Code samples

curl --request POST \
  --url https://api.glidian.com/v1/embed-sessions \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --data '{"external_user_id":"alex.doe","record_id":"GEN123456789","expires_in":600}'
fetch("https://api.glidian.com/v1/embed-sessions", {
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  },
  "body": "{\"external_user_id\":\"alex.doe\",\"record_id\":\"GEN123456789\",\"expires_in\":600}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "{\"external_user_id\":\"alex.doe\",\"record_id\":\"GEN123456789\",\"expires_in\":600}"

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("POST", "/v1/embed-sessions", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/embed-sessions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'
request.body = "{\"external_user_id\":\"alex.doe\",\"record_id\":\"GEN123456789\",\"expires_in\":600}"

response = http.request(request)
puts response.read_body

POST /embed-sessions

Create an embed session

Creates an embed session for the specified record and returns the URL that the user should go to to access it.

Body parameter

{
  "external_user_id": "alex.doe",
  "record_id": "GEN123456789",
  "expires_in": 600
}

Parameters

Parameter In Type Required Description
external_user_id body string true A unique identifier for the end user. This identifier is used to document access for compliance purposes, so it should be at least unique enough to identify an individual end user.
record_id body string true The record ID to grant access to
expires_in body number false Optional parameter to specify how long the embed session should last in seconds. Defaults to 3600 (one hour). Maximum 86400 (one day). Note that the this controls the expiration for the session, and not the URL that the user uses for initial access to the session.

Example responses

{
  "id": "59562b265a3add97",
  "url": "https://www.glidian.com/embed/start?id=59562b265a3add97&authorizationCode=M5Cv1CRoiy7EJte-Wzh1jeYSDcq03jY26A10JPh2B1tH",
  "scopes": "records/GEN123456789",
  "external_user_id": "alex.doe",
  "created_at": "2021-01-01T00:00:00.000Z",
  "expires_at": "2021-01-01T01:00:00.000Z"
}

Response Schema

Status Code 200

Name Type Required Description
» id string true Unique identifier for the created session
» url string true The URL for the user to access this session. This URL expires in one minute and can only be used once.
» scopes string true Describes the access scope for this session, in the format records/{record_id}
» external_user_id string true The external_user_id that was included in the request
» created_at string true ISO timestamp for when this session was created
» expires_at string true ISO timestamp for when this session expires

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id
not_type_number 400 expires_in
missing_value 400
invalid_value 400

Testing

Testing Routes are only available in sandbox environments, for simulating updates that our system would usually make in production. These routes are not available in production.

setRecordStatus

Code samples

curl --request POST \
  --url https://api.glidian.com/v1/testing/records/MOL1234567/set-status \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --data '{"status":"Approved","payer_reference_number":"Auth123456","auth_number":"Auth123456","start_date":"2023-07-10","end_date":"2023-07-10"}'
fetch("https://api.glidian.com/v1/testing/records/MOL1234567/set-status", {
  "method": "POST",
  "headers": {
    "Authorization": "Bearer ACCESS_TOKEN"
  },
  "body": "{\"status\":\"Approved\",\"payer_reference_number\":\"Auth123456\",\"auth_number\":\"Auth123456\",\"start_date\":\"2023-07-10\",\"end_date\":\"2023-07-10\"}"
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.error(err);
});
import http.client

conn = http.client.HTTPSConnection("api.glidian.com")

payload = "{\"status\":\"Approved\",\"payer_reference_number\":\"Auth123456\",\"auth_number\":\"Auth123456\",\"start_date\":\"2023-07-10\",\"end_date\":\"2023-07-10\"}"

headers = { 'Authorization': "Bearer ACCESS_TOKEN" }

conn.request("POST", "/v1/testing/records/MOL1234567/set-status", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'uri'
require 'net/http'
require 'openssl'

url = URI("https://api.glidian.com/v1/testing/records/MOL1234567/set-status")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer ACCESS_TOKEN'
request.body = "{\"status\":\"Approved\",\"payer_reference_number\":\"Auth123456\",\"auth_number\":\"Auth123456\",\"start_date\":\"2023-07-10\",\"end_date\":\"2023-07-10\"}"

response = http.request(request)
puts response.read_body

POST /testing/records/{record_id}/set-status

Set a record's current status.

Set a record's current status to the requested status. Use this method to test fetching records in various statuses. The only required input is status; reference number, auth number, and auth dates will be automatically generated when applicable. You may also pass specific values if you would like to test specific scenarios; these will be ignored if submitted for inapplicable statuses.

Body parameter

{
  "status": "Approved",
  "payer_reference_number": "Auth123456",
  "auth_number": "Auth123456",
  "start_date": "2023-07-10",
  "end_date": "2023-07-10"
}

Parameters

Parameter In Type Required Description
record_id path string true ID for a given record
status body string true The label for the status. Use any status from the /status-options endpoint.
payer_reference_number body string false Sample payer reference number. Applies to all statuses.
auth_number body string false Sample authorization number. Only applies to "Approved" statuses.
start_date body string(date) false Authorization start date (ISO Date). Only applies to "Approved" statuses.
end_date body string(date) false Authorization end date. Must be after start date (ISO Date). Only applies to "Approved" statuses.

Example responses

{
  "id": 123456,
  "status": "Approved",
  "record_id": "GEN123456789"
}

Response Schema

Status Code 200

Name Type Required Description
» id number true Unique identifier for the created status.
» status string true The status label the record was set to
» record_id string true The record id.

Error Codes

Error Code HTTP Status Code Input
missing_token 401
invalid_header 401
invalid_token 401
resource_not_found 404 record_id
not_type_number 400 expires_in
missing_value 400
invalid_value 400

Webhooks

Webhooks allow our server to send real-time updates about activity within our system. See below for a list of supported events and the information sent with them. Each webhook request will contain a payload that matches the WebhookPayload schema, with event-specific data included under the event_data key. In order to use webhooks, you must subscribe to the desired events. Reach out to your account representative with the following information:

  1. An HTTPS url where you would like to receive events. All events will be sent as POST request. 2. Credentials Glidian should use when POST-ing to your endpoint. We support the following authentication schemes:
    • Basic Auth: Provide your username and password
    • OAuth2: Provide the following configuration details:
      • token_url: The HTTPS endpoint used to retrieve a token from your provider.
      • client_id: A client ID provisioned for Glidian, Inc.
      • client_secret: The client secret associated with the provided client ID.
      • grant_type: The grant type used to fetch a token. Currently, only credentials_owner is supported.
      • scope: (optional) All OAuth scopes required to access your webhook endpoint.
  2. A list of events you would like to subscribe to

Request body

Name Type Required Description
event_name string true The name of the event generating this notification
event_data object true The event-specific data. The shape of this field will vary by event.
timestamp string true Time when this event occurred in Glidian.
We recommend using this to guard against out-of-order notifications, for example, if you receive an event for the same record id that is older than one already received.

record:statusUpdated

Sample record:statusUpdated request body

{
  "event_name": "record:statusUpdated",
  "event_data": {
    "record": {
      "id": "GEN98721",
      "created_at": "2018-01-12T09:21:52.000Z",
      "insurance_map_id": 119,
      "reference_number": "AAAA-123-654444",
      "reference_number_two": "BBBB-456-222222",
      "auth_number": "R123001123",
      "payor_reference_number": "OP0566123123",
      "auth_approval_from_date": "2018-03-25T00:00:00.000Z",
      "auth_approval_to_date": "2018-07-25T00:00:00.000Z",
      "owner": {
        "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "username": "Joe",
        "dashboard_status": "Archived"
      },
      "state": {
        "id": 43,
        "name": "Texas"
      },
      "insurance": {
        "id": 46,
        "name": "Humana (Medicare)"
      },
      "service": {
        "id": 29,
        "name": "General Procedure",
        "type": "Procedure"
      },
      "latest_status": {
        "id": "GEN98721",
        "created_at": "2018-01-18T13:42:13.000Z",
        "label": "Approved"
      },
      "procedure_statuses": [
        {
          "procedure_code_type": "CPT",
          "procedure_code": "81162",
          "quantity": 1,
          "status": "APPROVED"
        }
      ],
      "field_details": {
        "cpt_codes": "81162",
        "icd_codes": "Z80.3, Z80.41",
        "service_date_range": "11/10/2018 - 11/15/2018",
        "service_data_range": "11/10/2018 - 11/15/2018"
      }
    }
  },
  "timestamp": "2021-12-20T17:34:06.167Z"
}

Event triggered each time the status of a record changes, and includes the full record representation after the new status has been applied. The event data matches the representation of the record you would receive with the getRecord call at /dashboard/records/{record_id}

Request body

Name Type Required Description
event_name string true record:statusUpdated
event_data object true The event payload
» record DetailedRecord true The updated record, including its full history of record statuses
timestamp string true

Responses

Status Code Description
200 Return a 200 status to indicate that the data was received successfully
204 A 204 status will also be accepted

Schemas

User

{
  "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "username": "Joe",
  "email": "joe@lab.com"
}

Properties

Name Type Required Description
id string true ID for the user object in the form of a UUID
username string true Username for this user
email string false Email on file for this user
teams [string] false No description

BaseField

{
  "id": 30,
  "name": "id",
  "category": "patient",
  "description": "The patient's insurance ID number"
}

Properties

Name Type Required Description
id integer true ID for this base field
name string true Describes the type of field (eg. name, id, address, etc.)
category string true Describes the broader category of field (eg. patient, provider, etc.)
description string true Description explaining what this base field is for

FieldDatum

{
  "id": 30,
  "value": "ABC12345678"
}

Properties

Name Type Required Description
id integer true ID of the field to fill with the given value
value string true Value to enter into the record field

StatusOption

{
  "id": 4,
  "label": "Action Required"
}

Properties

Name Type Required Description
id integer true ID for this status option
label string true Label representing this status option
is_deprecated boolean false Status has been deprecated and will not be used for future updates. Historical updates
may still use this status.

Team

{
  "name": "Main"
}

Properties

Name Type Required Description
name string true The team name.

State

{
  "id": 5,
  "abbreviation": "CA",
  "name": "California"
}

Properties

Name Type Required Description
id integer true ID of the state
abbreviation string true Standard abbreviation for the state
name string true Name of the state/location

Insurance

{
  "id": 328,
  "name": "Blue Shield of California (Federal Employee Plan)"
}

Properties

Name Type Required Description
id integer true ID of the insurance company
name string true Name of the insurance

Service

{
  "id": 38,
  "name": "Molecular and Genetic Testing",
  "type": "Lab"
}

Properties

Name Type Required Description
id integer true ID of the service
name string true Name of the service
type string true Describes the type of service (eg. Drug, Procedure, Lab, etc.)

Medium

{
  "base_field_ids": [
    30,
    40,
    50,
    100,
    130,
    370
  ]
}

Properties

Name Type Required Description
base_field_ids [integer] true Base field IDs present in the medium

Record

{
  "id": "GEN98721",
  "created_at": "2018-01-12T09:21:52.000Z",
  "insurance_map_id": 119,
  "reference_number": "AAAA-123-654444",
  "reference_number_two": "BBBB-456-222222",
  "auth_number": "R123001123",
  "payor_reference_number": "OP0566321321",
  "auth_approval_from_date": "2018-01-15T00:00:00.000Z",
  "owner": {
    "id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY",
    "username": "Sally",
    "dashboard_status": "Active"
  },
  "state": {
    "id": 43,
    "name": "Texas"
  },
  "insurance": {
    "id": 46,
    "name": "Humana (Medicare)"
  },
  "service": {
    "id": 29,
    "name": "General Procedure",
    "type": "Procedure"
  },
  "latest_status": {
    "id": "GEN98721",
    "created_at": "2018-01-18T13:42:13.000Z",
    "label": "Approved"
  },
  "procedure_statuses": [
    {
      "procedure_code_type": "CPT",
      "procedure_code": "81479",
      "quantity": 1,
      "status": "APPROVED"
    }
  ]
}

Properties

Name Type Required Description
id string true ID of the record
created_at string(date) true UTC date in ISO-8601 format for when the record was created
insurance_map_id integer true ID of the insurance map associated with this record
reference_number string false Custom reference number provided by developer when draft was created
reference_number_two string false Second custom reference number provided by developer when draft was created
urgent boolean false Boolean flag indicating if the case is marked as urgent
urgent_reason string false Text summarizing the reason for marking a case as urgent
auth_number string false Authorization number assigned to this case by insurance
payor_reference_number string false Latest reference number given by the payor before an authorization number is assigned
auth_approval_from_date string(date) false If provided, this is the earliest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
auth_approval_to_date string(date) false If provided, this is the latest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
owner object true User object for the owner of this record
» id string true ID for the user object in the form of a UUID
» username string true Username for this user
» dashboard_status enum true The visibility status of this record on the owner's dashboard
state object true No description
» id integer true ID of the state
» name string true Name of the state/location
insurance Insurance true No description
service Service true No description
latest_status RecordStatus true No description
procedure_statuses [ProcedureStatus] true An array of procedure statuses with relevant information. Please note that this array will be empty for cases created in Glidian before individual procedure codes started being tracked.

Enumerated Values

Property Value
dashboard_status Active
dashboard_status Archived
dashboard_status Deleted

DetailedRecord

{
  "id": "GEN98721",
  "created_at": "2018-01-12T09:21:52.000Z",
  "insurance_map_id": 119,
  "reference_number": "AAAA-123-654444",
  "reference_number_two": "BBBB-456-222222",
  "auth_number": "R123001123",
  "payor_reference_number": "OP0566123123",
  "auth_approval_from_date": "2018-03-25T00:00:00.000Z",
  "auth_approval_to_date": "2018-07-25T00:00:00.000Z",
  "owner": {
    "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "username": "Joe",
    "dashboard_status": "Archived"
  },
  "state": {
    "id": 43,
    "name": "Texas"
  },
  "insurance": {
    "id": 46,
    "name": "Humana (Medicare)"
  },
  "service": {
    "id": 29,
    "name": "General Procedure",
    "type": "Procedure"
  },
  "latest_status": {
    "id": "GEN98721",
    "created_at": "2018-01-18T13:42:13.000Z",
    "label": "Approved"
  },
  "procedure_statuses": [
    {
      "procedure_code_type": "CPT",
      "procedure_code": "81162",
      "quantity": 1,
      "status": "APPROVED"
    }
  ],
  "field_details": {
    "cpt_codes": "81162",
    "icd_codes": "Z80.3, Z80.41",
    "service_date_range": "11/10/2018 - 11/15/2018",
    "service_data_range": "11/10/2018 - 11/15/2018"
  }
}

Properties

Name Type Required Description
id string true ID of the record
created_at string(date) true UTC date in ISO-8601 format for when the record was created
insurance_map_id integer true ID of the insurance map associated with this record
reference_number string false Custom reference number provided by developer when draft was created
reference_number_two string false Second custom reference number provided by developer when draft was created
urgent boolean false Boolean flag indicating if the case is marked as urgent
urgent_reason string false Text summarizing the reason for marking a case as urgent
auth_number string false Authorization number assigned to this case by insurance
payor_reference_number string false Latest reference number given by the payor before an authorization number is assigned
auth_approval_from_date string(date) false If provided, this is the earliest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
auth_approval_to_date string(date) false If provided, this is the latest date that this authorization has been approved for. It is in the form of a date in ISO-8601 format
team string false The team the record is assigned to or null when the record is not assigned to a team.
owner object true User object for the owner of this record
» id string true ID for the user object in the form of a UUID
» username string true Username for this user
» dashboard_status enum true The visibility status of this record on the owner's dashboard
state object true No description
» id integer true ID of the state
» name string true Name of the state/location
insurance Insurance true No description
service Service true No description
latest_status RecordStatus true No description
procedure_statuses [ProcedureStatus] true An array of procedure statuses with relevant information. Please note that this array will be empty for cases created in Glidian before individual procedure codes started being tracked. Also note that this is a parsed, more reliable version of the cpt_codes field in the field_details section since that value is the raw, unformated value provided by users on submission
field_details object true Holds any additional fields that are returned with a GET request for a particular record
» cpt_codes string false CPT codes set for this record. This is the raw value initially provided by users. For a more reliable, up-to-date set of CPT values, refer to procedure_statuses.
» icd_codes string false ICD 10 codes set for this record
» service_date_range string false Service date range set for this record.
» service_data_range string false (Deprecated) This is a duplicate of service_date_range that was originally created due to a typo. As a result, this field is deprecated and will be present in v1 but will be removed in a future version of the API

Enumerated Values

Property Value
dashboard_status Active
dashboard_status Archived
dashboard_status Deleted

RecordStatus

{
  "id": "GEN98721",
  "created_at": "2018-01-18T13:42:13.000Z",
  "label": "Approved"
}

Properties

Name Type Required Description
id integer true Record ID of the record status
created_at string(date) true UTC date in ISO-8601 format for when this record status was created
label string true Describes the status type (eg. Denied, Approved, etc.)
reason string false For Denied, Cancelled, and Action Required statuses, the reason provided for this status.
details string false For Denied, Cancelled, and Action Required statuses, additional information about the reason. For example, if the reason was "Not medically necessary," then this field will include a rationale for that determination (if provided by the payor)

ProcedureStatus

{
  "procedure_code_type": "CPT",
  "procedure_code": "81162",
  "quantity": 1,
  "status": "PENDING",
  "modifiers": [
    "RT"
  ]
}

Properties

Name Type Required Description
procedure_code_type string true The type of procedure code being listed. The only option right now is CPT
procedure_code string true The value of the procedure code without the quantity identifier
quantity number true The number of units for the given procedure code
status string true The current status of this procedure code under review. The possible options include PENDING, APPROVED, AUTH_NOT_REQUIRED, and DENIED
modifiers string false No description

ErrorResponse

{
  "status_code": 0,
  "errors": [
    {
      "input": "insurance_id",
      "code": "missing_value",
      "message": "The required input 'insurance_id' is missing a value"
    }
  ]
}

Properties

Name Type Required Description
status_code integer false HTTP status code of the error response
errors [ErrorCode] true No description

ClinicalQuestion

{
  "id": 1,
  "prompt": "Does patient have a history of this condition?",
  "type": "select",
  "options": [
    "Yes",
    "No",
    "Unknown"
  ]
}

Properties

Name Type Required Description
id number true ID of the Clinical Question
prompt string true the text of the question to display to an end-user
type enum true the data type of the question. Implies validation rules. For example, if type is select, the response value must be one of the values in the list. For multi-select, the response must an array of values from the options.
options [string] false Valid options for a select, select-other, and multi-select question types.

Enumerated Values

Property Value
type text
type select
type select-other
type multi-select

ClinicalQuestionResponse

{
  "question_id": 1,
  "value": "Yes",
  "is_valid": true
}

Properties

Name Type Required Description
question_id number true must correspond to a valid ClinicalQuestion id
value string,array true the response to this question. multi-select questions require an array value of valid options.
other_value string false For select-other questions only, the value to use when Other is selected.
is_valid boolean¦null false Indicates whether the provided response is valid for the question. The value may be null when a question was answered previously but a record was updated and that question is no longer relevant.

ErrorCode

{
  "input": "insurance_id",
  "code": "missing_value",
  "message": "The required input 'insurance_id' is missing a value"
}

Properties

Name Type Required Description
input string false Name of the input if this is a validation error
code string true Unique code identifying the type of error this is
message string true Developer message describing the error code
more_info string false URL to more information if available

WebhookPayload

{
  "event_name": "record:statusUpdated",
  "event_data": {
    "record": {
      "id": "GEN123"
    }
  },
  "timestamp": "2021-12-20T17:34:06.167Z"
}

Properties

Name Type Required Description
event_name string true The name of the event generating this notification
event_data object true The event-specific data. The shape of this field will vary by event.
timestamp string true Time when this event occurred in Glidian.
We recommend using this to guard against out-of-order notifications, for example, if you receive an event for the same record id that is older than one already received.

WebhookRecordStatusUpdatedPayload

{
  "event_name": "record:statusUpdated",
  "event_data": {
    "record": {
      "id": "GEN98721",
      "created_at": "2018-01-12T09:21:52.000Z",
      "insurance_map_id": 119,
      "reference_number": "AAAA-123-654444",
      "reference_number_two": "BBBB-456-222222",
      "auth_number": "R123001123",
      "payor_reference_number": "OP0566123123",
      "auth_approval_from_date": "2018-03-25T00:00:00.000Z",
      "auth_approval_to_date": "2018-07-25T00:00:00.000Z",
      "owner": {
        "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
        "username": "Joe",
        "dashboard_status": "Archived"
      },
      "state": {
        "id": 43,
        "name": "Texas"
      },
      "insurance": {
        "id": 46,
        "name": "Humana (Medicare)"
      },
      "service": {
        "id": 29,
        "name": "General Procedure",
        "type": "Procedure"
      },
      "latest_status": {
        "id": "GEN98721",
        "created_at": "2018-01-18T13:42:13.000Z",
        "label": "Approved"
      },
      "procedure_statuses": [
        {
          "procedure_code_type": "CPT",
          "procedure_code": "81162",
          "quantity": 1,
          "status": "APPROVED"
        }
      ],
      "field_details": {
        "cpt_codes": "81162",
        "icd_codes": "Z80.3, Z80.41",
        "service_date_range": "11/10/2018 - 11/15/2018",
        "service_data_range": "11/10/2018 - 11/15/2018"
      }
    }
  },
  "timestamp": "2021-12-20T17:34:06.167Z"
}

Properties

Name Type Required Description
event_name string true record:statusUpdated
event_data object true The event payload
» record DetailedRecord true The updated record, including its full history of record statuses
timestamp string true No description