NAV -image
bash php python javascript

Introduction

Smartwaiver Api

Welcome to Smartwaiver's API. Here you can easily query and access all waiver templates and signed waivers for your account through our RESTful interface. All responses use JSON making our API easy to access in any programming language.

Integrate Smartwaiver with your CMS, local database, and more. All participant information that was submitted by your customer is accessible (e.g: Full Name, Date of Birth, Custom Questions etc). All PDF files are accessible as well.

Need your Smartwaiver API Key?

If you have an active Smartwaiver account, you can create your API key here. CREATE YOUR API KEY

Webhooks

Webhooks allow you to get near real-time HTTP POST notifications after a smart waiver is submitted. Learn More

SDKs

If you plan on using any of the following languages we highly recommend you head over to Github and checkout our SDKs. The SDKs are easy to install, have examples for every type of request, and provide a simple, easy, programmatic interface to your waivers.

Rate Limiting

Each Smartwaiver account, regardless of API key, is limited to 100 requests per minute in a fixed-window bucket. Once your limit has been hit you will receive an HTTP '429 Too Many Requests' response code and you should stop making requests.

A normal JSON response is returned containing information about how many seconds you have until you may make requests again. Furthermore, the 'Retry-After' HTTP header will contain the number of seconds to wait until trying again.

Note: there are several requests that are both not included in the above 100 rpm and limited at different rates. Please see the documentation for those specific routes below.

Linking to Console Waivers

This redirect link is intended to be used in the browser. It will open the Waiver Console and automatically look up the Waiver ID that you specified. From here, the end user can download the signed PDF and view all details of the waiver.

Note: This request does not require an API Key, but will require the user to either be logged in or log in to the correct account.

Base URL

https://api.smartwaiver.com

Authenticating requests

Authenticate requests to this API's endpoints by sending an Authorization header with the value "Bearer [INSERT API KEY]".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token.

Legacy Authentication

The old method of authentication via a custom HTTP Header is still supported: "sw-api-key: [INSERT API KEY]"

Api Info

Ping

Ping/Pong Test

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/ping" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/ping',
    [
        'headers' => [
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/ping'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/ping"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


pong

Request      

GET ping

Version

Api Version Information

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/version" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/version',
    [
        'headers' => [
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/version'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/version"
);

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


5.0.0

Request      

GET version

Checkins

List checkins for waivers

List checkins for waivers

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/checkins?fromDts=2018-01-01&toDts=2018-01-02" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/checkins',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'query' => [
            'fromDts'=> '2018-01-01',
            'toDts'=> '2018-01-02',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/checkins'
params = {
  'fromDts': '2018-01-01',
  'toDts': '2018-01-02',
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/checkins"
);

let params = {
    "fromDts": "2018-01-01",
    "toDts": "2018-01-02",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "checkins",
    "checkins": {
        "fromDts": "2018-01-01",
        "toDts": "2018-01-02",
        "moreCheckins": false,
        "checkins": [
            {
                "date": "2018-01-01 12:32:16",
                "waiverId": "56461ca244278b412ab3",
                "position": 0,
                "firstName": "John",
                "lastName": "Doe",
                "isMinor": false
            }
        ]
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Request      

GET v4/checkins

Query Parameters

fromDts  string  
Limit to checkins after this ISO 8601 date (Must not be within the current hour) (If not provided time will default to 00:00:00). Allowed values: Must be in ISO 8601 format

toDts  string  
End date of checkin report (must be before current hour) (ISO in UTC)

limit  integer optional  
Limit to this number of checkins. Default value: 20 Allowed values: 1-100

offset  integer optional  
Offset to be combined with limit to page results. Default value: 0 Allowed values 0-1000

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (checkins)

checkins  object  

fromDts  string  
The requested from date

toDts  string  
The requested to date

moreCheckins  boolean  
Whether there are more checkins to retrieve from this

checkins.checkins  object[]  
The array of checkins

checkins[].date  string  
The date this check-in occurred (ISO 8601 format)

checkins[].waiverId  string  
The Unique ID for the waiver this participant check-in is from

checkins[].position  integer  
The position in the participant array if your retrieve this waiver's data. (Note: 0 based and -1 means this participant is the guardian)

checkins[].firstName  string  
The first name of this participant

checkins[].lastName  string  
The last name of this participant

checkins[].isMinor  boolean  
Whether this participant is a minor or not

Dynamic Waivers

Create a dynamic template for your customer to fill out

requires authentication

Use this route to create a dynamic template for your customer to sign. This route is very similar to the functionality provided in our JS library here. We recommend using the JS library to create your dynamic templates.

Need your Smartwaiver Published Key?

Create Your Published Key Your published key is a token that publicly identifies your account. THIS IS NOT YOUR API KEY. Never publish your API Key to your website.

Versions

Example Usage

It's easy to get started! Just simply add our Javscript library to your page and then you can use the Smartwaiver object.

<script src="https://js-lib.smartwaiver.com/sw-js-1.0.js"></script>
<script>
    smartwaiver.templates.dynamic({
        "publishedKey": "",
        "mode": "redirect",
        "expiration": 300,
        .
        .
        .

API Documentation

Creating a dynamic template for your customer to sign is just the first step! Next you'll want to request processing of that document and retrieve their information after they have signed it.

Example request:

curl -X POST \
    "https://api.smartwaiver.com/v4/dynamic/templates" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"dynamic":null,"template":null,"data":null}'

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.smartwaiver.com/v4/dynamic/templates',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'json' => [
            'dynamic' => null,
            'template' => null,
            'data' => null,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/dynamic/templates'
payload = {
    "dynamic": null,
    "template": null,
    "data": null
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/dynamic/templates"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "dynamic": null,
    "template": null,
    "data": null
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "dynamic",
    "dynamic": {
        "url": "https:\/\/waiver.smartwaiver.com\/d\/fDopTNTw5Zq8bCQnijBXuf\/",
        "uuid": "fDopTNTw5Zq8bCQnijBXuf",
        "expiration": 300
    }
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (406, Wrong Content Type):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Content-Type must be json"
}

Request      

POST v4/dynamic/templates

Body Parameters

dynamic  object  
Root Object.

template  string  
See JS Docs for template parameters.

data  string  
See JS Docs for template parameters.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (dynamic)

dynamic  object  
Signed waiver information

url  string  
The url used to access this template

uuid  string  
Temporary ID assigned to this template

expiration  integer  
Expiration of this template

Request processing of a signed dynamic waiver

requires authentication

Use this route to request processing of your dynamic waivers. Wondering how you create and submit dynamic waivers. Check out the documentation for our JS library here

Transaction Id Example ->

"completion": {

    "redirect": {

        "success": "https://www.example.org/?transactionId=[transactionId]&bookingId=123456",

        "cancel": "https://www.example.com"

    }

}

See JS Docs for data parameters.

Example request:

curl -X POST \
    "https://api.smartwaiver.com/v4/dynamic/process/TRANSACTION_ID" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.smartwaiver.com/v4/dynamic/process/TRANSACTION_ID',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/dynamic/process/TRANSACTION_ID'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/dynamic/process/TRANSACTION_ID"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "dynamic_process",
    "dynamic_process": {
        "waiverId": "HK8L6Yaq2s2Bu8UMcBEo",
        "transactionId": "UMcBEoyTvDeizmj94p6"
    }
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

POST v4/dynamic/process/{transactionId}

URL Parameters

transactionId  string  
API key for the account. The transaction ID returned via query string param in redirect URL after the customer signs your waiver. See above for more details

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (dynamic_process)

dynamic_process  object  
Signed waiver information

waiverId  string  
The unique ID assigned to this waiver

transactionId  string  
The temporary transaction ID used to request processing

Keys

List Published Keys

List your published keys

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/keys/published" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/keys/published',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/keys/published'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/keys/published"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "published_keys",
    "published_keys": {
        "keys": [
            {
                "createdAt": "2024-05-20T20:09:53+00:00",
                "key": "SPoyAc7mNHK8L6Yaq2s2Bu8UMcBEoyTvDeizmj94p6",
                "label": "demo"
            }
        ]
    }
}

Request      

GET v4/keys/published

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (published_keys)

published_keys  object  
Published Keys Object

keys  object[]  
A List of all your active published keys

keys[].createdAt  string  
Date the key was created

keys[].key  string  
The key

keys[].label  string  
A label for this key

Create Published Key

Create a new published key

requires authentication

Example request:

curl -X POST \
    "https://api.smartwaiver.com/v4/keys/published" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"label":"demo"}'

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.smartwaiver.com/v4/keys/published',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'json' => [
            'label' => 'demo',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/keys/published'
payload = {
    "label": "demo"
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/keys/published"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "label": "demo"
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "published_keys",
    "published_keys": {
        "newKey": {
            "createdAt": "2024-05-20T20:09:53+00:00",
            "key": "SPoyAc7mNHK8L6Yaq2s2Bu8UMcBEoyTvDeizmj94p6",
            "label": "demo"
        },
        "keys": [
            {
                "createdAt": "2024-05-20T20:09:53+00:00",
                "key": "SPoyAc7mNHK8L6Yaq2s2Bu8UMcBEoyTvDeizmj94p6",
                "label": "demo"
            }
        ]
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (406, Wrong Content Type):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Content-Type must be json"
}

Example response (406, Conflict Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Label is already in use. Please choose another label."
}

Request      

POST v4/keys/published

Body Parameters

label  string  
API key for account.

Response

Response Fields

type  string  
Type of response given (published_keys)

published_keys  object  
Published Keys Object

newKey  object  
The newly created key

newKey.createdAt  string  
Date the key was created

newKey.key  string  
The key

newKey.label  string  
A label for this key

keys  object[]  
A List of all your active published keys

keys[].createdAt  string  
Date the key was created

keys[].key  string  
The key

keys[].label  string  
A label for this key

Search

Request a search for signed waivers

requires authentication

This search route will conduct a synchronous search and then return a GUID that can be used to access all results from the search. If the search returns zero results a valid GUID will be returned but since no pages exist for that GUID all requests for results will return an error. If the search result set is large the request can take up to several seconds, so make sure your timeouts are set correctly. Note: The returned search GUID will expire after 12 hours.

Note: The search is currently limited to 30,000 results.

Note: This request is not included in the normal 100 request per minute limit, but is instead limited to 5 requests per minute by itself.

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/search?templateId=6jebdfxzvrdkd" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/search',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'query' => [
            'templateId'=> '6jebdfxzvrdkd',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/search'
params = {
  'templateId': '6jebdfxzvrdkd',
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/search"
);

let params = {
    "templateId": "6jebdfxzvrdkd",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2017-01-24T11:14:25+00:00",
    "type": "search",
    "search": {
        "guid": "6jebdfxzvrdkd",
        "count": 652,
        "pages": 7,
        "pageSize": 100
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (search)

search  object  
Signed waiver information

guid  string  
GUID used to retrieve search results

count  integer  
The number of waivers in the search results

pages  integer  
The number of pages in the search results

pageSize  integer  
The number of waivers in each page of results Currently, always 100

Retrieve a page of search results

requires authentication

Use this route to retrieve each page of the search results from the above route. If a page outside the results is requested a 402 error will be returned with an appropriate message.

Note: The GUID from the search route will expire after 12 hours.

Note: This request can be quite slow to retrieve the page. However, due to our caching mechanism, subsequent requests for the same page will be significantly faster.

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/search/6jebdfxzvrdkd/results?page=" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/search/6jebdfxzvrdkd/results',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'query' => [
            'page'=> '',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/search/6jebdfxzvrdkd/results'
params = {
  'page': '',
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/search/6jebdfxzvrdkd/results"
);

let params = {
    "page": "",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2017-01-24T11:14:25+00:00",
    "type": "search_results",
    "search_results": [
        {
            "waiverId": "6jebdfxzvrdkd",
            "templateId": "sprswrvh2keeh",
            "title": "Smartwaiver Demo Waiver",
            "createdOn": "2017-01-24 13:12:29",
            "expirationDate": "",
            "expired": false,
            "verified": true,
            "kiosk": true,
            "firstName": "Kyle",
            "middleName": "",
            "lastName": "Smith II",
            "dob": "2008-12-25",
            "autoTag": "",
            "clientIP": "192.0.2.0",
            "email": "example@smartwaiver.com",
            "marketingAllowed": false,
            "addressLineOne": "626 NW Arizona Ave.",
            "addressLineTwo": "Suite 2",
            "addressCity": "Bend",
            "addressState": "OR",
            "addressZip": "97703",
            "addressCountry": "US",
            "emergencyContactName": "Mary Smith",
            "emergencyContactPhone": "111-111-1111",
            "insuranceCarrier": "My Insurance",
            "insurancePolicyNumber": "1234567",
            "driversLicenseNumber": "9876543",
            "driversLicenseState": "OR",
            "tags": [
                "Green Team"
            ],
            "flags": [
                {
                    "displayText": "Have you received our orientation?",
                    "reason": "was not selected"
                }
            ],
            "participants": [
                {
                    "firstName": "Kyle",
                    "middleName": "",
                    "lastName": "Smith II",
                    "dob": "2008-12-25",
                    "isMinor": true,
                    "gender": "Male",
                    "phone": "",
                    "tags": [
                        "YES"
                    ],
                    "customParticipantFields": {
                        "bk3xydss4e9dy": {
                            "value": "YES",
                            "displayText": "Is this participant ready to have fun?"
                        }
                    },
                    "flags": [
                        {
                            "displayText": "Are you excited?",
                            "reason": "was not selected"
                        }
                    ]
                }
            ],
            "pdf": "Base64 Encoded PDF",
            "photos": 1,
            "guardian": {
                "firstName": "Kyle",
                "middleName": "",
                "lastName": "Smith I",
                "phone": "555-555-5555",
                "dob": "1970-12-25"
            },
            "customWaiverFields": {
                "ha5bs1jy5wdop": {
                    "value": "A friend",
                    "displayText": "How did you hear about Smartwaiver?"
                }
            }
        }
    ]
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/search/{guid}/results

URL Parameters

guid  string  
The guid of the search results returned from the search request.

Query Parameters

page  integer  
Which page of the search results you want to return. Note: pages use a zero-based index

pdf  string optional  
Include Base 64 encoded PDF of signed waiver Default value: false Allowed values: true, false

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (search_results)

search_results  object[]  
Signed waiver information

waiverId  string  
Unique ID of signed waiver

templateId  string  
Unique ID of template for this signed waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

expirationDate  string  
Date waiver will expire (ISO 8601 format) Note: This value is always empty if your account does not have the days to expiration setting enabled in the waiver console.

expired  boolean  
If this waiver is older than your account's static expiration date or is past your account setting for days to expiration from signing date

verified  boolean  
If the waiver has been verified

kiosk  boolean  
If the waiver was signed at a kiosk

firstName  string  
First name of the first participant on the waiver

middleName  string  
Middle name of the first participant on the waiver

lastName  string  
Last name of the first participant on the waiver

dob  string  
Date of birth of the first participant on the waiver (ISO 8601 format) Note: The DOB will be 1800-01-01 if the waiver is set up to use a checkbox for age verification.

isMinor  boolean  
Whether the first participant is a minor or not

autoTag  string  
Auto tag on the waiver if there is one, otherwise it will be blank

clientIP  string  
IP Address from which the waiver was submitted

email  string  
The primary email for the waiver

marketingAllowed  boolean  
Whether the user allows marketing to be sent to their email

addressLineOne  string  
The first line of the address

addressLineTwo  string  
The second line of the address

addressCity  string  
The city of the address

addressState  string  
The state of the address

addressZip  string  
The zip code of the address

addressCountry  string  
The country of the address

emergencyContactName  string  
The name of the emergency contact

emergencyContactPhone  string  
The phone number of the emergency contact

insuranceCarrier  string  
The name of the insurance carrier

insurancePolicyNumber  string  
The policy number of the insurance

driversLicenseNumber  string  
The number of the drivers license

driversLicenseState  string  
The state of the drivers license

tags  string[]  
A list of tags for the waiver

flags  object[]  
A list of tags for all participants

flags[].displayText  string  
The display text for the flagged question

flags[].reason  string  
The reason this answer was flagged

flags[].photos  integer  
Number of photos attached to this waiver

participants  object[]  
A list of participants on the waiver

participants[].firstName  string  
The first name of the participant

participants[].middleName  string  
The middle name of the participant

participants[].lastName  string  
The last name of the participant

participants[].dob  string  
Date of birth of the participant (ISO 8601 format) Note: The DOB will be 1800-01-01 if the waiver is set up to use a checkbox for age verification.

participants[].isMinor  boolean  
Whether or not this participant is a minor

participants[].minorExpired  boolean  
True if this participant is a minor and has passed age of majority and age of majority expiration turned on, false otherwise

participants[].gender  string  
Gender of the participant

participants[].phone  string  
Phone number of the participant

participants[].relationship  string  
If this participant is the guardian on the waiver, this field will be the relationship to the minor

participants[].tags  string[]  
A list of tags for the waiver

participants[].customParticipantFields  object[]  
Any custom participant fields on the waiver

participants[].customParticipantFields.{GUID}  object  
The custom participant field, each {GUID} is unique

participants[].customParticipantFields.{GUID}.value  string  
The value of the custom participant field

participants[].customParticipantFields.{GUID}.displayText  string  
The display text of the custom participant field

participants[].flags  object[]  
A list of tags for this participant

participants[].flags[].displayText  string  
The display text for the flagged question

participants[].flags[].reason  string  
The reason this answer was flagged

participants[].pdf    
Base64 Encoded PDF

photos  integer  

customWaiverFields  object  
Any custom waiver fields on the waiver

customWaiverFields.{GUID}  object  
The custom waiver field, each {GUID} is unique

customWaiverFields.{GUID}.value  string  
The value of the custom waiver field

customWaiverFields.{GUID}.displayText  string  
The display text of the custom waiver field

guardian  object  
If there are only minors on the waiver, this field contains the guardian information, otherwise it will be null

guardian.firstName  string  
The first name of the guardian

guardian.middleName  string  
The middle name of the guardian

guardian.lastName  string  
The last name of the guardian

guardian.phone  string  
The phone number of the guardian

guardian.dob  string  
The dob of the guardian

guardian.relationship  string  
The relationship of the guardian to the minors

SMS

Send SMS

This API is rate limited by day for security purposes and to prevent spam. By default, the rate limit allows only a few SMS messages to be sent per day. You can request an increase by contacting our support team.

requires authentication

Example request:

curl -X POST \
    "https://api.smartwaiver.com/v4/sms" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"templateId":"TEMPLATE_ID","number":0}'

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.smartwaiver.com/v4/sms',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'json' => [
            'templateId' => 'TEMPLATE_ID',
            'number' => 0,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/sms'
payload = {
    "templateId": "TEMPLATE_ID",
    "number": 0
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/sms"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "templateId": "TEMPLATE_ID",
    "number": 0
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "f3f29234b1e34e2ab9122c309c9e0e47",
    "ts": "2023-10-11T19:35:10+00:00",
    "type": "sms",
    "sms": {
        "id": "SM449100294d129ca4a377f3f217f89d5e",
        "phone": "+1 555-555-5555",
        "template": {
            "uuid": "ckbtnsjnje122vbtms2mt",
            "title": "Test Example"
        },
        "status": 1,
        "date": "2023-10-11 19:35:11"
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Request      

POST v4/sms

Body Parameters

templateId  string  
The Id of the waiver template you would like to send

number  integer  
The phone number you would like to send the waiver to.

Response

Response Fields

version  integer  
API version number

id  string  
Unique ID of SMS message

ts  string  
Timestamp of request

type  string  
Type of response given (sms)

sms  object  

phone  string  
Formatted Number Waiver was sent to

template  object  
Waiver Template Details

template.uuid  string  
Unique Id of the waiver sent

template.title  string  
Title of waiver sent

status  integer  
Status code of SMS sending protocol (1: Success)

date  string  
Date the SMS message was sent.

Templates

List waiver templates

List waiver templates

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/templates" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/templates',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/templates'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/templates"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "templates",
    "templates": [
        {
            "templateId": "sprswrvh2keeh",
            "title": "Demo Waiver",
            "publishedVersion": 78015,
            "publishedOn": "2016-11-02T21:18:38+00:00",
            "webUrl": "https:\/\/www.smartwaiver.com\/w\/sprswrvh2keeh\/web\/",
            "kioskUrl": "https:\/\/www.smartwaiver.com\/w\/sprswrvh2keeh\/kiosk\/",
            "vanityUrls": [
                "https:\/\/waiver.smartwaiver.com\/v\/foo\/",
                "https:\/\/waiver.smartwaiver.com\/v\/bar\/"
            ],
            "webhook": {
                "endpoint": "https:\/\/www.example.org\/foo\/",
                "emailValidationRequired": "yes"
            }
        }
    ]
}

Request      

GET v4/templates

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (templates)

templates  object[]  
Waiver template information

title  string  
Title of waiver template

publishedVersion  integer  
Published version of waiver template

publishedOn  string  
Date of waiver template was published

webUrl  string  
Link to web version of waiver template

kioskUrl  string  
Link to kiosk version of waiver template

vanityUrls  string[]  
Link to any of the vanity urls for the template

webhook  object  
An object containing information about the template level webhook or null if no webhook is set up

webhook.endpoint  string  
Endpoint URL for webhook

webhook.emailValidationRequired  string  
Webhook is sent after email verification (yes), before (no)

Retrieve a waiver template

Retrieve a waiver template

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/templates/odio" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/templates/odio',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/templates/odio'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/templates/odio"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "template",
    "template": {
        "templateId": "sprswrvh2keeh",
        "title": "Demo Waiver",
        "publishedVersion": 78015,
        "publishedOn": "2016-11-02T21:18:38Z",
        "webUrl": "https:\/\/www.smartwaiver.com\/w\/sprswrvh2keeh\/web\/",
        "kioskUrl": "https:\/\/www.smartwaiver.com\/w\/sprswrvh2keeh\/kiosk\/",
        "vanityUrls": [
            "https:\/\/waiver.smartwaiver.com\/v\/foo\/",
            "https:\/\/waiver.smartwaiver.com\/v\/bar\/"
        ],
        "webhook": {
            "endpoint": "https:\/\/www.example.org\/foo\/",
            "emailValidationRequired": "yes"
        }
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Request      

GET v4/templates/{templateId}

URL Parameters

templateId  string  
Unique ID of waiver template

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (template)

template  object  
Waiver template information

templateId  string  
Unique ID of waiver template

title  string  
Title of waiver template

publishedVersion  integer  
Published version of waiver template

publishedOn  string  
Date of waiver template was published

webUrl  string  
Link to web version of waiver template

kioskUrl  string  
Link to kiosk version of waiver template

vanityUrls  string[]  
Link to any of the vanity urls for the template

webhook  object  
An object containing information about the template level webhook or null if no webhook is set up

webhook.endpoint  string  
Endpoint URL for webhook

webhook.emailValidationRequired  string  
Webhook is sent after email verification (yes), before (no)

Prefill a waiver template

Prefill a waiver template

requires authentication

Example request:

curl -X POST \
    "https://api.smartwaiver.com/v4/templates/9yskfhh4d9xkirqwgkux2b/prefill" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"expiration":30000,"lockdownPrefill":false,"adult":false,"participants":[{"firstName":"John","lastName":"Doe","phone":"555-555-5555","dob":"2018-03-03","customFields":{"aNk49uHsNjSezQbNVejRTr":"Per Person Prefill Data"}}],"guardian":{"firstName":"Jacob","lastName":"Doe","dob":"1999-03-03","customFields":{"aNk49uHsNjSezQbNVejRTr":"Guardian Prefill Data"}},"addressLineOne":"123 Sesame Street","addressCity":"Ocean City","addressState":"NJ","addressZip":"12345","email":"example@test.com","customWaiverFields":{"fLX6DN4mWThQQoY5sKStDo":"Per Waiver Prefill Data"}}'

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://api.smartwaiver.com/v4/templates/9yskfhh4d9xkirqwgkux2b/prefill',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'json' => [
            'expiration' => 30000,
            'lockdownPrefill' => false,
            'adult' => false,
            'participants' => [
                [
                    'firstName' => 'John',
                    'lastName' => 'Doe',
                    'phone' => '555-555-5555',
                    'dob' => '2018-03-03',
                    'customFields' => [
                        'aNk49uHsNjSezQbNVejRTr' => 'Per Person Prefill Data',
                    ],
                ],
            ],
            'guardian' => [
                'firstName' => 'Jacob',
                'lastName' => 'Doe',
                'dob' => '1999-03-03',
                'customFields' => [
                    'aNk49uHsNjSezQbNVejRTr' => 'Guardian Prefill Data',
                ],
            ],
            'addressLineOne' => '123 Sesame Street',
            'addressCity' => 'Ocean City',
            'addressState' => 'NJ',
            'addressZip' => '12345',
            'email' => 'example@test.com',
            'customWaiverFields' => [
                'fLX6DN4mWThQQoY5sKStDo' => 'Per Waiver Prefill Data',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/templates/9yskfhh4d9xkirqwgkux2b/prefill'
payload = {
    "expiration": 30000,
    "lockdownPrefill": false,
    "adult": false,
    "participants": [
        {
            "firstName": "John",
            "lastName": "Doe",
            "phone": "555-555-5555",
            "dob": "2018-03-03",
            "customFields": {
                "aNk49uHsNjSezQbNVejRTr": "Per Person Prefill Data"
            }
        }
    ],
    "guardian": {
        "firstName": "Jacob",
        "lastName": "Doe",
        "dob": "1999-03-03",
        "customFields": {
            "aNk49uHsNjSezQbNVejRTr": "Guardian Prefill Data"
        }
    },
    "addressLineOne": "123 Sesame Street",
    "addressCity": "Ocean City",
    "addressState": "NJ",
    "addressZip": "12345",
    "email": "example@test.com",
    "customWaiverFields": {
        "fLX6DN4mWThQQoY5sKStDo": "Per Waiver Prefill Data"
    }
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/templates/9yskfhh4d9xkirqwgkux2b/prefill"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "expiration": 30000,
    "lockdownPrefill": false,
    "adult": false,
    "participants": [
        {
            "firstName": "John",
            "lastName": "Doe",
            "phone": "555-555-5555",
            "dob": "2018-03-03",
            "customFields": {
                "aNk49uHsNjSezQbNVejRTr": "Per Person Prefill Data"
            }
        }
    ],
    "guardian": {
        "firstName": "Jacob",
        "lastName": "Doe",
        "dob": "1999-03-03",
        "customFields": {
            "aNk49uHsNjSezQbNVejRTr": "Guardian Prefill Data"
        }
    },
    "addressLineOne": "123 Sesame Street",
    "addressCity": "Ocean City",
    "addressState": "NJ",
    "addressZip": "12345",
    "email": "example@test.com",
    "customWaiverFields": {
        "fLX6DN4mWThQQoY5sKStDo": "Per Waiver Prefill Data"
    }
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "prefill",
    "prefill": {
        "uuid": "a0256461ca244278b4",
        "expiration": 30000,
        "url": "https:\/\/waiver.smartwaiver.com\/p\/a0256461ca244278b4\/"
    }
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

POST v4/templates/{templateId}/prefill

URL Parameters

templateId  string  
Unique ID of waiver template

Body Parameters

expiration  integer  
Expiration in seconds of waiver template (Min: 300, Max: 2592000)

lockdownPrefill  boolean optional  
If set will not let users change prefill values on the waiver (Default: false)

kiosk  boolean optional  
Whether to use kiosk mode (Allowed types: true or false)

adult  boolean optional  
Weather the waiver has only an adult or also a child(Allowed types: true or false)

anyoneElseHidden  boolean optional  
Hide the anyone else need to sign buttons (Allowed types: true or false), (Default: false)

participants  object[] optional  

participants[].firstName  string optional  
The participant's first name

participants[].middleName  string optional  
The participant's middle name

participants[].lastName  string optional  
The participant's last name

participants[].phone  string optional  
The participant's phone number

participants[].gender  string optional  
The participant's gender

participants[].dob  string optional  
The participant's DOB (IS0 8601 formatting: e.g. 2000-01-01)

participants[].customFields  object optional  
The participant's custom waiver fields

participants[].customFields.{GUID}  string optional  
The participant's custom waiver fields

guardian  object optional  

guardian.participant  boolean optional  
Whether the guardian is a participant or not (Default value: false)

guardian.firstName  string optional  
The guardian's first name

guardian.middleName  string optional  
The guardian's middle name

guardian.lastName  string optional  
The guardian's last name

guardian.relationship  string optional  
The guardian's relationship to the minor

guardian.phone  string optional  
The guardian's phone number (if they are a participant)

guardian.gender  string optional  
The guardian's gender (if they are a participant)

guardian.dob  string optional  
The guardian's dob (IS0 8601 formatting: e.g. 2000-01-01)

guardian.customFields  object optional  
The participant's custom waiver fields

guardian.customFields.{GUID}  string optional  
The participant's custom waiver fields

addressLineOne  string optional  
Address waiver question Line One

addressLineTwo  string optional  
Address waiver question Line Two

addressCountry  string optional  
Address waiver question country

addressCity  string optional  
Address waiver question city

addressState  string optional  
Address waiver question state

addressZip  string optional  
Address waiver question zip code

email  string optional  
Email waiver question

emergencyContactName  string optional  
Emergency waiver question full name

emergencyContactFirstName  string optional  
Emergency waiver question first name

emergencyContactLastName  string optional  
Emergency waiver question last name

emergencyContactRelation  string optional  
Emergency waiver question relationship

emergencyContactPhone  string optional  
Emergency waiver question phone

insuranceCarrier  string optional  
Insurance carrier

insurancePolicyNumber  string optional  
Policy number

driversLicenseState  string optional  
Drivers License State

driversLicenseNumber  string optional  
Drivers License Number

customWaiverFields  object optional  
Custom waiver fields on the waiver

customWaiverFields.{GUID}  string optional  
The value of the custom waiver field

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (prefill)

prefill  object  
Waiver template information

uuid  string  
Unique ID of prefilled waiver template

expiration  string  
Expiration time of waiver

url  string  
Direct link to prefilled waiver template

User

Get User Basic Info

requires authentication

Lists the users basic info.

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/info" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/info',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/info'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/info"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

{
    "version": 4,
    "id": "4bcdddfb830d4d42aec95da0d7f69514",
    "ts": "2024-12-10T18:38:34+00:00",
    "type": "auth_error",
    "message": "Unauthorized"
}

Request      

GET v4/info

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (info)

info  object  
Smartwaiver user infomration

username  string  
Settings for the waiver console

email  string  
Emiall address of current user.

signupDate  string  
Signup Date of current user

ipAddress  string  
Ip address of current request.

List User Settings

requires authentication

Lists the user settings.

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/settings" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/settings',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/settings'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/settings"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

{
    "version": 4,
    "id": "d49bd00542d7409193979abc39d59301",
    "ts": "2024-12-10T18:38:34+00:00",
    "type": "auth_error",
    "message": "Unauthorized"
}

Request      

GET v4/settings

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (settings)

settings  object  
Smartwaiver user settings

console  object  
Settings for the waiver console

staticExpiration  string  
Date before which all waivers are expired (never for no expiration)

rollingExpiration  string  
How many days a waiver is valid for it should be expired (never for never expires, otherwise a number and a letter (D or M) indicating a number of days or months) (`never`, `#D`, `#M`)

Get Api Key Label

requires authentication

Gets the api key label of the current user.

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/me" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/me',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/me'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/me"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

{
    "version": 4,
    "id": "6290976ed2ca4a95945d1a07a2fbe0ac",
    "ts": "2024-12-10T18:38:34+00:00",
    "type": "auth_error",
    "message": "Unauthorized"
}

Request      

GET v4/me

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (me)

me  object  
Smartwaiver user infomration

label  string  
Api Key Label

Waivers

List Signed Waivers

List Signed Waivers

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers?limit=5&offset=2" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'query' => [
            'limit'=> '5',
            'offset'=> '2',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers'
params = {
  'limit': '5',
  'offset': '2',
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers"
);

let params = {
    "limit": "5",
    "offset": "2",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "waivers",
    "waivers": [
        {
            "waiverId": "6jebdfxzvrdkd",
            "templateId": "sprswrvh2keeh",
            "title": "Demo Waiver",
            "createdOn": "2017-01-24 13:12:29",
            "expirationDate": "",
            "expired": false,
            "verified": true,
            "kiosk": true,
            "firstName": "Kyle",
            "middleName": "",
            "lastName": "Smith II",
            "dob": "2008-12-25",
            "isMinor": true,
            "autoTag": "",
            "tags": [
                "Green Team"
            ],
            "flags": [
                {
                    "displayText": "Have you received our orientation?",
                    "reason": "was not selected"
                }
            ]
        }
    ]
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Request      

GET v4/waivers

Query Parameters

limit  integer optional  
Max number of waivers to return Default value: 20 Allowed values: 1-300.

offset  integer optional  
How many pages to paginate through. Based on the limit. So if limit is 300. Offsets to Waivers 301 - 600 Default value: 0

verified  string optional  
Limit selection to waiver that have been verified or not Allowed values: true, false.

templateId  string optional  
Limit selection to signed waivers of the given template ID

prefillId  string optional  
Limit selection to signed waivers of the given prefill ID

fromDts  string optional  
Limit to checkins after this ISO 8601 date (Must not be within the current hour) (If not provided time will default to 00:00:00). Allowed values: Must be in ISO 8601 format

toDts  string optional  
End date of checkin report (must be before current hour) (ISO in UTC)

firstName  string optional  
Limit to waivers with a participant having this First Name (Case Insensitive)

lastName  string optional  
Limit to waivers with a participant having this Last Name (Case Insensitive)

tag  string optional  
Limit to waivers with a participant having this as their primary tag

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (waivers)

waivers  object[]  
Signed waiver information

waiverId  string  
Unique ID of waiver

templateId  string  
Unique ID of template for this waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

expirationDate  string  
Date waiver will expire (ISO 8601 format) Note: This value is always empty if your account does not have the days to expiration setting enabled in the waiver console.

expired  boolean  
If this waiver is older than your account's static expiration date or is past your account setting for days to expiration from signing date

verified  boolean  
If the waiver has been verified

kiosk  boolean  
If the waiver was signed at a kiosk

firstName  string  
First name of the first participant on the waiver

middleName  string  
Middle name of the first participant on the waiver

lastName  string  
Last name of the first participant on the waiver

dob  string  
Date of birth of the first participant on the waiver (ISO 8601 format) Note: The DOB will be 1800-01-01 if the waiver is set up to use a checkbox for age verification.

isMinor  boolean  
Whether the first participant is a minor or not

autoTag  string  
Auto tag on the waiver if there is one, otherwise it will be blank

tags  string[]  
A list of tags for the waiver

flags  object[]  
A list of tags for all participants

flags[].displayText  string  
The display text for the flagged question

flags[].reason  string  
The reason this answer was flagged

prefillId  string  
PrefillId for waiver if it exist, null if there is not one

Retrieve a signed waiver

Retrieve a signed waiver

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers/WAIVER_ID?pdf=false" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers/WAIVER_ID',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'query' => [
            'pdf'=> 'false',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers/WAIVER_ID'
params = {
  'pdf': 'false',
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers/WAIVER_ID"
);

let params = {
    "pdf": "false",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2017-01-24T11:14:25+00:00",
    "type": "waiver",
    "waiver": {
        "waiverId": "6jebdfxzvrdkd",
        "templateId": "sprswrvh2keeh",
        "title": "Smartwaiver Demo Waiver",
        "createdOn": "2017-01-24 13:12:29",
        "expirationDate": "",
        "expired": false,
        "verified": true,
        "kiosk": true,
        "firstName": "Kyle",
        "middleName": "",
        "lastName": "Smith II",
        "dob": "2008-12-25",
        "autoTag": "",
        "clientIP": "192.0.2.0",
        "email": "example@smartwaiver.com",
        "marketingAllowed": false,
        "addressLineOne": "626 NW Arizona Ave.",
        "addressLineTwo": "Suite 2",
        "addressCity": "Bend",
        "addressState": "OR",
        "addressZip": "97703",
        "addressCountry": "US",
        "emergencyContactName": "Mary Smith",
        "emergencyContactPhone": "111-111-1111",
        "insuranceCarrier": "My Insurance",
        "insurancePolicyNumber": "1234567",
        "driversLicenseNumber": "9876543",
        "driversLicenseState": "OR",
        "tags": [
            "Green Team"
        ],
        "flags": [
            {
                "displayText": "Have you received our orientation?",
                "reason": "was not selected"
            }
        ],
        "participants": [
            {
                "firstName": "Kyle",
                "middleName": "",
                "lastName": "Smith II",
                "dob": "2008-12-25",
                "isMinor": true,
                "gender": "Male",
                "phone": "",
                "tags": [
                    "YES"
                ],
                "customParticipantFields": {
                    "bk3xydss4e9dy": {
                        "value": "YES",
                        "displayText": "Is this participant ready to have fun?"
                    }
                },
                "flags": [
                    {
                        "displayText": "Are you excited?",
                        "reason": "was not selected"
                    }
                ]
            }
        ],
        "pdf": "Base64 Encoded PDF",
        "photos": 1,
        "guardian": {
            "firstName": "Kyle",
            "middleName": "",
            "lastName": "Smith I",
            "phone": "555-555-5555",
            "relationship": "Father",
            "dob": "1970-12-25"
        },
        "customWaiverFields": {
            "ha5bs1jy5wdop": {
                "value": "A friend",
                "displayText": "How did you hear about Smartwaiver?"
            }
        },
        "typedSignatures": {
            "participants": [],
            "guardian": [],
            "bodySignatures": [],
            "bodyInitials": []
        }
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/waivers/{waiverId}

URL Parameters

waiverId  string  
Unique ID of signed waiver.

Query Parameters

pdf  string optional  
Include Base 64 encoded PDF of signed waiver Default value: false Allowed values: true, false.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (waivers)

waivers  object  
Signed waiver information

waiverId  string  
Unique ID of signed waiver

templateId  string  
Unique ID of template for this signed waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

expirationDate  string  
Date waiver will expire (ISO 8601 format) Note: This value is always empty if your account does not have the days to expiration setting enabled in the waiver console.

expired  boolean  
If this waiver is older than your account's static expiration date or is past your account setting for days to expiration from signing date

verified  boolean  
If the waiver has been verified

kiosk  boolean  
If the waiver was signed at a kiosk

firstName  string  
First name of the first participant on the waiver

middleName  string  
Middle name of the first participant on the waiver

lastName  string  
Last name of the first participant on the waiver

dob  string  
Date of birth of the first participant on the waiver (ISO 8601 format) Note: The DOB will be 1800-01-01 if the waiver is set up to use a checkbox for age verification.

isMinor  boolean  
Whether the first participant is a minor or not

autoTag  string  
Auto tag on the waiver if there is one, otherwise it will be blank

clientIP  string  
IP Address from which the waiver was submitted

email  string  
The primary email for the waiver

marketingAllowed  boolean  
Whether the user allows marketing to be sent to their email

addressLineOne  string  
The first line of the address

addressLineTwo  string  
The second line of the address

addressCity  string  
The city of the address

addressState  string  
The state of the address

addressZip  string  
The zip code of the address

addressCountry  string  
The country of the address

emergencyContactName  string  
The name of the emergency contact

emergencyContactPhone  string  
The phone number of the emergency contact

insuranceCarrier  string  
The name of the insurance carrier

insurancePolicyNumber  string  
The policy number of the insurance

driversLicenseNumber  string  
The number of the drivers license

driversLicenseState  string  
The state of the drivers license

tags  string[]  
A list of tags for the waiver

flags  object[]  
A list of tags for all participants

flags[].displayText  string  
The display text for the flagged question

flags[].reason  string  
The reason this answer was flagged

flags[].photos  integer  
Number of photos attached to this waiver

participants  object[]  
A list of participants on the waiver

participants[].firstName  string  
The first name of the participant

participants[].middleName  string  
The middle name of the participant

participants[].lastName  string  
The last name of the participant

participants[].dob  string  
Date of birth of the participant (ISO 8601 format) Note: The DOB will be 1800-01-01 if the waiver is set up to use a checkbox for age verification.

participants[].isMinor  boolean  
Whether or not this participant is a minor

participants[].minorExpired  boolean  
True if this participant is a minor and has passed age of majority and age of majority expiration turned on, false otherwise

participants[].gender  string  
Gender of the participant

participants[].phone  string  
Phone number of the participant

participants[].relationship  string  
If this participant is the guardian on the waiver, this field will be the relationship to the minor

participants[].tags  string[]  
A list of tags for the waiver

participants[].customParticipantFields  object  
Any custom participant fields on the waiver

participants[].customParticipantFields.{GUID}  object  
The custom participant field, each {GUID} is unique. Note that this is only the last 13 characters of a fields GUID

participants[].customParticipantFields.{GUID}.value  string  
The value of the custom participant field

participants[].customParticipantFields.{GUID}.displayText  string  
The display text of the custom participant field

participants[].flags  object[]  
A list of tags for this participant

participants[].flags[].displayText  string  
The display text for the flagged question

participants[].flags[].reason  string  
The reason this answer was flagged

participants[].pdf    
Base64 Encoded PDF

photos  integer  

customWaiverFields  object  
Any custom waiver fields on the waiver

customWaiverFields.{GUID}  object  
The custom waiver field, each {GUID} is unique. Note that this is only the last 13 characters of a fields GUID

customWaiverFields.{GUID}.value  string  
The value of the custom waiver field

customWaiverFields.{GUID}.displayText  string  
The display text of the custom waiver field

guardian  object  
If there are only minors on the waiver, this field contains the guardian information, otherwise it will be null

guardian.firstName  string  
The first name of the guardian

guardian.middleName  string  
The middle name of the guardian

guardian.lastName  string  
The last name of the guardian

guardian.phone  string  
The phone number of the guardian

guardian.dob  string  
The dob of the guardian

typedSignatures.participants  string[]  
These are for a single adult participant or all minors.

typedSignatures.guardian  string[]  
If the guardian must sign the signature will be here, regardless if the guardian is a participant or not

typedSignatures.bodySignatures  string[]  
All signatures from the body in the order they appear.

typedSignatures.bodyInitials  string[]  
All initials from the body in the order they appear.

Retrieve a signed waiver

Retrieve a signed waiver

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/tempurl" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/tempurl',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/tempurl'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/tempurl"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2017-01-24T11:14:25+00:00",
    "type": "waiver",
    "waiver":
    {
        "temp_url": "https://exampleurl.com",
        "waiverId": "6jebdfxzvrdkd",
        "templateId": "sprswrvh2keeh",
        "title": "Smartwaiver Demo Waiver",
        "createdOn": "2017-01-24 13:12:29",
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/waivers/{waiverId}/tempurl

URL Parameters

waiverId  string  
Unique ID of signed waiver.

Retrieve files uploaded with a waiver

Retrieve files uploaded with a waiver

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/files" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/files',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/files'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/files"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "files",
    "files": {
        "waiverId": "6jebdfxzvrdkd",
        "templateId": "sprswrvh2keeh",
        "title": "Smartwaiver Demo Waiver",
        "createdOn": "2017-01-24 13:12:29",
        "files": [
            {
                "type": "kiosk",
                "date": "2017-01-01 00:00:00",
                "tag": "IP: 192.168.2.0",
                "fileType": "jpg",
                "fileId": "CwLeDjffgDoGHua",
                "file": "BASE64 ENCODED FILE"
            }
        ]
    }
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/waivers/{waiverId}/files

URL Parameters

waiverId  string  
Unique ID of signed waiver.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (files)

files  object[]  
A list of files for the waiver

waiverId  string  
Unique ID of signed waiver

templateId  string  
Unique ID of template for this signed waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

files[].name  string  
A string containing the name of the file

files[].fileType  string  
The extension of the file

files[].fileId  string  
A unique identifier for this file

files[].file  string  
Base 64 Encoded file

Retrieve photos for a waiver

Retrieve photos for a waiver

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/photos" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/photos',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/photos'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/photos"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "photos",
    "photos": {
        "waiverId": "6jebdfxzvrdkd",
        "templateId": "sprswrvh2keeh",
        "title": "Smartwaiver Demo Waiver",
        "createdOn": "2017-01-24 13:12:29",
        "photos": [
            {
                "type": "kiosk",
                "date": "2017-01-01 00:00:00",
                "tag": "IP: 192.168.2.0",
                "fileType": "jpg",
                "photoId": "CwLeDjffgDoGHua",
                "photo": "BASE64 ENCODED FILE"
            }
        ]
    }
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/waivers/{waiverId}/photos

URL Parameters

waiverId  string  
Unique ID of signed waiver.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (photos)

photos  object[]  
A list of photos for the waiver

waiverId  string  
Unique ID of signed waiver

templateId  string  
Unique ID of template for this signed waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

photos[].type  string  
Where the photo was captured from Allowed values: kiosk, console

photos[].date  string  
The date the photo was taken (in UTC)

photos[].tag  string  
A string containing metadata about where/when the photo was captured

photos[].fileType  string  
The extension of the file

photos[].photoId  string  
A unique identifier for this file

photos[].photo  string  
Base 64 Encoded file

Retrieve signatures for a waiver

Retrieve signatures for a waiver

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/signatures" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/signatures',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/waivers/WAIVER_ID/signatures'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/waivers/WAIVER_ID/signatures"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "signatures",
    "signatures": {
        "waiverId": "6jebdfxzvrdkd",
        "templateId": "sprswrvh2keeh",
        "title": "Smartwaiver Demo Waiver",
        "createdOn": "2017-01-24 13:12:29",
        "signatures": {
            "participants": [
                "BASE64 ENCODED IMAGE STRING"
            ],
            "guardian": [
                "BASE64 ENCODED IMAGE STRING"
            ],
            "bodySignatures": [
                "BASE64 ENCODED IMAGE STRING"
            ],
            "bodyInitials": [
                "BASE64 ENCODED IMAGE STRING"
            ]
        }
    }
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

GET v4/waivers/{waiverId}/signatures

URL Parameters

waiverId  string  
Unique ID of signed waiver.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (signatures)

signatures  object  
Property containing all types of signatures. All values are arrays of base 64 encoded image strings.

waiverId  string  
Unique ID of signed waiver

templateId  string  
Unique ID of template for this signed waiver

title  string  
Title of waiver

createdOn  string  
Date waiver was signed (ISO 8601 format)

signatures.participants  string[]  
These are for a single adult participant or all minors.

signatures.guardian  string[]  
If the guardian must sign the signature will be here, regardless if the guardian is a participant or not

signatures.bodySignatures  string[]  
All signatures from the body in the order they appear.

signatures.bodyInitials  string[]  
All initials from the body in the order they appear.

Webhook Queues

Retrieve queue information

Retrieve queue information

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/webhooks/queues" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/webhooks/queues',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/queues'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/queues"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "api_webhook_all_queue_message_count",
    "api_webhook_all_queue_message_count": {
        "account": {
            "messagesTotal": 2,
            "messagesNotVisible": 0,
            "messagesDelayed": 0
        },
        "template-4fc7d12601941": {
            "messagesTotal": 4,
            "messagesNotVisible": 2,
            "messagesDelayed": 0
        }
    }
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Example response (502, Bad Gateway):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Failed to delete"
}

Request      

GET v4/webhooks/queues

URL Parameters

templateId  string  
Unique ID of waiver template queue to delete the message from

Query Parameters

delete  string optional  
Delete the message when it is retrieved Default value: false Allowed values: true, false

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (api_webhook_all_queue_message_count)

api_webhook_all_queue_message_count  object  
Webhook queue count information (Default value (no messages): null)

account  object  
Message information for account level webhook queue (Note: this only exists if your account level webhook queue is enabled)

account.messagesTotal  string  
Total number of messages in queue

account.messagesNotVisible  string  
Total number of messages that are not currently visible

account.messagesDelayed  string  
Total number of messages that have a delay set

template-{TEMPLATE_ID}  object  
For every template ID in your account that has webhooks enabled there will be an object

template-{TEMPLATE_ID}.messagesTotal  string  
Total number of messages in queue

template-{TEMPLATE_ID}.messagesNotVisible  string  
Total number of messages that are not currently visible

template-{TEMPLATE_ID}.messagesDelayed  string  
Total number of messages that have a delay set

Retrieve account message

Retrieve account message

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/webhooks/queues/account" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/webhooks/queues/account',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/queues/account'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/queues/account"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "api_webhook_account_message_get",
    "api_webhook_account_message_get": {
        "messageId": "9d58e8fc-6353-4ceb-b0a3-5412f3d05e28",
        "payload": {
            "unique_id": "",
            "event": "new-waiver"
        }
    }
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (502, Bad Gateway):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Failed to delete"
}

Request      

GET v4/webhooks/queues/account

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (api_webhook_account_message_get)

api_webhook_account_message_get  object  
Webhook queue count information (Default value (no messages): null)

messageId  string  
Message ID (can be used to delete message)

payload  object  
The payload containing the payload of the message

payload.unique_id  string  
The unique ID of the waiver

payload.event  string  
The event causing this webhook to be fired

Retrieve template message

Retrieve template message

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "api_webhook_template_message_get",
    "api_webhook_template_message_get": {
        "messageId": "9d58e8fc-6353-4ceb-b0a3-5412f3d05e28",
        "payload": {
            "unique_id": "",
            "event": "new-waiver"
        }
    }
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (502, Bad Gateway):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Failed to delete"
}

Request      

GET v4/webhooks/queues/template/{templateId}

URL Parameters

templateId  string  
Unique ID of waiver template queue to delete the message from

Query Parameters

delete  string optional  
Delete the message when it is retrieved Default value: false Allowed values: true, false

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (api_webhook_template_message_get)

api_webhook_template_message_get  object  
Webhook queue count information (Default value (no messages): null)

messageId  string  
Message ID (can be used to delete message)

payload  object  
The payload containing the payload of the message

payload.unique_id  string  
The unique ID of the waiver

payload.event  string  
The event causing this webhook to be fired

Delete account message

Delete a message from the account queue using the message ID returned when the message was retrieved. This is an option for the workflow to retrieve a message, process it, then delete it.

requires authentication

Example request:

curl -X DELETE \
    "https://api.smartwaiver.com/v4/webhooks/queues/account/MESSAGE_ID" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.smartwaiver.com/v4/webhooks/queues/account/MESSAGE_ID',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/queues/account/MESSAGE_ID'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/queues/account/MESSAGE_ID"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "api_webhook_account_message_delete",
    "api_webhook_account_message_delete": {
        "success": true
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (502, Bad Gateway):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Failed to delete"
}

Request      

DELETE v4/webhooks/queues/account/{messageId}

URL Parameters

messageId  string  
Unique ID of message returned when it was retrieved

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (api_webhook_account_message_delete)

api_webhook_account_message_delete  object  

success  string  
Whether the delete was successful

Delete template message

Delete a message from the template queue using the message ID returned when the message was retrieved. This is an option for the workflow to retrieve a message, process it, then delete it.

requires authentication

Example request:

curl -X DELETE \
    "https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID/MESSAGE_ID" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID/MESSAGE_ID',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID/MESSAGE_ID'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/queues/template/TEMPLATE_ID/MESSAGE_ID"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "api_webhook_template_message_delete",
    "api_webhook_template_message_delete": {
        "success": true
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (502, Bad Gateway):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Failed to delete"
}

Request      

DELETE v4/webhooks/queues/template/{templateId}/{messageId}

URL Parameters

templateId  string  
Unique ID of waiver template queue to delete the message from.

messageId  string  
Unique ID of message returned when it was retrieved.

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (api_webhook_template_message_delete)

api_webhook_template_message_delete  object  

success  string  
Whether the delete was successful

Webhooks

Resend webhook

Resend the new-waiver webhook for the given waiver ID. This is for testing purposes only and is heavily rate limited. Note: This request is not included in the normal 100 request per minute limit, but is instead limited to 2 requests per minute by itself.

requires authentication

Example request:

curl -X PUT \
    "https://api.smartwaiver.com/v4/webhooks/resend/0" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://api.smartwaiver.com/v4/webhooks/resend/0',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/resend/0'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/resend/0"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "webhooks_resend",
    "webhooks_resend": {
        "success": true
    }
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Request      

PUT v4/webhooks/resend/{waiverId}

URL Parameters

waiverId  integer  
The Unique Id of the waiver

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (webhooks_resend)

webhooks_resend  object  
Webhook information (empty because no webhook is set)

success  boolean  
True/False for whether resend was added to queue

Retrieve current webhook

Retrieve current webhook

requires authentication

Example request:

curl -X GET \
    -G "https://api.smartwaiver.com/v4/webhooks/configure" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://api.smartwaiver.com/v4/webhooks/configure',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/configure'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/configure"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "webhooks",
    "webhooks": {
        "endpoint": "https:\/\/example.com",
        "emailValidationRequired": "both"
    }
}

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "webhooks",
    "webhooks": {
        "endpoint": "https:\/\/example.com\/test1",
        "emailValidationRequired": "yes",
        "endpoint2": "https:\/\/example.com\/test2",
        "endpoint3": ""
    }
}

Request      

GET v4/webhooks/configure

URL Parameters

webhookNumber  integer optional  
The webhook number (1,2,3) Default (1)

searchWebhook  string optional  
The url of the webhook to search

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (webhooks)

webhooks  object  
Webhook information (empty because no webhook is set)

endpoint  string  
Endpoint URL for webhook

emailValidationRequired  string  
Webhook is sent after email verification (yes), before (no), or before and after (both)

Set webhook

requires authentication

This endpoint configures webhooks. By default this manages the default webhook. If you have no webhooks setup it will create the default webhook.

For more information on webhooks: https://support.smartwaiver.com/hc/en-us/articles/360057049551-What-are-Webhooks

If you have a default webhook setup it will overrite that webhook unless you pass the create:true flag.

If you include the create:true flag the system will ignore the webhookNumber and create a new webhook in the next available place

You can only create up to 3 webhooks. You will get an error if you try to create more.

Example request:

curl -X PUT \
    "https://api.smartwaiver.com/v4/webhooks/configure" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"create":false,"webhookNumber":1,"searchWebhook":"https:\/\/example.com","checkinWebhook":false,"endpoint":"https:\\\\smartwaiver.com\\test","emailValidationRequired":"yes"}'

$client = new \GuzzleHttp\Client();
$response = $client->put(
    'https://api.smartwaiver.com/v4/webhooks/configure',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
        'json' => [
            'create' => false,
            'webhookNumber' => 1,
            'searchWebhook' => 'https://example.com',
            'checkinWebhook' => false,
            'endpoint' => 'https:\\\\smartwaiver.com\\test',
            'emailValidationRequired' => 'yes',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/configure'
payload = {
    "create": false,
    "webhookNumber": 1,
    "searchWebhook": "https:\/\/example.com",
    "checkinWebhook": false,
    "endpoint": "https:\\\\smartwaiver.com\\test",
    "emailValidationRequired": "yes"
}
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/configure"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "create": false,
    "webhookNumber": 1,
    "searchWebhook": "https:\/\/example.com",
    "checkinWebhook": false,
    "endpoint": "https:\\\\smartwaiver.com\\test",
    "emailValidationRequired": "yes"
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "webhooks",
    "webhooks": [
        {
            "endpoint": "https:\/\/smartwaiver.com",
            "emailValidationRequired": "both"
        }
    ]
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Example response (402, Data Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "data_error",
    "message": "Message explaining the invalid data entered"
}

Example response (404, Not Found):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Route or Resource Id not found"
}

Example response (406, Wrong Content Type):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "error",
    "message": "Content-Type must be json"
}

Request      

PUT v4/webhooks/configure

Body Parameters

create  boolean optional  
Creates a new webhook instead of overwriting the default. Default (false)

webhookNumber  integer optional  
The webhook number to update (1,2,3) Default (1)

searchWebhook  string optional  
The url of the webhook to update

checkinWebhook  boolean optional  
Should the webhook send when users checkin. (This applies to all webhooks)

endpoint  required optional  
The webhook endpoint to set Allowable Values: Valid URL

emailValidationRequired  string  
Webhook is sent after email verification (yes), before (no), or before and after (both) Allowed values: yes, no, both (This applies to all webhooks)

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (webhooks)

webhooks  object  
Webhook information (empty because no webhook is set)

endpoint  string  
Endpoint URL for webhook

emailValidationRequired  string  
Webhook is sent after email verification (yes), before (no), or before and after (both)

Delete Webhook

requires authentication

When you delete webhooks the system will automatically shift the rest of the webhooks so you still have a default. For example:

If you have three webhooks

And you delete endpoint 1 the system will shift the webhooks so that

If you would like to delete a specific webhook please use searchWebhook to specify the URL of webhook you would like to delete

Example request:

curl -X DELETE \
    "https://api.smartwaiver.com/v4/webhooks/configure" \
    -H "Authorization: Bearer [INSERT API KEY]" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"

$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://api.smartwaiver.com/v4/webhooks/configure',
    [
        'headers' => [
            'Authorization' => 'Bearer [INSERT API KEY]',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json

url = 'https://api.smartwaiver.com/v4/webhooks/configure'
headers = {
  'Authorization': 'Bearer [INSERT API KEY]',
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('DELETE', url, headers=headers)
response.json()
const url = new URL(
    "https://api.smartwaiver.com/v4/webhooks/configure"
);

let headers = {
    "Authorization": "Bearer [INSERT API KEY]",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-20T20:09:53+00:00",
    "type": "webhooks",
    "webhooks": {}
}

Example response (400, Parameter Error):

{
    "version": 4,
    "id": "a0256461ca244278b412ab3238f5efd2",
    "ts": "2024-05-17T12:00:33+00:00",
    "type": "parameter_error",
    "message": "Parameter <x> is not supported"
}

Request      

DELETE v4/webhooks/configure

URL Parameters

webhookNumber  integer optional  
The webhook number (1,2,3,*). If "*" you will delete all webhooks. Default (1)

searchWebhook  string optional  
The url of the webhook to delete

Response

Response Fields

version  integer  
API version number

id  string  
Uuid for request (32 characters)

ts  string  
Timestamp of request

type  string  
Type of response given (webhooks)

webhooks  object  
Webhook information (empty because no webhook is set)