Getlabs API v2
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
By integrating the Getlabs API, you can bridge the gap between virtual and in-person healthcare, connecting physician-led telemedicine with in-person care from medical professionals. This enables healthcare providers to extend care to the home unlocking high-quality healthcare for more patients at a fraction of the cost.
With a single API call, we enable our partners to provide end-to-end care for their patients and extend their capabilities to treat new conditions & modalities. What if you could treat primary care remotely? Now you can.
Pick and choose the types of diagnostics you need. Your patients select a convenient time and place. The Getlabs API takes care of everything else.
Maintenance Mode: In the event that the Getlabs API is under maintenance a 503 Service Unavailable will be returned with a matching maintenance mode header (maintenance-mode) set to true. Under normal operation the header defaults false.
Base URLs:
Authentication
All of the API endpoints are secured with Bearer Tokens. You must pass your token with any endpoint request. To do so include the following header in your request replacing the token with one that you've obtained from the /oauth/token endpoint.
Authorization: Bearer c2FkZnNld3J0Z2Zlcndnd2Z3ZXNndGVydGZ3ZXJmZXd0Z2V3Z3dlNGdmM3dmM3c=
Obtaining a Bearer token
In order to make API requests you will need to obtain an access token. Token requests must send a signed JWT. The JWT must be signed (using HS512 algorithm) with the provided getlabs API token/secret. See OAuth section below for more details.
NOTE: the JWT provided with the token request is valid for a period of 24hrs after first use. The JWT will need to be regenerated after that time. It is recommended to regenerate a signed JWT for each token request.
OAuth
Oauth_Token
Code samples
POST https://api.getlabs.com/v2/oauth/token HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/oauth/token \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'
const inputBody = '{
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"assertion": "string",
"refresh_token": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json'
};
fetch('https://api.getlabs.com/v2/oauth/token',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/oauth/token");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/oauth/token', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/oauth/token", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('https://api.getlabs.com/v2/oauth/token', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
result = RestClient.post 'https://api.getlabs.com/v2/oauth/token',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/oauth/token
This endpoint is required to get an access token to access the external api as well as refresh your expired access token
In order to make api requests you will need to get an access token. Token requests must send a JWT as an assertion parameter in the http request payload. The JWT must be signed (using HS512 algorithm) with the provided getlabs api token/secret.
The token payload must contain:
{
aud: string; // getlabs oauth/token endpoint https://api.getlabs.com/v2/oauth/token
sub: string; // your getlabs provided client id
exp: number; // unix timestamp when this jwt bearer token expires
iat: number; // unix timestamp when this jwt bearer token was issued at
}
Refresh Token: Expired access_token(s) can also be refreshed by using this endpoint, resulting in a fresh access_token and refresh_token.
An Authorization header with your expired access_token is required. As well as the refresh_token and grant type in the http request payload.
More details can be found here: Using JWTs as Authorization Grants
Body parameter
{
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"assertion": "string",
"refresh_token": "string"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | OauthRequest | true | none |
Example responses
201 Response
{
"access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE5Nzk2MjEwLTBmZDUtNDFhZi1iOGUzLWM1ODViYzFjN2ExMSIsInR5cGUiOiJQYXJ0bmVyRW50aXR5IiwiaWF0IjoxNjU4NDMzMjU3LCJleHAiOjE2NTg0MzM4NTd9.XQsq-opjVKVmVhvXzU_mGeCqOi3m96ZoHGnLQ90UnFXKQDTTMeTm7lOv9Qd8nNmDab9Ex7VmIKt3Ne8NDvIVWQ",
"refresh_token": "323abcbc59fd263986d4a2afd0f24385457dd5b6",
"token_type": "Bearer",
"expires": "1658433841"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | Access and refresh token details. | OauthToken |
Availability
Availability_List
Code samples
GET https://api.getlabs.com/v2/availability?from=2021-01-01&days=5&street=200%20W.%20Washington%20Street&city=Phoenix&state=AZ&zipCode=85003 HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/availability?from=2021-01-01&days=5&street=200%20W.%20Washington%20Street&city=Phoenix&state=AZ&zipCode=85003 \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/availability?from=2021-01-01&days=5&street=200%20W.%20Washington%20Street&city=Phoenix&state=AZ&zipCode=85003',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/availability?from=2021-01-01&days=5&street=200%20W.%20Washington%20Street&city=Phoenix&state=AZ&zipCode=85003");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/availability', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/availability", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/availability', params={
'from': '2021-01-01', 'days': '5', 'street': '200 W. Washington Street', 'city': 'Phoenix', 'state': 'AZ', 'zipCode': '85003'
}, headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/availability',
params: {
'from' => 'string(date)',
'days' => 'number',
'street' => 'string',
'city' => 'string',
'state' => 'string',
'zipCode' => 'string'
}, headers: headers
p JSON.parse(result)
GET /v2/availability
Returns a list of appointment slots grouped by day. Available slots will have a booking key, this key is required when using the appointment endpoint to book an appointment.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| from | query | string(date) | true | The first date to query appointment availability in the YYYY-MM-DD format |
| days | query | number | true | The number of days to return appointment availability for |
| street | query | string | true | The street address for the appointment |
| unit | query | string | false | The unit number for the appointment |
| city | query | string | true | The city for the appointment |
| state | query | string | true | The 2 character state code for the appointment |
| zipCode | query | string | true | The 5 digit zip code for the appointment |
Example responses
200 Response
{
"serviceable": true,
"data": [
{
"date": "2021-07-01",
"slots": [
{
"key": "yGDknWzB74gP8zpET+HrI3jQVyq4ss/ENX38C1eJSR3D7zCHGloM0URG8V2y1nltsTgvED2q/ZcyJZzfZcWc021/Hg1TWICUkDXl627QDdytvUGsEcy9dqpxtqNLmkCtBRcQHnbgaSIR9E7gZ/5fj6NfTwnRH1coitxlOUCsrm9x76l80saizu9M3L5UqafNB7MtbkcCtfB4h9nubzUXahEbXPq0wFvbt/2VQl7311Vgro9XC3k/CbeBMtiQXhSMqslRop44NJO7Rp6qHEjsrZOJVfcKd3ASuYFEspBi+J+ddRilOS4p06Ai8nhrIx3pbLXoRm4aSqNaLCx5lbldLeh08ozRBt3oBGZDzwxdsYzu8iBgxMMGbH/AUpuR+7Lh9YE=",
"start": "2021-07-01T12:00:00.000Z",
"end": "2021-07-01T13:00:00.000Z",
"expiresAt": "2021-06-22T12:00:00.000Z",
"price": "2900",
"priority": true,
"available": 3
}
]
}
],
"tz": "America/Phoenix"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The available appointment timeslots grouped by day | AvailabilityResponse |
| 400 | Bad Request | Invalid request data | BadRequest |
Appointment
Appointment_List
Code samples
GET https://api.getlabs.com/v2/appointment HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | number | false | The number of records to limit in the pagination |
| offset | query | number | false | The offset in the pagination |
| startAt | query | string(date) | false | The start date to query appointments in the YYYY-MM-DD format |
| endAt | query | string(date) | false | The end date to query appointments in the YYYY-MM-DD format |
| order | query | string(string) | false | A CSV of appointment propertyName:asc |
| status | query | array[string] | false | An array of statuses to filter results by |
| state | query | array[string] | false | An array of 2 character state codes |
| patientId | query | string | false | The patient's ID to filter the results by |
Enumerated Values
| Parameter | Value |
|---|---|
| status | pending |
| status | confirmed |
| status | in-progress |
| status | completed |
| status | cancelled |
Example responses
200 Response
{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
],
"total": 25
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | This is a paged response that will return an array of Appointments. | Inline |
| 400 | Bad Request | Invalid request data | BadRequest |
Response Schema
Enumerated Values
| Property | Value |
|---|---|
| status | pending |
| status | confirmed |
| status | in-progress |
| status | completed |
| status | cancelled |
| birthSex | male |
| birthSex | female |
| birthSex | other |
| purpose | lab-order |
| purpose | insurance-front |
| purpose | insurance-rear |
| purpose | lab-order |
| purpose | insurance-front |
| purpose | insurance-rear |
| cancellationOrigin | patient |
| cancellationOrigin | partner |
| cancellationOrigin | getlabs |
| cancellationOrigin | null |
Appointment_Create
Code samples
POST https://api.getlabs.com/v2/appointment HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/appointment \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/appointment', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/appointment", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/appointment', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/appointment',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/appointment
Creates a new appointment. There are a couple prerequisite requirements before creating an appointment:
- Retrieve a patient ID from the patient endpoint.
- Retrieve a booking key from the availability endpoint. The time and location of the appointment is retrieved from this key.
- (optional) Upload any required lab order files, using the file endpoint and use those file IDs when creating the appointment.
- (optional) Add any partner products to the appointment.
Body parameter
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | AppointmentBook | true | none |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The newly created appointment | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 409 | Conflict | A string describing that we couldn't accept the request due to a conflict. Usually, a duplicated externalId. | ConflictError |
| 422 | Unprocessable Entity | A string describing why we could not process the entity. Usually, the patient already has an appt booked for that day. | UnprocessableError |
Appointment_Read
Code samples
GET https://api.getlabs.com/v2/appointment/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment/{id}
Fetches an existing appointment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment ID |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The existing appointment | Appointment |
| 404 | Not Found | The appointment does not exist | NotFound |
Appointment_Rebook
Code samples
PATCH https://api.getlabs.com/v2/appointment/{id}/rebook HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/appointment/{id}/rebook \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ=="
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}/rebook',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}/rebook");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/appointment/{id}/rebook', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/appointment/{id}/rebook", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/appointment/{id}/rebook', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/appointment/{id}/rebook',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/appointment/{id}/rebook
Change the time or address of an existing appointment. A new booking key must first be retrieved from the availability endpoint.
NOTE: This endpoint returns success if the appointment can be rescheduled:
- The original appointment time is > 24 hours
- The original appointment is cancellable (see cancel endpoint)
Body parameter
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ=="
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment ID |
| body | body | AppointmentBookingKey | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The modified appointment | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 404 | Not Found | The appointment does not exist | NotFound |
Appointment_Redraw
Code samples
POST https://api.getlabs.com/v2/appointment/{id}/redraw HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/appointment/{id}/redraw \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"bookingKey": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"partnerProductConfigIds": [
"0d54e124-fa27-482d-8416-9d088b40e326"
]
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}/redraw',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}/redraw");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/appointment/{id}/redraw', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/appointment/{id}/redraw", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/appointment/{id}/redraw', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/appointment/{id}/redraw',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/appointment/{id}/redraw
Schedule a redraw for this appointment.
NOTE: This endpoint returns success if the appointment can be redrawn:
- The original appointment has a status of completed or cancelled
- The original appointment has completed a quality investigation from Getlabs
Body parameter
{
"bookingKey": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"partnerProductConfigIds": [
"0d54e124-fa27-482d-8416-9d088b40e326"
]
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The original appointment ID |
| body | body | AppointmentRedraw | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The newly created appointment to be redrawn | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 404 | Not Found | The appointment does not exist | NotFound |
| 422 | Unprocessable Entity | A string describing why we could not process the entity. | UnprocessableError |
Appointment_Cancel
Code samples
PATCH https://api.getlabs.com/v2/appointment/{id}/cancel HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/appointment/{id}/cancel \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"cancellationReasonId": "bbe18b64-79e3-4309-b8ed-556d65f0d00a",
"note": "Circumstances caused the patient to be unable to make it"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}/cancel',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}/cancel");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/appointment/{id}/cancel', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/appointment/{id}/cancel", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/appointment/{id}/cancel', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/appointment/{id}/cancel',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/appointment/{id}/cancel
Cancels an existing appointment. A cancellation reason ID from the cancellation-reason endpoint is preferred. If the reason is "Other" then a note explaining the reason is also required.
NOTE: This endpoint returns success if the appointment can be cancelled:
- The appointment time is > 2 hours
- The appointment is in a pending or confirmed state
Body parameter
{
"cancellationReasonId": "bbe18b64-79e3-4309-b8ed-556d65f0d00a",
"note": "Circumstances caused the patient to be unable to make it"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment ID |
| body | body | AppointmentCancel | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The cancelled appointment | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 404 | Not Found | The appointment does not exist | NotFound |
Appointment_ReadCollectedData
Code samples
GET https://api.getlabs.com/v2/appointment/{id}/collected-data HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment/{id}/collected-data \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}/collected-data',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}/collected-data");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment/{id}/collected-data', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment/{id}/collected-data", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment/{id}/collected-data', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment/{id}/collected-data',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment/{id}/collected-data
Fetches the data collected during the appointment
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment ID |
Example responses
200 Response
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"data": {
"biometrics": {
"patient_consent_signature": {
"value": "7611ddbe-42a3-4805-aefe-d8dac7e4cde7",
"valueType": "fileId",
"fileUrl": "https://someurl.com/7611ddbe-42a3-4805-aefe-d8dac7e4cde7"
},
"blood_pressure": {
"blood_pressure_systolic": {
"value": 120,
"unit": "mmHg",
"valueType": "number"
},
"blood_pressure_diastolic": {
"value": 20,
"unit": "mmHg",
"valueType": "number"
}
},
"weight": {
"value": 199,
"unit": "pounds",
"valueType": "number"
},
"height": {
"value": 178,
"unit": "inches",
"valueType": "number"
}
},
"specialist_checklist": {
"did_patient_fast": {
"value": "true",
"valueType": "yesno"
},
"is_patient_pregnant": {
"value": "false",
"valueType": "yesno"
}
}
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The appointment's collected data | AppointmentCollectedData |
| 400 | Bad Request | Invalid request data | BadRequest |
Appointment_ReadReschedules
Code samples
GET https://api.getlabs.com/v2/appointment/{id}/reschedules HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment/{id}/reschedules \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{id}/reschedules',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{id}/reschedules");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment/{id}/reschedules', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment/{id}/reschedules", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment/{id}/reschedules', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment/{id}/reschedules',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment/{id}/reschedules
Fetches the reschedules for an appointment.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment ID. |
Example responses
200 Response
{
"appointmentId": "24c6adb3-18be-4108-aa61-3d58879e05a2",
"data": [
{
"rescheduledAt": "2019-08-24T14:15:22Z",
"previousStartAt": "2019-08-24T14:15:22Z",
"rescheduleOrigin": "patient"
}
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The appointment reschedules. | AppointmentReschedules |
| 400 | Bad Request | Invalid request data | BadRequest |
Appointment_ReadByExternalId
Code samples
GET https://api.getlabs.com/v2/appointment/external-id/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment/external-id/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/external-id/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/external-id/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment/external-id/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment/external-id/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment/external-id/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment/external-id/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment/external-id/{id}
Fetches an appointment by an external identifier
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | Partner's external identifier for the appointment |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The appointment details | Appointment |
| 404 | Not Found | An appointment with the provided external id does not exist | NotFound |
Appointment Group
AppointmentGroup_Read
Code samples
GET https://api.getlabs.com/v2/appointment-group/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment-group/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-group/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-group/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment-group/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment-group/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment-group/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment-group/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment-group/{id}
Fetches an existing appointment group.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment group ID. |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"appointments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The appointment group. | AppointmentGroup |
| 404 | Not Found | The appointment group does not exist | NotFound |
AppointmentGroup_Book
Code samples
POST https://api.getlabs.com/v2/appointment-group HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/appointment-group \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"appointments": [
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
]
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-group',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-group");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/appointment-group', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/appointment-group", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/appointment-group', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/appointment-group',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/appointment-group
Create a group of appointments that will be serviced together during a chosen timeslot. There are a couple prerequisite requirements before creating an appointment group:
- Retrieve a list patient IDs from the patient endpoint.
- Retrieve a booking key from the availability endpoint. The time and location of the appointments is retrieved from this key.
- (optional) Upload any required lab order files, using the file endpoint and use those file IDs when creating the appointment.
Body parameter
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"appointments": [
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
]
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | CreateAppointmentGroup | true | none |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"appointments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The newly created appointment group | AppointmentGroup |
| 400 | Bad Request | Invalid request data | BadRequest |
| 409 | Conflict | A string describing that we couldn't accept the request due to a conflict. Usually, a duplicated externalId. | ConflictError |
| 422 | Unprocessable Entity | A string describing that we could not process the entity. Usually, the patient(s) already has an appt booked for that day. | UnprocessableError |
AppointmentGroup_CancelGroupAppointments
Code samples
PATCH https://api.getlabs.com/v2/appointment-group/{id}/cancel HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/appointment-group/{id}/cancel \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"cancellationReasonId": "bbe18b64-79e3-4309-b8ed-556d65f0d00a",
"note": "Circumstances caused the patient to be unable to make it"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-group/{id}/cancel',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-group/{id}/cancel");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/appointment-group/{id}/cancel', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/appointment-group/{id}/cancel", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/appointment-group/{id}/cancel', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/appointment-group/{id}/cancel',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/appointment-group/{id}/cancel
Cancels all of the appointments within an appointment group. A cancellation reason ID from the cancellation-reason endpoint is required. If the reason is "Other" then a note explaining the reason is also required.
NOTE: This endpoint returns success if the appointment group can be cancelled:
- The appointment time is > 2 hours
- The appointment is in Pending or Confirmed status
Body parameter
{
"cancellationReasonId": "bbe18b64-79e3-4309-b8ed-556d65f0d00a",
"note": "Circumstances caused the patient to be unable to make it"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment group ID. |
| body | body | AppointmentCancel | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"appointments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The cancelled appointment group. | AppointmentGroup |
| 404 | Not Found | The appointment group does not exist. | NotFound |
| 422 | Unprocessable Entity | A string describing why we could not process the request. | UnprocessableError |
AppointmentGroup_RebookGroupAppointments
Code samples
PATCH https://api.getlabs.com/v2/appointment-group/{id}/rebook HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/appointment-group/{id}/rebook \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ=="
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-group/{id}/rebook',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-group/{id}/rebook");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/appointment-group/{id}/rebook', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/appointment-group/{id}/rebook", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/appointment-group/{id}/rebook', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/appointment-group/{id}/rebook',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/appointment-group/{id}/rebook
Change the time or address of an existing appointment group. A new booking key must first be retrieved from the availability endpoint.
NOTE: This endpoint returns success if the appointment group can be rescheduled:
- The original appointment time is > 24 hours
- The original appointment is in Pending or Confirmed status
Body parameter
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ=="
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment group ID. |
| body | body | AppointmentBookingKey | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"appointments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The modified appointment group. | AppointmentGroup |
| 404 | Not Found | The appointment group does not exist. | NotFound |
| 422 | Unprocessable Entity | A string describing why we could not process the request. | UnprocessableError |
Lab Order Details
AppointmentLabOrder_Create
Code samples
POST https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/appointment/{appointmentId}/lab-order-details
Adds lab order details to an existing appointment. Only appointments with a status of "pending" can be modified.
Body parameter
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| appointmentId | path | string(uuid) | true | The appointment ID |
| body | body | LabOrderDetails | true | The new lab order details |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The updated appointment | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 404 | Not Found | The appointment does not exist | NotFound |
AppointmentLabOrder_Delete
Code samples
DELETE https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X DELETE https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}',
{
method: 'DELETE',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('DELETE','https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("DELETE", "https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.delete('https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.delete 'https://api.getlabs.com/v2/appointment/{appointmentId}/lab-order-details/{id}',
params: {
}, headers: headers
p JSON.parse(result)
DELETE /v2/appointment/{appointmentId}/lab-order-details/{id}
Remove lab order details from an existing appointment. Each appointment requires at least one lab order, if the last one needs to be deleted add a new one first. Only appointments with a status of "pending" can be modified.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The lab order details ID to be deleted |
| appointmentId | path | string(uuid) | true | The appointment ID |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The updated appointment | Appointment |
| 400 | Bad Request | Invalid request data | BadRequest |
| 404 | Not Found | The appointment or lab order details does not exist | NotFound |
Patient
Patient_Create
Code samples
POST https://api.getlabs.com/v2/patient HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/patient \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/patient',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/patient");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/patient', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/patient", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/patient', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/patient',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/patient
Creates a new patient.
To ensure direct communication on the day of the appointment, Getlabs asks that you provide patient contact information directly regarding their appointment. A partner provider consumer contact may be used if required.
NOTE: Previous patient matching functionality has been retired. Each call to the Patient Create endpoint will now result in a new patient record being created.In order to avoid creating duplicate patient records, it is advised to either:
1. Store the patient ID returned from the initial patient creation request in your application and use it in subsequent API calls
2. Pass a unique externalId value when creating/updating patients that can later be used to lookup the patient
Body parameter
{
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | Patient | true | none |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The requested patient | Patient |
| 400 | Bad Request | Invalid request data | BadRequest |
| 409 | Conflict | A patient with the given external id already exists. | None |
Patient_Read
Code samples
GET https://api.getlabs.com/v2/patient/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/patient/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/patient/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/patient/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/patient/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/patient/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/patient/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/patient/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/patient/{id}
Fetches an existing patient
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The patient ID |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The patient's details | Patient |
| 404 | Not Found | The patient does not exist | NotFound |
Patient_Update
Code samples
PATCH https://api.getlabs.com/v2/patient/{id} HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/patient/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"externalId": "string",
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"firstName": "Jane",
"lastName": "Doe",
"birthSex": "female",
"email": "user@example.com",
"phoneNumber": "6025554567",
"pronouns": "She/Her",
"notes": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/patient/{id}',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/patient/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/patient/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/patient/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/patient/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/patient/{id}',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/patient/{id}
Updates an existing patient's details
Body parameter
{
"externalId": "string",
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"firstName": "Jane",
"lastName": "Doe",
"birthSex": "female",
"email": "user@example.com",
"phoneNumber": "6025554567",
"pronouns": "She/Her",
"notes": "string"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The patient ID |
| body | body | PatientUpdate | true | none |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The patient's details | Patient |
| 404 | Not Found | The patient does not exist | NotFound |
| 409 | Conflict | A patient with the given external id already exists. | None |
Patient_ReadByExternalId
Code samples
GET https://api.getlabs.com/v2/patient/external-id/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/patient/external-id/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/patient/external-id/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/patient/external-id/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/patient/external-id/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/patient/external-id/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/patient/external-id/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/patient/external-id/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/patient/external-id/{id}
Fetches a patient by an external identifier
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | Partner's external identifier for the patient |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The patient's details | Patient |
| 404 | Not Found | A patient with the given external id does not exist | NotFound |
Appointment Requests
AppointmentRequest_Read
Code samples
GET https://api.getlabs.com/v2/appointment-requests/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment-requests/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-requests/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-requests/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment-requests/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment-requests/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment-requests/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment-requests/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment-requests/{id}
Fetches an existing appointment request
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment request ID |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"appointmentData": {
"patientId": "5629a84d-a302-47c2-82f3-430f2a100a74",
"partnerId": "112a778e-0a54-4cf9-9390-e1b7c4b7b7f9",
"address": {
"street": "600 E Washington St",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85004",
"unit": null
}
},
"cancellationReason": "malformed-data",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"appointmentId": "string",
"lastNotifiedAt": "2019-08-24T14:15:22Z",
"timesNotified": 0,
"bookingUrl": "https://app.getlabs.com/booking-request/abcd123-a123-123d-456f-123ab4c56d78",
"groupId": "string"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The existing appointment request | AppointmentRequest |
| 404 | Not Found | The appointment request does not exist | NotFound |
AppointmentRequest_Create
Code samples
POST https://api.getlabs.com/v2/appointment-requests HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/appointment-requests \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003"
},
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"shouldNotifyPatient": true
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-requests',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-requests");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/appointment-requests', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/appointment-requests", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/appointment-requests', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/appointment-requests',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/appointment-requests
Partnership Platform Feature
Creates a new appointment request. An appointment request is a partially completed appointment where the patient is responsible for completing the booking. The patient will be notified to schedule the appointment via SMS after the request is created. If you have all the data required to book an appointment, please use the POST /appointment endpoint.
There are a couple prerequisite requirements before creating an appointment request:
- Retrieve a patient ID from the patient endpoint.
- (optional) Upload any required lab order files, using the file endpoint and use those file IDs when creating the appointment request.
Body parameter
{
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003"
},
"labOrderDetails": [
{
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"insurance": {
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"shouldNotifyPatient": true
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | CreateAppointmentRequest | true | none |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"appointmentData": {
"patientId": "5629a84d-a302-47c2-82f3-430f2a100a74",
"partnerId": "112a778e-0a54-4cf9-9390-e1b7c4b7b7f9",
"address": {
"street": "600 E Washington St",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85004",
"unit": null
}
},
"cancellationReason": "malformed-data",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"appointmentId": "string",
"lastNotifiedAt": "2019-08-24T14:15:22Z",
"timesNotified": 0,
"bookingUrl": "https://app.getlabs.com/booking-request/abcd123-a123-123d-456f-123ab4c56d78",
"groupId": "string"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The newly created appointment request | AppointmentRequest |
| 400 | Bad Request | Invalid request data | BadRequest |
| 422 | Unprocessable Entity | A string explaining why we could not process the request. | UnprocessableError |
AppointmentRequest_List
Code samples
GET https://api.getlabs.com/v2/appointment-requests HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/appointment-requests \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-requests',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-requests");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/appointment-requests', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/appointment-requests", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/appointment-requests', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/appointment-requests',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/appointment-requests
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | number | false | The number of records to limit in the pagination |
| offset | query | number | false | The offset in the pagination |
| order | query | string(string) | false | A CSV of appointment propertyName:asc |
| status | query | array[string] | false | An array of statuses to filter results by |
| createdAtMin | query | string(date-time) | false | Return appointment requests that were created on or after the specified date and time. |
| createdAtMax | query | string(date-time) | false | Return appointment requests that were created on or before the specified date and time. |
| state | query | array[string] | false | An array of 2 character state codes |
| appointmentId | query | string | false | The appointment Id that belongs to the appointment request. This is only available after the appointment request has been scheduled. |
Enumerated Values
| Parameter | Value |
|---|---|
| status | pending |
| status | processed |
| status | notified |
| status | unresponsive |
| status | scheduled |
| status | fulfilled |
| status | errored |
| status | cancelled |
Example responses
200 Response
{
"data": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"appointmentData": {
"patientId": "5629a84d-a302-47c2-82f3-430f2a100a74",
"partnerId": "112a778e-0a54-4cf9-9390-e1b7c4b7b7f9",
"address": {
"street": "600 E Washington St",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85004",
"unit": null
}
},
"cancellationReason": "malformed-data",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"appointmentId": "string",
"lastNotifiedAt": "2019-08-24T14:15:22Z",
"timesNotified": 0,
"bookingUrl": "https://app.getlabs.com/booking-request/abcd123-a123-123d-456f-123ab4c56d78",
"groupId": "string"
}
],
"total": 25
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | This is a paged response that will return an array of appointment requests | Inline |
| 400 | Bad Request | Invalid request data | BadRequest |
Response Schema
Enumerated Values
| Property | Value |
|---|---|
| status | pending |
| status | processed |
| status | notified |
| status | unresponsive |
| status | scheduled |
| status | fulfilled |
| status | errored |
| status | cancelled |
| birthSex | male |
| birthSex | female |
| birthSex | other |
| purpose | lab-order |
| purpose | insurance-front |
| purpose | insurance-rear |
| purpose | lab-order |
| purpose | insurance-front |
| purpose | insurance-rear |
| cancellationReason | malformed-data |
| cancellationReason | not-serviceable |
| cancellationReason | null |
AppointmentRequest_Cancel
Code samples
PATCH https://api.getlabs.com/v2/appointment-requests/{id}/cancel HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X PATCH https://api.getlabs.com/v2/appointment-requests/{id}/cancel \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/appointment-requests/{id}/cancel',
{
method: 'PATCH',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/appointment-requests/{id}/cancel");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.getlabs.com/v2/appointment-requests/{id}/cancel', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.getlabs.com/v2/appointment-requests/{id}/cancel", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.patch('https://api.getlabs.com/v2/appointment-requests/{id}/cancel', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.patch 'https://api.getlabs.com/v2/appointment-requests/{id}/cancel',
params: {
}, headers: headers
p JSON.parse(result)
PATCH /v2/appointment-requests/{id}/cancel
Cancels an appointment request.
Appointment requests can only be cancelled while they are in a pending, notified, unresponsive state.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | The appointment request ID |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
}
},
"appointmentData": {
"patientId": "5629a84d-a302-47c2-82f3-430f2a100a74",
"partnerId": "112a778e-0a54-4cf9-9390-e1b7c4b7b7f9",
"address": {
"street": "600 E Washington St",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85004",
"unit": null
}
},
"cancellationReason": "malformed-data",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"appointmentId": "string",
"lastNotifiedAt": "2019-08-24T14:15:22Z",
"timesNotified": 0,
"bookingUrl": "https://app.getlabs.com/booking-request/abcd123-a123-123d-456f-123ab4c56d78",
"groupId": "string"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The cancelled appointment request | AppointmentRequest |
| 400 | Bad Request | Invalid request data | BadRequest |
| 422 | Unprocessable Entity | A string explaining why we could not process the request. | UnprocessableError |
File
File_Create
Code samples
POST https://api.getlabs.com/v2/file HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/file \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/file',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/file");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/file', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/file", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/file', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/file',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/file
Uploads a Base64 encoded file. If attaching a lab order file to an appointment it is first uploaded to this endpoint and the ID is used when creating the appointment. File types accepted are png, jpeg, tif, and pdf.
Body parameter
{
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | File | true | none |
Example responses
201 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"size": 13264,
"type": "string"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The newly created file | File |
| 400 | Bad Request | Invalid request data | BadRequest |
Cancellation Reasons
CancellationReasons_List
Code samples
GET https://api.getlabs.com/v2/cancellation-reason HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/cancellation-reason \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/cancellation-reason',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/cancellation-reason");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/cancellation-reason', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/cancellation-reason", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/cancellation-reason', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/cancellation-reason',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/cancellation-reason
Returns a list of reasons an appointment can be cancelled. A cancellation reason ID is needed to cancel an appointment
Example responses
200 Response
[
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
}
]
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | An array of all the cancellation reasons | Inline |
Response Schema
Status Code 200
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| anonymous | [CancellationReason] | false | none | none |
| » id | string(uuid) | true | read-only | The ID of the cancellation reason |
| » name | string | true | read-only | What the cancellation reason is used for |
| » isRefundable | boolean | true | read-only | If true the patient is entitled to a refund after cancelling the appointment |
Service Area
read
Code samples
GET https://api.getlabs.com/v2/service-area/zip-code/{zipCode} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/service-area/zip-code/{zipCode} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/service-area/zip-code/{zipCode}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/service-area/zip-code/{zipCode}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/service-area/zip-code/{zipCode}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/service-area/zip-code/{zipCode}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/service-area/zip-code/{zipCode}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/service-area/zip-code/{zipCode}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/service-area/zip-code/{zipCode}
Fetches a service area for a given zip code. It can be used to determine if Getlabs is able to book appointments for a given zip code.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| zipCode | path | string | true | The 5 digit zip code for the service area |
Example responses
200 Response
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"city": "Phoenix",
"county": "Maricopa County",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix",
"startDate": "2021-01-01T07:00:00.000Z",
"endDate": "2022-01-01T07:00:00.000Z",
"isActive": true
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The service area details | ServiceArea |
| 404 | Not Found | No service area exists for the given zip code | NotFound |
Payment
create setup intent
Code samples
POST https://api.getlabs.com/v2/payment/setup HTTP/1.1
Host: api.getlabs.com
Content-Type: application/json
Accept: application/json
# You can also use wget
curl -X POST https://api.getlabs.com/v2/payment/setup \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const inputBody = '{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/payment/setup',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/payment/setup");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.getlabs.com/v2/payment/setup', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.getlabs.com/v2/payment/setup", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.post('https://api.getlabs.com/v2/payment/setup', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.post 'https://api.getlabs.com/v2/payment/setup',
params: {
}, headers: headers
p JSON.parse(result)
POST /v2/payment/setup
Creates a setup intent with Stripe. This is needed to collect a patient's credit card details using Stripe's client API. This endpoint is only used by partners who have opted for their patients to directly pay for the appointment.
Body parameter
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7"
}
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| body | body | PaymentCreateSetup | true | none |
Example responses
201 Response
{
"clientSecret": "seti_1Jv3iKB60neqlRn35yPUsJN6_secret_KaEA3x316GYgEyYZUgdiUo2K1cwoDbw"
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 201 | Created | The created Stripe setup intent | PaymentSetup |
| 400 | Bad Request | Invalid request data | BadRequest |
Product
Product_List
Code samples
GET https://api.getlabs.com/v2/product HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/product \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/product',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/product");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/product', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/product", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/product', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/product',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/product
Lists all configured partner products that can be added when creating an appointment
Example responses
200 Response
{
"productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
"partnerProductConfigId": "0d54e124-fa27-482d-8416-9d088b40e326",
"name": "Biometrics",
"description": "Biometrics Testing for adults",
"type": "kit-draw",
"externalId": [
"1234",
"56788"
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | Return an array of partner products. | PartnerProduct |
Product_ReadByExternalId
Code samples
GET https://api.getlabs.com/v2/product/external-id/{id} HTTP/1.1
Host: api.getlabs.com
Accept: application/json
# You can also use wget
curl -X GET https://api.getlabs.com/v2/product/external-id/{id} \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}'
const headers = {
'Accept':'application/json',
'Authorization':'Bearer {access-token}'
};
fetch('https://api.getlabs.com/v2/product/external-id/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
URL obj = new URL("https://api.getlabs.com/v2/product/external-id/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.getlabs.com/v2/product/external-id/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"Authorization": []string{"Bearer {access-token}"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.getlabs.com/v2/product/external-id/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
import requests
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer {access-token}'
}
r = requests.get('https://api.getlabs.com/v2/product/external-id/{id}', headers = headers)
print(r.json())
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'Authorization' => 'Bearer {access-token}'
}
result = RestClient.get 'https://api.getlabs.com/v2/product/external-id/{id}',
params: {
}, headers: headers
p JSON.parse(result)
GET /v2/product/external-id/{id}
Fetches an product by a partner supplied external identifier
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string(uuid) | true | Partner's external identifier for a product |
Example responses
200 Response
{
"productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
"partnerProductConfigId": "0d54e124-fa27-482d-8416-9d088b40e326",
"name": "Biometrics",
"description": "Biometrics Testing for adults",
"type": "kit-draw",
"externalId": [
"1234",
"56788"
]
}
Responses
| Status | Meaning | Description | Schema |
|---|---|---|---|
| 200 | OK | The product that matches a partner supplied external id | PartnerProduct |
| 404 | Not Found | An appointment with the provided external id does not exist | NotFound |
Schemas
Address
{
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| street | string | true | none | Street address |
| unit | string¦null | false | none | Unit number |
| city | string | true | none | City |
| state | string | true | none | 2 character state code |
| zipCode | string | true | none | 5 digit zip code for the appointment |
| timezone | string¦null | false | read-only | The timezone for the address |
Appointment
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | none |
| identifier | string | true | read-only | A short identifier to reference the appointment |
| status | string | true | read-only | The current status of the appointment Pending = Appointment is yet to be readied Confirmed = Appointment has been readied and waiting to be serviced In-progress = Specialist is on-route/arrived at patient's home Completed = Successful lab draw Cancelled = Appointment canceled by us or the patient |
| patient | Patient | true | read-only | Patient details for the appointment |
| labOrderDetails | [LabOrderDetails] | true | none | Lab order details for the appointment |
| startAt | string(date-time) | true | read-only | Appointment start time |
| endAt | string(date-time) | true | read-only | Appointment end time |
| isRebook | boolean | false | read-only | True if the appointment has been rescheduled. |
| address | Address | true | read-only | Address where the appointment will take place |
| isRefundable | boolean | true | read-only | True if canceling the appointment will result in a refund |
| isRebookable | boolean | true | read-only | True if the start time of the appointment can be changed |
| cancellationReason | CancellationReason¦null | false | read-only | The reason the appointment was cancelled |
| cancellationNote | string¦null | false | read-only | Any extra information as to why the appointment was cancelled |
| cancellationOrigin | string¦null | false | read-only | The origin of the cancellation. Will be one of patient, partner, or getlabs. |
| cancellationChargeable | boolean | true | read-only | Denotes if Getlabs will still charge for the appointment based on the cancellation. |
| behalfOf | BehalfOf¦null | false | read-only | Details of the person booking on behalf of the patient. |
| parkingInstruction | string¦null | false | read-only | Instructions for parking. |
| specialRequest | string¦null | false | read-only | Special request notes. |
| specimens | [ExtendedFile] | false | read-only | Specimens collected for the appointment. Specimens will only exist on completed/near-complete appointments. |
| samples | [AppointmentSample] | false | read-only | Samples for the appointment. Samples will only exist after an appointment has been confirmed. |
| createdAt | string(date-time) | true | read-only | Appointment created date/time |
| redrawnFromId | string(uuid)¦null | false | read-only | The appointment ID of the original appointment that this redraw is for. |
| externalId | string¦null | false | none | External identifier for the appointment. |
| updatedEta | string(date-time)¦null | true | read-only | Specialist's ETA date/time (UTC), available when status is In-progress |
| isRedrawable | boolean | true | read-only | True if the appointment can be redrawn. |
Enumerated Values
| Property | Value |
|---|---|
| status | pending |
| status | confirmed |
| status | in-progress |
| status | completed |
| status | cancelled |
| cancellationOrigin | patient |
| cancellationOrigin | partner |
| cancellationOrigin | getlabs |
| cancellationOrigin | null |
AppointmentBook
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| key | string | true | none | The booking key retrieved from the availability endpoint. A key is valid for 60 minutes after generation, to book an appointment after that a new key is needed. |
| patientId | string(uuid) | true | none | The patient's ID as retrieved from the /patient endpoint |
| labOrderDetails | [LabOrderDetails] | true | none | An array of LabOrderDetails objects. If the key being used is for a priority appointment then labOrderFileIds must be provided for at least one LabOrderDetail. |
| paymentMethod | string | false | none | The Stripe payment method ID fetched using the Stripe client API. This is only required if your account is setup to bill patients directly. |
| behalfOf | BehalfOf | false | none | Details of the person booking on behalf of the patient |
| parkingInstruction | string | false | none | Instructions for parking. |
| specialRequest | string | false | none | Special instruction notes. |
| products | [AppointmentProduct] | false | none | Partner Products attached to the appointment. |
| externalId | string¦null | false | none | External identifier for the appointment. |
AppointmentBookingKey
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ=="
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| key | string | true | none | The booking key retrieved from the availability endpoint. A key is valid for 60 minutes after generation, to book an appointment after that a new key is needed. |
AppointmentCancel
{
"cancellationReasonId": "bbe18b64-79e3-4309-b8ed-556d65f0d00a",
"note": "Circumstances caused the patient to be unable to make it"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| cancellationReasonId | string(uuid) | false | none | The ID of the cancellation reason as retrieved from the cancellation-reason endpoint. While this is no longer required, it's suggested as it's important data internally helping us to continually improve. |
| note | string | false | none | Extra information as to why the appointment is being cancelled, this is required if the cancellation reason is "other" or if no cancellation reason is set |
AppointmentCollectedData
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"data": {
"biometrics": {
"patient_consent_signature": {
"value": "7611ddbe-42a3-4805-aefe-d8dac7e4cde7",
"valueType": "fileId",
"fileUrl": "https://someurl.com/7611ddbe-42a3-4805-aefe-d8dac7e4cde7"
},
"blood_pressure": {
"blood_pressure_systolic": {
"value": 120,
"unit": "mmHg",
"valueType": "number"
},
"blood_pressure_diastolic": {
"value": 20,
"unit": "mmHg",
"valueType": "number"
}
},
"weight": {
"value": 199,
"unit": "pounds",
"valueType": "number"
},
"height": {
"value": 178,
"unit": "inches",
"valueType": "number"
}
},
"specialist_checklist": {
"did_patient_fast": {
"value": "true",
"valueType": "yesno"
},
"is_patient_pregnant": {
"value": "false",
"valueType": "yesno"
}
}
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| patientId | string(uuid) | true | read-only | The patients's ID |
| data | object | true | read-only | Collected data from the appointment, unique to partner configured product(s). Response is an object of (one or many) {"productKey": {"productPropertyKey": {valueObject} } } |
AppointmentGroup
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"appointments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"identifier": "PWDYA7",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"startAt": "2021-07-01T12:00:00.000Z",
"endAt": "2021-07-01T13:00:00.000Z",
"isRebook": true,
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"isRefundable": true,
"isRebookable": true,
"cancellationReason": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
},
"cancellationNote": "string",
"cancellationOrigin": "patient",
"cancellationChargeable": true,
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"specimens": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"samples": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
],
"createdAt": "2021-07-01T13:00:00.000Z",
"redrawnFromId": "d0699c61-9417-4927-89d1-cac53900f5a9",
"externalId": "string",
"updatedEta": "2021-07-01T13:00:00.000Z",
"isRedrawable": true
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | The appointment group's ID. |
| appointments | [Appointment] | true | read-only | The appointments part of the group. |
AppointmentProduct
{
"productId": "string",
"partnerProductConfigId": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| productId | string | false | none | The product id. NOTE: Deprecated, no longer needed. Please use partnerProductConfigId instead. |
| partnerProductConfigId | string | true | none | The partner product configuration id. |
AppointmentRedraw
{
"bookingKey": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"partnerProductConfigIds": [
"0d54e124-fa27-482d-8416-9d088b40e326"
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| bookingKey | string | true | none | The booking key retrieved from the availability endpoint. A key is valid for 60 minutes after generation, to book an appointment after that a new key is needed. |
| partnerProductConfigIds | [array] | false | none | The partner product configuration id(s) that you would like to add on to this redraw. |
AppointmentRequest
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"status": "pending",
"patient": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
},
"appointmentData": {
"patientId": "5629a84d-a302-47c2-82f3-430f2a100a74",
"partnerId": "112a778e-0a54-4cf9-9390-e1b7c4b7b7f9",
"address": {
"street": "600 E Washington St",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85004",
"unit": null
}
},
"cancellationReason": "malformed-data",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z",
"appointmentId": "string",
"lastNotifiedAt": "2019-08-24T14:15:22Z",
"timesNotified": 0,
"bookingUrl": "https://app.getlabs.com/booking-request/abcd123-a123-123d-456f-123ab4c56d78",
"groupId": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | The appointment request's ID |
| status | string | true | read-only | The current status of the appointment request Pending = The appointment request has been created but has not been actioned upon. Processed = The appointment request has been processed, waiting to notify the patient. Notified = The patient has been notified about the appointment request. Unresponsive = The patient has been notified and reminded three times about the appointment request, but has not responded. Scheduled = An appointment has been scheduled for the appointment request Fulfilled = The scheduled appointment has been completed. Errored = There has been an error processing the appointment request. Cancelled = The scheduled appointment has been canceled. |
| patient | Patient | true | read-only | The patient the appointment request is for |
| appointmentData | object¦null | false | read-only | The appointment data |
| cancellationReason | string¦null | false | read-only | The reason the appointment request was cancelled |
| createdAt | string(date-time) | true | read-only | Datetime when the appointment request was created |
| updatedAt | string(date-time) | true | read-only | Datetime when the appointment request was updated |
| appointmentId | string¦null | false | read-only | The ID of the appointment created for this request. |
| lastNotifiedAt | string(date-time)¦null | false | read-only | Datetime when the user was last notified about this request. |
| timesNotified | number¦null | false | read-only | Number of times the user has been notified. |
| bookingUrl | string¦null | false | read-only | URL where the patient can book an appointment. |
| groupId | string¦null | false | read-only | The appointment request group id, if this appointment request is part of a grouped appointment request. |
Enumerated Values
| Property | Value |
|---|---|
| status | pending |
| status | processed |
| status | notified |
| status | unresponsive |
| status | scheduled |
| status | fulfilled |
| status | errored |
| status | cancelled |
| cancellationReason | malformed-data |
| cancellationReason | not-serviceable |
| cancellationReason | null |
AppointmentReschedules
{
"appointmentId": "24c6adb3-18be-4108-aa61-3d58879e05a2",
"data": [
{
"rescheduledAt": "2019-08-24T14:15:22Z",
"previousStartAt": "2019-08-24T14:15:22Z",
"rescheduleOrigin": "patient"
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| appointmentId | string(uuid) | false | read-only | The ID of the appointment. |
| data | [Reschedule] | false | read-only | The appointment reschedules. |
AppointmentSample
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"labOrderDetailsId": "string",
"collected": true,
"uncollectedReason": "string",
"partiallyCollected": true,
"partiallyCollectedReason": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | The sample's ID. |
| type | string | true | read-only | The sample's type. |
| labOrderDetailsId | string¦null | true | read-only | The ID of the lab order that the sample belongs to. |
| collected | boolean | true | read-only | Whether the sample has been collected for the appointment. Will be false if the sample was not collected or if it was partially collected. |
| uncollectedReason | string¦null | true | read-only | Reason for why this sample was not collected. Will be null if the sample was partially collected. Only one of uncollectedReason or partiallyCollectedReason will be non-null at a time. |
| partiallyCollected | boolean | true | read-only | Whether the sample has been partially collected for the appointment. |
| partiallyCollectedReason | string¦null | true | read-only | Reason for why this sample was only partially collected. |
AvailabilityResponse
{
"serviceable": true,
"data": [
{
"date": "2021-07-01",
"slots": [
{
"key": "yGDknWzB74gP8zpET+HrI3jQVyq4ss/ENX38C1eJSR3D7zCHGloM0URG8V2y1nltsTgvED2q/ZcyJZzfZcWc021/Hg1TWICUkDXl627QDdytvUGsEcy9dqpxtqNLmkCtBRcQHnbgaSIR9E7gZ/5fj6NfTwnRH1coitxlOUCsrm9x76l80saizu9M3L5UqafNB7MtbkcCtfB4h9nubzUXahEbXPq0wFvbt/2VQl7311Vgro9XC3k/CbeBMtiQXhSMqslRop44NJO7Rp6qHEjsrZOJVfcKd3ASuYFEspBi+J+ddRilOS4p06Ai8nhrIx3pbLXoRm4aSqNaLCx5lbldLeh08ozRBt3oBGZDzwxdsYzu8iBgxMMGbH/AUpuR+7Lh9YE=",
"start": "2021-07-01T12:00:00.000Z",
"end": "2021-07-01T13:00:00.000Z",
"expiresAt": "2021-06-22T12:00:00.000Z",
"price": "2900",
"priority": true,
"available": 3
}
]
}
],
"tz": "America/Phoenix"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| serviceable | boolean | true | read-only | If the address is serviceable by Getlabs this will be true otherwise false |
| data | [DaySlots] | true | read-only | An array containing all the dates requested |
| tz | string | false | read-only | The timezone where the appointment will take place |
BadRequest
{
"statusCode": 400,
"message": [
{
"property": "email",
"constraints": {
"isNotEmpty": "property should not be empty"
},
"children": [
{}
]
}
],
"error": "Bad Request"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| statusCode | number | true | read-only | The http status code |
| message | [ValidationError] | true | read-only | An array containing all ValidationErrors for the request |
| error | string | true | read-only | A string describing the type of error |
Enumerated Values
| Property | Value |
|---|---|
| statusCode | 400 |
| error | Bad Request |
BehalfOf
{
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| firstName | string | false | none | First name of the person booking on behalf of |
| lastName | string | false | none | Last name of the person booking on behalf of |
| string | false | none | Email of the person booking on behalf of | |
| phoneNumber | string | false | none | Phone number of the person booking on behalf of |
| isLegalGuardian | boolean | false | none | Are you the the patient's parent, legal guardian, or caretaker |
| shouldNotify | boolean | false | none | Should we notify you of the patient's appointment status? |
CancellationReason
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "Scheduled time no longer works",
"isRefundable": true
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | The ID of the cancellation reason |
| name | string | true | read-only | What the cancellation reason is used for |
| isRefundable | boolean | true | read-only | If true the patient is entitled to a refund after cancelling the appointment |
ConflictError
{
"statusCode": 409,
"message": "string",
"error": "Conflict"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| statusCode | number | true | read-only | The http status code |
| message | string | true | read-only | There was a conflict with the request data that was provided. |
| error | string | true | read-only | A string describing the type of error |
Enumerated Values
| Property | Value |
|---|---|
| statusCode | 409 |
| error | Conflict |
CreateAppointmentGroup
{
"key": "SFG8HHp01ZNwi+/prwl2CmKSlZZHByJLjf27E5l+f7I+suxFY0QYkTWtxJ4xr5n/IsMm2LTrUADDHRGuzo6F/abaLdGMvHxvf7CSwQxlit7pel3SK0c8HwxllGG3UWq21GV1x/SkvITGDAUUAwFHZ/urGzhgKf4DQkKiZctPVFRvfGq1ash4ZV7HfdbBviswl5w6ORSmYwwae6zQx+//h83DcfO7xIMbjamoJDfoDUS0v5ZftVeN3KjjBdCd4nunBy6YTsEnlVQaJqTa4uSwu++ddZ6/ZTw5nEIgSQjhQL9uJd9YgC3ir4oyw0reI9NsHgp5vdO1TIVSodfMUv8NYB23v3mWKyeI21xehM32wAUs/u0JkXBGrWrUNM+Q2PaP3hZQJrh3DQ==",
"appointments": [
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| key | string | true | none | The booking key retrieved from the availability endpoint. A key is valid for 60 minutes after generation, to book an appointment after that a new key is needed. |
| appointments | [CreateAppointmentGroupAppointment] | true | none | An array of appointment data for each appointment that will be created. |
CreateAppointmentGroupAppointment
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"paymentMethod": "pm_1DkAUlB70neqlGn3zQESm7pl",
"behalfOf": {
"firstName": "string",
"lastName": "string",
"email": "string",
"phoneNumber": "string",
"isLegalGuardian": true,
"shouldNotify": true
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"products": [
{
"productId": "string",
"partnerProductConfigId": "string"
}
],
"externalId": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| patientId | string(uuid) | true | none | The patient's ID as retrieved from the /patient endpoint |
| labOrderDetails | [LabOrderDetails] | true | none | An array of LabOrderDetails objects. If the key being used is for a priority appointment then labOrderFileIds must be provided for at least one LabOrderDetail. |
| paymentMethod | string | false | none | The Stripe payment method ID fetched using the Stripe client API. This is only required if your account is setup to bill patients directly. |
| behalfOf | BehalfOf | false | none | Details of the person booking on behalf of the patient |
| parkingInstruction | string | false | none | Instructions for parking. |
| specialRequest | string | false | none | Special instruction notes. |
| products | [AppointmentProduct] | false | none | Partner Products attached to the appointment. |
| externalId | string¦null | false | none | External identifier for the appointment. |
CreateAppointmentRequest
{
"address": {
"street": "200 W. Washington Street",
"unit": "Suite 205",
"city": "Phoenix",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix"
},
"labOrderDetails": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
],
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7",
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"parkingInstruction": "Park on street.",
"specialRequest": "Call on arrival.",
"shouldNotifyPatient": true
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| address | Address | true | none | The address where the appointment will take place |
| labOrderDetails | [LabOrderDetails] | false | none | An array of LabOrderDetails objects. |
| patientId | string(uuid) | true | none | The patient's ID as retrieved from the /patient endpoint |
| insurance | Insurance | false | none | Images of the patient's insurance |
| parkingInstruction | string | false | none | Instructions for parking |
| specialRequest | string | false | none | Special instruction notes |
| shouldNotifyPatient | boolean | false | none | Whether the patient should be sent a notification automatically to create an appointment. |
DaySlots
{
"date": "2021-07-01",
"slots": [
{
"key": "yGDknWzB74gP8zpET+HrI3jQVyq4ss/ENX38C1eJSR3D7zCHGloM0URG8V2y1nltsTgvED2q/ZcyJZzfZcWc021/Hg1TWICUkDXl627QDdytvUGsEcy9dqpxtqNLmkCtBRcQHnbgaSIR9E7gZ/5fj6NfTwnRH1coitxlOUCsrm9x76l80saizu9M3L5UqafNB7MtbkcCtfB4h9nubzUXahEbXPq0wFvbt/2VQl7311Vgro9XC3k/CbeBMtiQXhSMqslRop44NJO7Rp6qHEjsrZOJVfcKd3ASuYFEspBi+J+ddRilOS4p06Ai8nhrIx3pbLXoRm4aSqNaLCx5lbldLeh08ozRBt3oBGZDzwxdsYzu8iBgxMMGbH/AUpuR+7Lh9YE=",
"start": "2021-07-01T12:00:00.000Z",
"end": "2021-07-01T13:00:00.000Z",
"expiresAt": "2021-06-22T12:00:00.000Z",
"price": "2900",
"priority": true,
"available": 3
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| date | string(date) | true | read-only | The date the appointment slots are for |
| slots | [Timeslot] | true | read-only | none |
ExtendedFile
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | false | read-only | none |
| name | string | true | none | File name |
| purpose | ExtendedFilePurpose | true | none | The purpose of this file, must be one of the available options |
| data | string | true | write-only | Base64 encoded file contents, maximum size of 25 MB. The file MIME types allowed differ depending on the file "purpose": * lab-order can be one of: application/pdf, image/png, image/jpeg, image/tiff, image/heic, image/heif * insurance-front, insurance-rear can be one of: image/png, image/jpeg, image/tiff, image/heic, image/heif |
| size | number | true | read-only | The file size in bytes |
| type | string | true | read-only | Type of the file. |
| url | string | true | read-only | Signed, expiring url for the file. |
File
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | false | read-only | none |
| name | string | true | none | File name |
| purpose | string | true | none | The purpose of this file, must be one of the available options |
| data | string | true | write-only | Base64 encoded file contents, maximum size of 25 MB. The file MIME types allowed differ depending on the file "purpose": * lab-order can be one of: application/pdf, image/png, image/jpeg, image/tiff, image/heic, image/heif * insurance-front, insurance-rear can be one of: image/png, image/jpeg, image/tiff, image/heic, image/heif |
| size | number | true | read-only | The file size in bytes |
| type | string | true | read-only | Type of the file. |
Enumerated Values
| Property | Value |
|---|---|
| purpose | lab-order |
| purpose | insurance-front |
| purpose | insurance-rear |
Guardian
{
"name": "Jane Doe",
"relationship": "Mother"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| name | string¦null | false | none | Name of the patient's guardian, this is required if the patient is under 18 years old |
| relationship | string¦null | false | none | Patient's relationship to the guardian, this is required if the patient is under 18 years old |
Insurance
{
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| front | File¦null | false | read-only | The file object representing the image of the front of the insurance |
| rear | File¦null | false | read-only | The file object representing the image of the rear of the insurance |
| frontId | string(uuid) | false | write-only | A file ID with a purpose of 'insurance-front' uploaded using the file endpoint |
| rearId | string(uuid) | false | write-only | A file ID with a purpose of 'insurance-rear' uploaded using the file endpoint |
LabOrderDetails
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"contactName": "Jane Doe",
"contactPhone": "6025554567",
"labOrderFiles": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": null,
"data": "string",
"size": 13264,
"type": "string",
"url": "string"
}
],
"labOrderFileIds": [
"9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | false | read-only | The ID of this entity |
| contactName | string¦null | false | none | Name of the person/doctor's office who has the lab order details. Required if labOrderFileIds are NOT set AND the appointment is NOT a priority appointment. |
| contactPhone | string¦null | false | none | 10 digit phone number of the person/doctor's office who has the lab order details. Required if labOrderFileIds are NOT set AND the appointment is NOT a priority appointment. |
| labOrderFiles | [ExtendedFile] | false | read-only | An array of all files attached. |
| labOrderFileIds | [string] | false | write-only | An array of file IDs that were previously uploaded (and returned) using the /file endpoint. Required if contactName and contactPhone are not set OR if trying to schedule a priority appointment and/or have already uploaded files using the /file endpoint. |
NotFound
{
"statusCode": 404,
"message": "Not Found"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| statusCode | number | true | read-only | The http status code |
| message | string | true | read-only | A string describing the type of error |
Enumerated Values
| Property | Value |
|---|---|
| statusCode | 404 |
| message | Not Found |
OauthRequest
{
"grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
"assertion": "string",
"refresh_token": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| grant_type | string | true | none | Grant type that you're requesting |
| assertion | string | false | none | The value of the "assertion" parameter MUST contain a single JWT. |
| refresh_token | string | false | none | If your grant type is 'refresh_token' provide your existing refresh token |
Enumerated Values
| Property | Value |
|---|---|
| grant_type | urn:ietf:params:oauth:grant-type:jwt-bearer |
| grant_type | refresh_token |
OauthToken
{
"access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE5Nzk2MjEwLTBmZDUtNDFhZi1iOGUzLWM1ODViYzFjN2ExMSIsInR5cGUiOiJQYXJ0bmVyRW50aXR5IiwiaWF0IjoxNjU4NDMzMjU3LCJleHAiOjE2NTg0MzM4NTd9.XQsq-opjVKVmVhvXzU_mGeCqOi3m96ZoHGnLQ90UnFXKQDTTMeTm7lOv9Qd8nNmDab9Ex7VmIKt3Ne8NDvIVWQ",
"refresh_token": "323abcbc59fd263986d4a2afd0f24385457dd5b6",
"token_type": "Bearer",
"expires": "1658433841"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| access_token | string | true | none | Access token required for all api calls |
| refresh_token | string | true | none | Refresh token to be used to refresh your expired access_token |
| token_type | string | true | none | Token type. At this point it will always be Bearer |
| expires | number | true | none | Expire timestamp of your access token |
PagedResponse
{
"data": [
[]
],
"total": 25
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| data | [array] | false | read-only | An array of pageable data |
| total | number | false | read-only | The total record count available |
PartnerProduct
{
"productId": "dcd53ddb-8104-4e48-8cc0-5df1088c6113",
"partnerProductConfigId": "0d54e124-fa27-482d-8416-9d088b40e326",
"name": "Biometrics",
"description": "Biometrics Testing for adults",
"type": "kit-draw",
"externalId": [
"1234",
"56788"
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| productId | string(uuid) | true | read-only | The product id of the partner configured product. |
| partnerProductConfigId | string(uuid) | true | read-only | The partner product configuration id of the product. |
| name | string | true | read-only | The product configured name. |
| description | string | false | read-only | The product configured description. |
| type | string | true | read-only | The product type. |
| externalId | array | true | read-only | Any partner External ID's configured for this product. Partners can have multiple external ID's for a Getlabs mapped product. |
Patient
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"externalId": "string",
"email": "user@example.com",
"phoneNumber": "6025554567",
"firstName": "Jane",
"lastName": "Doe",
"dob": "1977-07-08",
"birthSex": "female",
"pronouns": "She/Her",
"editable": true,
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
}
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | false | read-only | The patient's ID. |
| externalId | string¦null | false | none | External identifier for the patient. |
| string(email)¦null | false | none | Email address. | |
| phoneNumber | string¦null | false | none | 10 digit phone number. |
| firstName | string | true | none | First name. |
| lastName | string | true | none | Last name. |
| dob | string(date) | true | none | Date of birth (YYYY-MM-DD). |
| birthSex | string | true | none | Birth sex. |
| pronouns | string¦null | false | none | The patient's preferred pronouns. |
| editable | boolean | false | read-only | Indicates if the patient's details are editable. |
| guardian | Guardian | false | none | The patient's guardian, this is required if the patient is under 18 years old. |
| insurance | Insurance | false | none | Images of the patient's insurance. |
Enumerated Values
| Property | Value |
|---|---|
| birthSex | male |
| birthSex | female |
| birthSex | other |
PatientUpdate
{
"externalId": "string",
"guardian": {
"name": "Jane Doe",
"relationship": "Mother"
},
"insurance": {
"front": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"rear": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "lab-order.pdf",
"purpose": "lab-order",
"data": "string",
"size": 13264,
"type": "string"
},
"frontId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1",
"rearId": "9b45fe45-79ed-40aa-9bc3-f358a7c6e6d1"
},
"firstName": "Jane",
"lastName": "Doe",
"birthSex": "female",
"email": "user@example.com",
"phoneNumber": "6025554567",
"pronouns": "She/Her",
"notes": "string"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| externalId | string¦null | false | none | External identifier for the patient. |
| guardian | Guardian | false | none | The patient's guardian, this is required if the patient is under 18 years old. |
| insurance | Insurance | false | none | Images of the patient's insurance. |
| firstName | string | false | none | First name (editing only allowed if patient.editable=true). |
| lastName | string | false | none | Last name (editing only allowed if patient.editable=true). |
| birthSex | string | false | none | Birth sex (editing only allowed if patient.editable=true). |
| string(email)¦null | false | none | Email address (editing only allowed if patient.editable=true). | |
| phoneNumber | string¦null | false | none | 10 digit phone number (editing only allowed if patient.editable=true). |
| pronouns | string¦null | false | none | The patient's preferred pronouns (editing only allowed if patient.editable=true). |
| notes | string¦null | false | none | Notes for the patient (editing only allowed if patient.editable=true). If a null value is passed, existing notes will be deleted. |
Enumerated Values
| Property | Value |
|---|---|
| birthSex | male |
| birthSex | female |
| birthSex | other |
PaymentCreateSetup
{
"patientId": "460a6d87-689c-4661-a526-a52450bbe2d7"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| patientId | string(uuid) | true | none | The patient's ID as retrieved from the /patient endpoint |
PaymentSetup
{
"clientSecret": "seti_1Jv3iKB60neqlRn35yPUsJN6_secret_KaEA3x316GYgEyYZUgdiUo2K1cwoDbw"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| clientSecret | string | true | read-only | The Stripe client secret for this setup intent. It is used on the front end with the Stripe library to collect credit card information from the patient. |
Reschedule
{
"rescheduledAt": "2019-08-24T14:15:22Z",
"previousStartAt": "2019-08-24T14:15:22Z",
"rescheduleOrigin": "patient"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| rescheduledAt | string(date-time) | false | read-only | The date and time the appointment was rescheduled. |
| previousStartAt | string(date-time) | false | read-only | The date and time the appointment was previously scheduled for. |
| rescheduleOrigin | string¦null | false | read-only | The origin of the reschedule. |
Enumerated Values
| Property | Value |
|---|---|
| rescheduleOrigin | patient |
| rescheduleOrigin | partner |
| rescheduleOrigin | getlabs |
ServiceArea
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"city": "Phoenix",
"county": "Maricopa County",
"state": "AZ",
"zipCode": "85003",
"timezone": "America/Phoenix",
"startDate": "2021-01-01T07:00:00.000Z",
"endDate": "2022-01-01T07:00:00.000Z",
"isActive": true
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| id | string(uuid) | true | read-only | The ID of the service area |
| city | string¦null | true | read-only | The city for the service area |
| county | string¦null | true | read-only | The county for the service area |
| state | string | true | read-only | The 2 character state code for the service area |
| zipCode | string | true | read-only | The 5 digit zip code for the service area |
| timezone | string | true | read-only | The timezone for the service area |
| startDate | string(date-time) | true | read-only | The earliest appointment date allowed for the service area |
| endDate | string(date-time)¦null | true | read-only | The last appointment date allowed for the service area. If it is null there is no scheduled end date. |
| isActive | boolean | true | read-only | True if the current date is in between the start and end date. Appointments can still be booked for inactive service areas starting for their start date. |
Timeslot
{
"key": "yGDknWzB74gP8zpET+HrI3jQVyq4ss/ENX38C1eJSR3D7zCHGloM0URG8V2y1nltsTgvED2q/ZcyJZzfZcWc021/Hg1TWICUkDXl627QDdytvUGsEcy9dqpxtqNLmkCtBRcQHnbgaSIR9E7gZ/5fj6NfTwnRH1coitxlOUCsrm9x76l80saizu9M3L5UqafNB7MtbkcCtfB4h9nubzUXahEbXPq0wFvbt/2VQl7311Vgro9XC3k/CbeBMtiQXhSMqslRop44NJO7Rp6qHEjsrZOJVfcKd3ASuYFEspBi+J+ddRilOS4p06Ai8nhrIx3pbLXoRm4aSqNaLCx5lbldLeh08ozRBt3oBGZDzwxdsYzu8iBgxMMGbH/AUpuR+7Lh9YE=",
"start": "2021-07-01T12:00:00.000Z",
"end": "2021-07-01T13:00:00.000Z",
"expiresAt": "2021-06-22T12:00:00.000Z",
"price": "2900",
"priority": true,
"available": 3
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| key | string¦null | true | read-only | The key used when booking an appointment. A key is valid for 60 minutes after generation, to book an appointment after that a new key is needed. |
| start | string(date-time) | true | read-only | The appointment start time |
| end | string(date-time) | true | read-only | The appointment end time |
| expiresAt | string(date-time)¦null | true | read-only | The time the booking key expires. Afterwards it cannot be used to book an appointment. |
| price | number | true | read-only | The price for the appointment in cents |
| priority | boolean | true | read-only | If an appointment is a priority slot then a lab order must be uploaded in order to book |
| available | number | true | read-only | The number of appointments available for the timeslot |
UnprocessableError
{
"statusCode": 422,
"message": "string",
"error": "Unprocessable Entity"
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| statusCode | number | true | read-only | The http status code |
| message | string | true | read-only | The request is valid and well formed but we are unable to process the contained instructions command due to some other issue. |
| error | string | false | read-only | A string describing the type of error |
Enumerated Values
| Property | Value |
|---|---|
| statusCode | 422 |
| error | Unprocessable Entity |
ValidationError
{
"property": "email",
"constraints": {
"isNotEmpty": "property should not be empty"
},
"children": [
{
"property": "email",
"constraints": {
"isNotEmpty": "property should not be empty"
},
"children": []
}
]
}
Properties
| Name | Type | Required | Restrictions | Description |
|---|---|---|---|---|
| property | string | true | read-only | The property name that the errors are for |
| constraints | object | false | read-only | An object containing all of the errors. The key is the error name and the value is the description. |
| children | [ValidationError] | true | read-only | An array of ValidationErrors for the children of this property |