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:
- input - Indicates the name of the input field which generated the error
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 |
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:
- Get an ID for the state that the insurance is in using the getStates endpoint
- Get an ID for the insurance optionally querying by state ID with the getInsurance endpoint
- Get an ID for the target service among those that are available using the getServices endpoint
- 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' }).
- 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:
-
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.
-
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.
-
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:
-
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
andpassword
-
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, onlycredentials_owner
is supported. -
scope
: (optional) All OAuth scopes required to access your webhook endpoint.
-
-
Basic Auth: Provide your
- 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 |
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 |