NAV
cURL Node.js Ruby Python

WaiverForever OpenAPI

Contact: mobile@waiverforever.com
License: Apache 2.0
Terms of service

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

Introduction

WaiverForever is a leading edge electronic waiver system. Streamlining your business is our first priority. We take it seriously to steadily openning our APIs for third-party developers and power users.

By integrating our APIs with existing services or creating them from scratch, users are now able to create or improve workflows that's not possible before.

For demonstration, we have built a Zapier app based on these APIs. This is only the first step, stay tuned for more updates.

Terminologies

Let's explain some frequently-used terms of WaiverForever.

Template is similar to a class in object-oriented languages, in other words a blank waiver form. Each template in WaiverForever has a unique identifier and multiple versions. Each time a waiver is edited and saved, a new template version is created. In general, we always return the latest version when requesting a waiver template.

Waiver is similar to an instance in object-oriented languages, in other words a filled waiver form. Each time after user sign and submit/upload, a new waiver is created and saved. Waiver may have pictures attached.

Field is the smallest logical unit of a template or a waiver. You can find all the fields we support here: Field Types.

Workflow

How does it work really?

1. Authentication

First off, you need a valid API key to access our APIs. Each API key should represent one standalone app. You can generate and revoke your API keys in the  Settings / Integration tab.

The authentication mechanism is quite simple, all you need to do is to add a custom HTTP header: X-API-Key.

2. Webhooks

Second, we use webhooks to communicate with you.

Webhook is a commonly used technique that allows you to build or set up apps which subscribe to certain events on WaiverForever.

For example, when a new_waiver_submitted event is triggered, aka a new waiver is signed, we'll send an HTTP POST payload with the waiver data to the webhook's target URL.

Please note that webhooks work on the template/waiver level.

We'll support more webhook events in the future.

Check the webhook signatures

Verify the events that sends to your webhook endpoints.

We sign the webhook events it sends to your endpoints by including a signature in each event’s X-WaiverForever-Signature header. This allows you to verify that the events were sent by us, not by a third party. You can verify signatures manually using your own solution. Before you can verify signatures, you need to retrieve your endpoint’s app_secret from your Dashboard’s Webhooks settings.

Verifying signatures manually

The Signature header included in each signed event contains a timestamp and one signature. The timestamp is prefixed by t=, and signature is prefixed by signature=. so the whole header looks like this: X-Waiverforever-Signature: t=1671097440,signature=81e018cc8b10a4c7c46790d088c81445bc77861cc4f9b1d4dcd72f734289b837

In short,the steps are:

  1. Extract the timestamp and signatures from the header
  2. Prepare the signed_payload string
  3. Generate a signature using your app_secret and the signed_payload string
  4. Compare the generated signature with the signature from the header

we provide a sample python flask code for you to verify the signature

@app.route("/api/v1/webhook", methods=["POST"])
def webhook():
    header = request.headers.get("X-Waiverforever-Signature")
    t = header.split(",")[0].removeprefix("t=")
    signature_in_header = header.split(",")[1].removeprefix("signature=")

    app_secret = "<your app_secret>"
    body = request.get_data()
    signed_payload = "{},{},{}".format(t, body.decode(), app_secret)
    my_signature = hashlib.sha256(s.encode("utf-8")).hexdigest()

    if signature == signature_in_header:
        # do something
        return {}
    else:
        raise Exception("signature not match")
    return {}

Dynamic Webhooks

Dynamic webhooks provide maximum flexibility to manage your events. You can subscribe/unsubscribe to dynamic webhooks at any time.

Static Webhooks

Compared to dynamic webhooks, static webhooks are relatively easy to setup (you don't have to write code). Just go to the template settings page, specify your target URL, then we'll handle the rest for you.

3. API

Base URLs:

The whole flow is dead simple ->

Your App                     WavierForever                             User
|                                   |                                   |
|---------------------------------->|
|1) Auth ping (optional)            |                                   |
|                                   |
|<----------------------------------|                                   |
|2) Return 200 if API key valid     |
|                                   |                                   |
|---------------------------------->|
|3) Subscribe template event        |                                   |
| with your target url.             |
| e.g. `new_waiver_submitted`          |                                   |
|                                   |<----------------------------------|
|                                   |4) Sign and upload a waiver        |
|<----------------------------------|                                   |
|5) POST waiver payload to target   |                                   |
| url                               |                                   |
|                                   |                                   |
|---------------------------------->|                                   |
|6) Download waiver pdf             |                                   |
|                                   |                                   |
|---------------------------------->|                                   |
|7) Unsubscribe event               |                                   |
|                                   |                                   |
X                                   |                                   |
X                                   |                                   |
|                                   |                                   |
                                    |                                   |
                                    |                                   |
                                    |                                   |
                                    |                                   |

Authentication

WaiverForever uses API keys to allow access to the API. You can register a new API key at Settings / Integration tab.

WaiverForever expects for the API key to be included in all API requests to the server in a header that looks like the following:

X-API-Key: api_key

Auth Endpoints

Get User Info

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/auth/userInfo \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json'
};

fetch('https://api.waiverforever.com/openapi/v1/auth/userInfo', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/auth/userInfo', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/auth/userInfo', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/auth/userInfo

Get user info for the API key

Example responses

{
  "result": true,
  "msg": "success",
  "data": {
    "username": "demo@example.com"
  }
}

Responses

Status Meaning Description Schema
200 OK Successful request Response
403 Forbidden Invalid API key None

Response Schema

Status Code 200

Name Type Required Description
username string true username of the account

Webhooks Endpoints

Subscribe / Unsubscribe webhooks events.

Current support events:

Event Payload Schema Description
new_waiver_submitted Event a new waiver is submitted
new_waiver_accepted Event a new waiver is accepted
pdf_generated Event a new waiver is signed and waiver pdf is generated
waiver_checkin Event a waiver is checked in

Subscription Resource

Name Type Required Description
id string true subscription id
event string true event name
template_id string true template id
target_url string true target url
secret_key string true secret key

Get All Subscriptions

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/webhooks/ \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/webhooks/', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/webhooks/', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/webhooks/', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/webhooks/

Get all webhooks subscriptions.

Example responses

{
  "result": true,
  "msg": "success",
  "data": [{
    "id": "subscription id",
    "event": "event name",
    "template_id": "template id",
    "target_url": "target url",
    "secret_key": "secret_key"
  }]
}

Responses

Status Meaning Description Schema
200 OK Successful request [Subscription]
403 Forbidden Invalid API key None

Subscribe an event

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v1/webhooks/ \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>' \
  -d '{
  "target_url": "",
  "template_id": "",
  "event": "new_waiver_submitted"
}'
const fetch = require('node-fetch');
const inputBody = `{
  'target_url': '',
  'template_id': '',
  'event': 'new_waiver_submitted'
}`;
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/webhooks/', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  })
require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload = {
  'event' => 'new_waiver_submitted',
  'template_id' => '',
  'target_url' => ''
}


result = RestClient.post 'https://api.waiverforever.com/openapi/v1/webhooks/', payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}
data = {
  'target_url': '',
  'template_id': '',
  'event': 'new_waiver_submitted'
}

r = requests.post('https://api.waiverforever.com/openapi/v1/webhooks/', json=data, headers=headers)

print(r.json())

POST /openapi/v1/webhooks/

Subscribe an event.

Subscribe an event you care about, and WaiverForever will call you back when certain it occurred.

Body parameter

{
  "event": "<event_name>",
  "target_url": "<callback url>",
  "template_id": "<template_id>"
}

Parameters

Parameter In Type Required Description
body body object false Event that you're interested.
» event body string true event name
» target_url body string true callback url
» template_id body string true template id

Example responses

{
  "result": true,
  "msg": "success",
  "data": {
    "id": "subscription id",
    "event": "event name",
    "template_id": "template id"
  }
}

Responses

Status Meaning Description Schema
200 OK Successful request Subscription
403 Forbidden Invalid API key None

Unsubscribe an event

Code samples

# You can also use wget
curl -X DELETE https://api.waiverforever.com/openapi/v1/webhooks/{subscription_id}/ \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');
const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/webhooks/{subscription_id}/', {
  method: 'DELETE',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.delete 'https://api.waiverforever.com/openapi/v1/webhooks/{subscription_id}/', headers: headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.delete('https://api.waiverforever.com/openapi/v1/webhooks/{subscription_id}/', headers=headers)

print(r.json())

DELETE /openapi/v1/webhooks/{subscription_id}/

Unsubscribe an event.

Parameters

Parameter In Type Required Description
subscription_id path string true subscription id

Example responses

{
  "result": true,
  "msg": "success"
}

Responses

Status Meaning Description Schema
200 OK Successful request Response
403 Forbidden Invalid API key None

Template Endpoints

Access templates

Template Resources

Name Type Required Description
id string true template id
title string true template title
disabled boolean true true if disabled by user
created_at integer true created timestamp
updated_at integer true updated timestamp

Get Template list

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/templates \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/templates', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/templates', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/templates', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/templates

Example responses

{
  "result": true,
  "msg": "success",
  "data": [
    {
      "title": "Demo Wavier",
      "id": "oBrbmWnp7X1446531274",
      "disabled": false,
      "created_at": 1446531274,
      "updated_at": 1493594388
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK successful request Inline
403 Forbidden Invalid API key None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data [Template] true template list

Request Waiver

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/template/{template_id}/requestWaiver?ttl=<ttl> \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/template/{template_id}/requestWaiver?ttl=<ttl>', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/template/{template_id}/requestWaiver?ttl=<ttl>', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/template/{template_id}/requestWaiver?ttl=<ttl>', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/template/{template_id}/requestWaiver?ttl=<ttl>

Request a waiver to sign

Parameters

Parameter In Type Required Description
template_id path string true template id
ttl query string false request waiver expiration time (in seconds), default 86400

Example responses

{
  "result": true,
  "msg": "success",
  "data": {
    "tracking_id": "<tracking_id>",
    "request_waiver_url": "<request_waiver_url>",
    "ttl": 86400
  }
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data object true data
» tracking_id string true tracking id for requested waiver
» request_waiver_url string true remote signing url for requested waiver
» ttl string true request waiver expiration time (in seconds)

Get Sample Waiver

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/template/{template_id}/getSampleWaiver \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/template/{template_id}/getSampleWaiver', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/template/{template_id}/getSampleWaiver', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/template/{template_id}/getSampleWaiver', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/template/{template_id}/getSampleWaiver

get a sample waiver of template

Parameters

Parameter In Type Required Description
template_id path string true template id

Example responses

{
  "id": "zZ613txA741510127626",
  "status": "approved",
  "has_pdf": true,
  "pictures": [
    {
      "id": "picture id",
      "title": "Your Photo",
      "timestamp": 1510127609
    }
  ],
  "data": [
    {
      "id": 1,
      "value": "HF",
      "type": "initial_field",
      "title": "please input your initials"
    },
    {
      "id": 2,
      "first_name": "first",
      "middle_name": "",
      "last_name": "",
      "value": "first m last",
      "title": "Please fill in your name",
      "type": "name_field"
    },
    {
      "id": 3,
      "title": "Please fill in your email",
      "value": "gh@me.com",
      "type": "email_field"
    },
    {
      "id": 4,
      "value": "1 851-234-5678",
      "title": "Please fill in your phone number",
      "type": "phone_field"
    },
    {
      "id": 5,
      "state": "TX",
      "first_line": "No 123",
      "value": "No 123 TX, USA",
      "type": "address_field",
      "country": "USA",
      "title": "Please fill in your address",
      "zipcode": "123456",
      "second_line": "",
      "city": ""
    },
    {
      "id": 6,
      "value": "18",
      "title": "Please fill in your age",
      "type": "age_field"
    },
    {
      "id": 7,
      "type": "date_field",
      "title": "Please fill date",
      "value": "2017-11-8",
      "year": "2017",
      "month": "11",
      "day": "8"
    },
    {
      "id": 8,
      "type": "checkbox_field",
      "title": "Text to agree on",
      "value": "checked"
    },
    {
      "id": 9,
      "value": "Ghosts ",
      "title": "Your fav team",
      "type": "short_answer_field"
    },
    {
      "id": 10,
      "value": "Femal",
      "title": "Male or Female",
      "type": "single_choice_field"
    },
    {
      "id": 11,
      "value": ["Magazine", "Trip advisor"],
      "title": "Where did you hear about us? (Gain market insight!)",
      "type": "multiple_choice_field"
    },
    {
      "id": 12,
      "type": "container_field",
      "title": "please enter your minors' information",
      "result_list": [
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C1 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C1 gh@me.com",
            "type": "email_field"
          }
        ],
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C2 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C2 gh@me.com",
            "type": "email_field"
          }
        ]
      ]
    }
  ],
  "template_title": "Bike Rental Waiver",
  "template_version": "D6RkEV1yUK1512568456",
  "s3_pdf_download_url": "https://s3.amazonaws.com/xxx/xxxxx.pdf",
  "template_id": "JwIvKHHfW81493594388",
  "tracking_id": "D6RkEV1yUK1512568456",
  "request_id": "P4g4R0nmkY1652897359",
  "received_at": 1510127625,
  "signed_at": 1510127615,
  "note": "",
  "tags": ["tag1", "tag2"],
  "geolocation": {
      "accuracy": 5,
      "latitude": "137.785834",
      "longitude": "-22.406417"
  },
   "device": {
      "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
      "username": "a",
      "id": "opZTzJP2gI1504892592",
      "device_name": "Jing's iPhone",
      "identifier": ""
  }
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data Waiver true Signed Waiver

Get Template Prefill Schema

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill/schema \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill/schema', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill/schema', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill/schema', params={
}, headers=headers)

print(r.json())

GET /openapi/v2/template/{template_id}/prefill/schema

get a prefill schema of template

Parameters

Parameter In Type Required Description
template_id path string true template id

Example responses

{
    "result": true,
    "msg": "success",
    "data": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://app.waiverforever.com/template/ydZzcImufE1693278569/zNzssm73H01720136641/prefill.schema.json",
        "title": "waiver example",
        "type": "object",
        "properties": {
            "name-first_name-1-0": {
                "type": "string"
            },
            "name-last_name-1-0": {
                "type": "string"
            },
            "name-first_name-1-1": {
                "type": "string"
            },
            "name-last_name-1-1": {
                "type": "string"
            },
            "name-first_name-1-3": {
                "type": "string"
            },
            "name-last_name-1-3": {
                "type": "string"
            },
            "name-first_name-1-4": {
                "type": "string"
            },
            "name-last_name-1-4": {
                "type": "string"
            },
            "name-first_name-1-6": {
                "type": "string"
            },
            "name-last_name-1-6": {
                "type": "string"
            },
            "name-first_name-1-7": {
                "type": "string"
            },
            "name-last_name-1-7": {
                "type": "string"
            },
            "name-first_name-1-9": {
                "type": "string"
            },
            "name-last_name-1-9": {
                "type": "string"
            },
            "name-first_name-1-10": {
                "type": "string"
            },
            "name-last_name-1-10": {
                "type": "string"
            },
            "name-first_name-1-12": {
                "type": "string"
            },
            "name-last_name-1-12": {
                "type": "string"
            },
            "name-first_name-1-13": {
                "type": "string"
            },
            "name-last_name-1-13": {
                "type": "string"
            },
            "name-first_name-1-15": {
                "type": "string"
            },
            "name-last_name-1-15": {
                "type": "string"
            },
            "name-first_name-1-16": {
                "type": "string"
            },
            "name-last_name-1-16": {
                "type": "string"
            },
            "name-first_name-1-18": {
                "type": "string"
            },
            "name-last_name-1-18": {
                "type": "string"
            },
            "name-first_name-1-19": {
                "type": "string"
            },
            "name-last_name-1-19": {
                "type": "string"
            },
            "name-first_name-1-21": {
                "type": "string"
            },
            "name-last_name-1-21": {
                "type": "string"
            },
            "name-first_name-1-22": {
                "type": "string"
            },
            "name-last_name-1-22": {
                "type": "string"
            },
            "name-first_name-1-24": {
                "type": "string"
            },
            "name-last_name-1-24": {
                "type": "string"
            },
            "name-first_name-1-25": {
                "type": "string"
            },
            "name-last_name-1-25": {
                "type": "string"
            },
            "name-first_name-1-27": {
                "type": "string"
            },
            "name-last_name-1-27": {
                "type": "string"
            },
            "name-first_name-1-28": {
                "type": "string"
            },
            "name-last_name-1-28": {
                "type": "string"
            }
        },
        "additionalProperties": false
    }
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data object true template prefill schema

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill' \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>' \
  -H 'Content-Type': 'application/json' \
  -d '{
    "fields": {
        "name-first_name-1-0": "Joe"
    }
  }'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
    "fields": {
        "name-first_name-1-0": "Joe"
    }
}`;

fetch('https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload ={
    "fields"=> {
        "name-first_name-1-0"=> "Joe"
    }
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/template/{template_id}/prefill', payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
    "fields": {
        "name-first_name-1-0": "Joe"
    }
}

r = requests.post('https://app.waiverforever.com/openapi/v2/template/{template_id}/prefill', json=data, headers=headers)

print(r.json())

POST /openapi/v2/template/{template_id}/prefill

Generate Template Prefill URL

Parameters

Parameter In Type Required Description
template_id path string true template id
fields body object true prefilled fields. must fit for prefill schema
expire_at body int false expire datetime of prefill link

Example responses

{
    "result": true,
    "msg": "success",
    "data": {
        "url": "https://api.waiverforever.com/pending/ydZzcImufE1693278569?prefill_id=sm5h9LXOZ51720145090",
        "expire_at": 1720749890
    }
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data Prefill true response message

Waiver Endpoints

Access waiver

Waiver Resource

Name Type Required Description
id string true waiver id
template_id string true template id
template_title string true template title
template_version string true template version
has_pdf boolean true true if the PDF is available to download
geolocation GeoLocation false signing location
received_at integer true server received timestamp, should be 0 if waiver status is not approved
signed_at integer true waiver signed timestamp
pictures [Picture] false attached pictures
data [Field] true filled fields
device Device false signing device
note string true waiver note
tags [string] true waiver tags
ip string false ip
request_id string false waiver request id, should be '' if not exists
tracking_id string false waiver tracking id, should be '' if not exists
status string true waiver status, possible values pending, approved, revoked
s3_pdf_download_url string true waiver pdf download url, this url only valid for 30 seconds

Get Signed Waiver

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/waiver/{waiver_id} \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/waiver/{waiver_id}

Get a signed waiver

Parameters

Parameter In Type Required Description
waiver_id path string true waiver id

Example responses

{
  "id": "zZ613txA741510127626",
  "status": "approved",
  "has_pdf": true,
  "pictures": [
    {
      "id": "picture id",
      "title": "Your Photo",
      "timestamp": 1510127609
    }
  ],
  "data": [
    {
      "id": 1,
      "value": "HF",
      "type": "initial_field",
      "title": "please input your initials"
    },
    {
      "id": 2,
      "first_name": "first",
      "middle_name": "",
      "last_name": "",
      "value": "first m last",
      "title": "Please fill in your name",
      "type": "name_field"
    },
    {
      "id": 3,
      "title": "Please fill in your email",
      "value": "gh@me.com",
      "type": "email_field"
    },
    {
      "id": 4,
      "value": "1 851-234-5678",
      "title": "Please fill in your phone number",
      "type": "phone_field"
    },
    {
      "id": 5,
      "state": "TX",
      "first_line": "No 123",
      "value": "No 123 TX, USA",
      "type": "address_field",
      "country": "USA",
      "title": "Please fill in your address",
      "zipcode": "123456",
      "second_line": "",
      "city": ""
    },
    {
      "id": 6,
      "value": "18",
      "title": "Please fill in your age",
      "type": "age_field"
    },
    {
      "id": 7,
      "type": "date_field",
      "title": "Please fill date",
      "value": "2017-11-8",
      "year": "2017",
      "month": "11",
      "day": "8"
    },
    {
      "id": 8,
      "type": "checkbox_field",
      "title": "Text to agree on",
      "value": "checked"
    },
    {
      "id": 9,
      "value": "Ghosts ",
      "title": "Your fav team",
      "type": "short_answer_field"
    },
    {
      "id": 10,
      "value": "Femal",
      "title": "Male or Female",
      "type": "single_choice_field"
    },
    {
      "id": 11,
      "value": ["Magazine", "Trip advisor"],
      "title": "Where did you hear about us? (Gain market insight!)",
      "type": "multiple_choice_field"
    },
    {
      "id": 12,
      "type": "container_field",
      "title": "please enter your minors' information",
      "result_list": [
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C1 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C1 gh@me.com",
            "type": "email_field"
          }
        ],
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C2 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C2 gh@me.com",
            "type": "email_field"
          }
        ]
      ]
    }
  ],
  "template_title": "Bike Rental Waiver",
  "template_version": "D6RkEV1yUK1512568456",
  "s3_pdf_download_url": "https://s3.amazonaws.com/xxx/xxxxx.pdf",
  "template_id": "JwIvKHHfW81493594388",
  "tracking_id": "D6RkEV1yUK1512568456",
  "request_id": "P4g4R0nmkY1652897359",
  "received_at": 1510127625,
  "signed_at": 1510127615,
  "note": "",
  "tags": ["tag1", "tag2"],
  "ip": "1.1.1.1",
  "geolocation": {
      "accuracy": 5,
      "latitude": "137.785834",
      "longitude": "-22.406417"
  },
   "device": {
      "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
      "username": "a",
      "id": "opZTzJP2gI1504892592",
      "device_name": "Jing's iPhone",
      "identifier": ""
  }
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data Waiver true Signed Waiver

Get Tracking Waiver

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/waiver/tracking/{tracking_id} \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/waiver/tracking/{tracking_id}', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/waiver/tracking/{tracking_id}', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/waiver/tracking/{tracking_id}', params={
}, headers=headers)

print(r.json())

GET /openapi/v1/waiver/tracking/{tracking_id}

Query signed waiver by tracking id

Parameters

Parameter In Type Required Description
tracking_id path string true tracking id from requestWaiver

Example responses

{
  // same as get signed waiver above
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data Waiver true Signed Waiver

Update Waiver Note

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/note' \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>' \
  -H 'Content-Type': 'application/json' \
  -d '{
    "note":"the note"
  }'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
    "note": "the note"
}`;

fetch('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/note', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload ={
    "note"=> "the note"
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/note', payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
    "note": "the note"
}

r = requests.post('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/note', json=data, headers=headers)

print(r.json())

POST /openapi/v1/waiver/{waiver_id}/note

Update waiver note

Parameters

Parameter In Type Required Description
waiver_id path string true waiver id
note body string true waiver note

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message

Accept Waiver

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v2/waiver/{waiver_id}/accept \
  -H 'Accept: */*' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'*/*',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v2/waiver/{waiver_id}/accept', {
  method: 'POST',
  headers: headers
}).then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/waiver/{waiver_id}/accept', headers

p result
import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': '<api_key>'
}

r = requests.post('https://api.waiverforever.com/openapi/v2/waiver/{waiver_id}/accept', params={
}, headers=headers)

print r.content

POST /openapi/v2/waiver/{waiver_id}/accept

Accept waiver

Responses

Status Meaning Description Schema
200 OK Successful request binary
403 Forbidden Invalid api key None
404 Not Found Wavier not found None

Download Waiver PDF

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/pdf \
  -H 'Accept: */*' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'*/*',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/pdf', {
  method: 'GET',
  headers: headers
}).then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/pdf', headers

p result
import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/pdf', params={
}, headers=headers)

print r.content

GET /openapi/v1/waiver/{waiver_id}/pdf

Download waiver in pdf

Parameters

Parameter In Type Required Description
waiver_id path string true waiver id

Example responses

Responses

Status Meaning Description Schema
200 OK Successful request binary
403 Forbidden Invalid api key None
404 Not Found Wavier not found None

Download Waiver Pictures

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/picture/{picture_id} \
  -H 'Accept: */*' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'*/*'
};

fetch('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/picture/{picture_id}', {
  method: 'GET',
  headers: headers
}).then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/picture/{picture_id}', headers: headers

p result
import requests
headers = {
  'Accept': '*/*',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v1/waiver/{waiver_id}/picture/{picture_id}', params={
}, headers=headers)

print r.content

GET /openapi/v1/waiver/{waiver_id}/picture/{picture_id}

Download waiver pictures

Parameters

Parameter In Type Required Description
waiver_id path string true waiver id
picture_id path string true picture id

Example responses

Responses

Status Meaning Description Schema
200 OK Successful request binary
403 Forbidden Invalid api key None
404 Not Found Wavier not found None

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v1/waiver/search \
  -H 'Accept: */*' \
  -H 'X-Api-Key: <api_key>'
  -d '{
    "search_term":"query string",
    "start_timestamp": 1400000000,
    "end_timestamp": 1500000000,
    "page": 1,
    "per_page": 10,
    "template_ids": ["kkgVVsMpGx1455624443"]
  }'
const fetch = require('node-fetch');

const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
  'search_term': 'query string',
  'start_timestamp': 1400000000,
  'end_timestamp': 1500000000,
  'page': 1,
  'per_page': 10,
  "template_ids": ["kkgVVsMpGx1455624443"]
}`;

fetch('https://api.waiverforever.com/openapi/v1/waiver/search', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => '*/*',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload = {
  'search_term' => 'query string',
  'start_timestamp' => 1400000000,
  'end_timestamp' => 1500000000,
  'page' => 1,
  'per_page' => 10,
  "template_ids" => ["kkgVVsMpGx1455624443"]
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v1/waiver/search', payload.to_json, headers

p result
import requests
headers = {
  'Accept': '*/*',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
  'search_term': 'query string',
  'start_timestamp': 1400000000,
  'end_timestamp': 1500000000,
  'page': 1,
  'per_page': 10,
  'template_ids': ['kkgVVsMpGx1455624443']
}

r = requests.post('https://api.waiverforever.com/openapi/v1/waiver/search', json=data, headers=headers)

print r.content

POST /openapi/v1/waiver/search

search waiver.

search waiver with keywords.

Body parameter

{
  "search_term": "<search_term>",
  "start_timestamp": "<start timestamp>",
  "end_timestamp": "<end timestamp>",
  "page": "<page index>",
  "per_page": "<results per page>",
  "template_ids": "<template id list>",
  "note": "<waiver note>",
  "tags": "<tag name list>",
  "device_ids": "<device id list>",
  "request_id": "<request id>",
  "request_ids": "<request id list>",
  "status": "<waiver status>"
}

Parameters

Parameter In Type Required Description
body body object true search conditions.
search_term body string false search term
start_timestamp body int false start timestamp in seconds
end_timestamp body int false end timestamp in seconds
page body int false page index, default 1
per_page body int false results per page, default 10
template_ids body list[string] false templates id list
note body string false waiver note
tags body list[string] false tag name list
device_ids body list[string] false device id list
request_id body string false waiver request id
request_ids body list[string] false waiver request id list
status body string false waiver status (approved, pending, revoked)
reference_number body string false waiver reference number

Example responses

{
    "data": {
        "waivers": [
            {
                "signed_at": 1461130513,
                "device": null,
                "template_title": null,
                "template_id": "igcJYpG2KT1381868360",
                "template_version": "D6RkEV1yUK1512568456",
                "s3_pdf_download_url": "https://s3.amazonaws.com/xxx/xxxxx.pdf",
                "tracking_id": "",
                "request_id": "",
                "has_pdf": true,
                "status": "approved",
                "id": "ChPV4IMuVm1461130523",
                "geolocation": {},
                "pictures": [],
                "note": "",
                "tags": [""],
                "data": [
                    {
                        "city": "",
                        "second_line": "",
                        "country": "",
                        "title": "Please fill in your address",
                        "first_line": "test333",
                        "state": "",
                        "value": "test333",
                        "type": "address_field",
                        "zipcode": ""
                    },
                   ...
                ],
                "received_at": 1461130523
            },
            ...
        ],
        "per_page": 10,
        "page": 1,
        "total": 85
    },
    "result": true,
    "msg": "success"
}

Responses

Status Meaning Description Schema
200 OK Successful request Subscription
403 Forbidden Invalid API key None

WaiverRequest Endpoints

Access waiver request

Waiver Request Resource

Name Type Required Description
id string true request id
name string true request name
size int true request size
note string true request note
type string true request type. possible values normal, anonymous
contact_info string true contact info
template_id string true template id of waiver request
status string true request status. possible values collecting, accepted
request_link string true request share link
datetime int true created timestamp

Create Waiver Request

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v2/waiverRequest \
  -H 'Accept: application/json' \
  -H 'Content-Type': 'application/json' \
  -H 'X-Api-Key: <api_key>' \
  -d '{
    "name": "waiver request name",
    "size": 1,
    "note": "note",
    "type": "normal",
    "contact_info": "contact info",
    "template_id": "TutFEMdPgR1519947925"
}'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
    "name": "waiver request name",
    "size": 1,
    "note": "note",
    "type": "normal",
    "contact_info": "contact info",
    "template_id": "TutFEMdPgR1519947925"
}`;

fetch('https://api.waiverforever.com/openapi/v2/waiverRequest', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload ={
    "name"=> "waiver request name",
    "size"=> 1,
    "note"=> "note",
    "type"=> "normal",
    "contact_info"=> "contact info",
    "template_id"=> "TutFEMdPgR1519947925"
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/waiverRequest',payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
    "name": "waiver request name",
    "size": 1,
    "note": "note",
    "type": "normal",
    "contact_info": "contact info",
    "template_id": "TutFEMdPgR1519947925"
}

r = requests.post('https://api.waiverforever.com/openapi/v2/waiverRequest', json=data, headers=headers)

print(r.json())

POST /openapi/v2/waiverRequest

Create waiver request

Parameters

Parameter In Type Required Description
name body string true request name
size body int true request size. between 0 and 1000
note body string true request note
type body string true request type. possible values normal, anonymous
contact_info body string true request contact info
template_id body string true request template id

Example responses

{
  "note": "note",
  "accepted_count": 0,
  "submitted_count": 0,
  "size": 1,
  "request_link": "https://app.waiverforever.com/requested_waiver_group/JM2AJFe0Gq1594865417",
  "type": "normal",
  "datetime": 1594865417,
  "name": "waiver request name",
  "contact_info": "contact info",
  "id": "JM2AJFe0Gq1594865417",
  "status": "collecting",
  "template_id": "TutFEMdPgR1519947925"
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverRequest true Waiver Request

Get Waiver Request

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id} \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}', params={
}, headers=headers)

print(r.json())

GET /openapi/v2/waiverRequest/{waiver_request_id}?include_waivers=true

Get a waiver request

Parameters

Parameter In Type Required Description
waiver_request_id path string true waiver request id
include_waivers query bool false include waivers in the response

Example responses

{
    "note": "note",
    "accepted_count": 0,
    "submitted_count": 0,
    "size": 1,
    "request_link": "https://app.waiverforever.com/requested_waiver_group/JM2AJFe0Gq1594865417",
    "type": "normal",
    "datetime": 1594865417,
    "name": "waiver request name",
    "contact_info": "contact info",
    "id": "JM2AJFe0Gq1594865417",
    "status": "collecting",
    "template_id": "TutFEMdPgR1519947925",
    "waivers": [
        {
            "id": "zZ613txA741510127626",
            "status": "approved",
            "has_pdf": true,
            "pictures": [
                {
                    "id": "picture id",
                    "title": "Your Photo",
                    "timestamp": 1510127609
                }
            ],
            "data": [
                {
                    "id": 1,
                    "value": "HF",
                    "type": "initial_field",
                    "title": "please input your initials"
                },
                {
                    "id": 2,
                    "first_name": "first",
                    "middle_name": "",
                    "last_name": "",
                    "value": "first m last",
                    "title": "Please fill in your name",
                    "type": "name_field"
                },
                {
                    "id": 3,
                    "title": "Please fill in your email",
                    "value": "gh@me.com",
                    "type": "email_field"
                },
                {
                    "id": 4,
                    "value": "1 851-234-5678",
                    "title": "Please fill in your phone number",
                    "type": "phone_field"
                },
                {
                    "id": 5,
                    "state": "TX",
                    "first_line": "No 123",
                    "value": "No 123 TX, USA",
                    "type": "address_field",
                    "country": "USA",
                    "title": "Please fill in your address",
                    "zipcode": "123456",
                    "second_line": "",
                    "city": ""
                },
                {
                    "id": 6,
                    "value": "18",
                    "title": "Please fill in your age",
                    "type": "age_field"
                },
                {
                    "id": 7,
                    "type": "date_field",
                    "title": "Please fill date",
                    "value": "2017-11-8",
                    "year": "2017",
                    "month": "11",
                    "day": "8"
                },
                {
                    "id": 8,
                    "type": "checkbox_field",
                    "title": "Text to agree on",
                    "value": "checked"
                },
                {
                    "id": 9,
                    "value": "Ghosts ",
                    "title": "Your fav team",
                    "type": "short_answer_field"
                },
                {
                    "id": 10,
                    "value": "Femal",
                    "title": "Male or Female",
                    "type": "single_choice_field"
                },
                {
                    "id": 11,
                    "value": [
                        "Magazine",
                        "Trip advisor"
                    ],
                    "title": "Where did you hear about us? (Gain market insight!)",
                    "type": "multiple_choice_field"
                },
                {
                    "id": 12,
                    "type": "container_field",
                    "title": "please enter your minors' information",
                    "result_list": [
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C1 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C1 gh@me.com",
                                "type": "email_field"
                            }
                        ],
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C2 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C2 gh@me.com",
                                "type": "email_field"
                            }
                        ]
                    ]
                }
            ],
            "template_title": "Bike Rental Waiver",
            "template_version": "D6RkEV1yUK1512568456",
            "s3_pdf_download_url": "https://s3.amazonaws.com/xxx/xxxxx.pdf",
            "template_id": "JwIvKHHfW81493594388",
            "tracking_id": "D6RkEV1yUK1512568456",
            "request_id": "P4g4R0nmkY1652897359",
            "received_at": 1510127625,
            "signed_at": 1510127615,
            "note": "",
            "tags": [
                "tag1",
                "tag2"
            ],
            "ip": "1.1.1.1",
            "geolocation": {
                "accuracy": 5,
                "latitude": "137.785834",
                "longitude": "-22.406417"
            },
            "device": {
                "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
                "username": "a",
                "id": "opZTzJP2gI1504892592",
                "device_name": "Jing's iPhone",
                "identifier": ""
            }
        }
    ]
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverRequest true Waiver Request

Edit Waiver Request

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id} \
  -H 'Accept: application/json' \
  -H 'Content-Type': 'application/json' \
  -H 'X-Api-Key: <api_key>' \
  -d '{
    "name": "waiver request name new",
    "size": 2,
    "note": "note new",
    "contact_info": "contact info new",
}'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
    "name": "waiver request name new",
    "size": 2,
    "note": "note new",
    "contact_info": "contact info new"
}`;

fetch('https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload ={
    "name"=> "waiver request name new",
    "size"=> 2,
    "note"=> "note new",
    "contact_info"=> "contact info new"
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}',payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
    "name": "waiver request name new",
    "size": 2,
    "note": "note new",
    "contact_info": "contact info new"
}

r = requests.post('https://api.waiverforever.com/openapi/v2/waiverRequest/{waiver_request_id}', json=data, headers=headers)

print(r.json())

POST /openapi/v2/waiverRequest/{waiver_request_id}

Edit waiver request

Parameters

Parameter In Type Required Description
waiver_request_id path string true waiver request id
name body string true request name
size body int true request size. between 0 and 1000
note body string true request note
contact_info body string true request contact info

Example responses

{
  "note": "note new",
  "accepted_count": 0,
  "submitted_count": 0,
  "size": 2,
  "request_link": "https://app.waiverforever.com/requested_waiver_group/JM2AJFe0Gq1594865417",
  "type": "normal",
  "datetime": 1594865417,
  "name": "waiver request name new",
  "contact_info": "contact info new",
  "id": "JM2AJFe0Gq1594865417",
  "status": "collecting",
  "template_id": "TutFEMdPgR1519947925"
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverRequest true Waiver Request

List Waiver Requests

Code samples

# You can also use wget
curl -X GET https://api.waiverforever.com/openapi/v2/waiverRequests?template_id=TutFEMdPgR1519947925&name=open&status=collecting&start_timestamp=1593532800&end_timestamp=1595174400&page=1&per_page=5 \
&include_waivers=true \
&request_ids[]=id1&request_ids[]=id2 \
  -H 'Accept: application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v2/waiverRequests?template_id=TutFEMdPgR1519947925&name=open&status=collecting&start_timestamp=1593532800&end_timestamp=1595174400&page=1&per_page=5&include_waivers=true&request_ids[]=id1&request_ids[]=id2', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.get 'https://api.waiverforever.com/openapi/v2/waiverRequests?template_id=TutFEMdPgR1519947925&name=open&status=collecting&start_timestamp=1593532800&end_timestamp=1595174400&page=1&per_page=5&include_waivers=true&request_ids[]=id1&request_ids[]=id2', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v2/waiverRequests?template_id=TutFEMdPgR1519947925&name=open&status=collecting&start_timestamp=1593532800&end_timestamp=1595174400&page=1&per_page=5&include_waivers=true&request_ids[]=id1&request_ids[]=id2', params={
}, headers=headers)

print(r.json())

GET /openapi/v2/waiverRequests

List waiver requests

Parameters

Parameter In Type Required Description
template_id query string true request template id
name query string false name search term
status query string false request status. possible values collecting, accepted.
start_timestamp query int false start timestamp in seconds
end_timestamp query int false end timestamp in seconds
page query int false page index, default 1
per_page query int false results per page, default 10
include_waivers query bool false include waivers in the response
request_ids query list[string] false request id list

Example responses

{
  "page": 1,
  "per_page": 5,
  "count": 7,
  "waiver_requests": [
    {
      "id": "B7Z3Z5pymj1594862535",
      "note": "note",
      "size": 10,
      "datetime": 1594862535,
      "template_id": "",
      "request_link": "https://app.waiverforever.com/requested_waiver_group/B7Z3Z5pymj1594862535",
      "contact_info": "c info",
      "type": "normal",
      "status": "collecting",
      "accepted_count": 0,
      "submitted_count": 0,
      "name": "open api created 2",
      "waivers": [
        {
            "id": "zZ613txA741510127626",
            "status": "approved",
            "has_pdf": true,
            "pictures": [
                {
                    "id": "picture id",
                    "title": "Your Photo",
                    "timestamp": 1510127609
                }
            ],
            "data": [
                {
                    "id": 1,
                    "value": "HF",
                    "type": "initial_field",
                    "title": "please input your initials"
                },
                {
                    "id": 2,
                    "first_name": "first",
                    "middle_name": "",
                    "last_name": "",
                    "value": "first m last",
                    "title": "Please fill in your name",
                    "type": "name_field"
                },
                {
                    "id": 3,
                    "title": "Please fill in your email",
                    "value": "gh@me.com",
                    "type": "email_field"
                },
                {
                    "id": 4,
                    "value": "1 851-234-5678",
                    "title": "Please fill in your phone number",
                    "type": "phone_field"
                },
                {
                    "id": 5,
                    "state": "TX",
                    "first_line": "No 123",
                    "value": "No 123 TX, USA",
                    "type": "address_field",
                    "country": "USA",
                    "title": "Please fill in your address",
                    "zipcode": "123456",
                    "second_line": "",
                    "city": ""
                },
                {
                    "id": 6,
                    "value": "18",
                    "title": "Please fill in your age",
                    "type": "age_field"
                },
                {
                    "id": 7,
                    "type": "date_field",
                    "title": "Please fill date",
                    "value": "2017-11-8",
                    "year": "2017",
                    "month": "11",
                    "day": "8"
                },
                {
                    "id": 8,
                    "type": "checkbox_field",
                    "title": "Text to agree on",
                    "value": "checked"
                },
                {
                    "id": 9,
                    "value": "Ghosts ",
                    "title": "Your fav team",
                    "type": "short_answer_field"
                },
                {
                    "id": 10,
                    "value": "Femal",
                    "title": "Male or Female",
                    "type": "single_choice_field"
                },
                {
                    "id": 11,
                    "value": [
                        "Magazine",
                        "Trip advisor"
                    ],
                    "title": "Where did you hear about us? (Gain market insight!)",
                    "type": "multiple_choice_field"
                },
                {
                    "id": 12,
                    "type": "container_field",
                    "title": "please enter your minors' information",
                    "result_list": [
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C1 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C1 gh@me.com",
                                "type": "email_field"
                            }
                        ],
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C2 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C2 gh@me.com",
                                "type": "email_field"
                            }
                        ]
                    ]
                }
            ],
    },
    ...
  ]
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverRequest true Waiver Request

Send Requests via Email

Code samples

# You can also use wget
curl -X POST https://api.waiverforever.com/openapi/v2/waiverRequests/sendGroupEmail \
  -H 'Accept: application/json' \
  -H 'Content-Type': 'application/json' \
  -H 'X-Api-Key: <api_key>' \
  -d '{
    "group_id": "AboljiXtzg1672625614",
    "template_id": "sgMbm2RMWo1670977664",
    "recipient_list": "xx1@gmail.com<xx1@gmail.com>",
    "expired_in": 1672502400,
    "email_note": "email node",
    "enable_secondary_distribution": "false"
    "reply_to": "xx2@gmail.com",
}'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

const inputBody = `{
    "group_id": "AboljiXtzg1672625614",
    "template_id": "sgMbm2RMWo1670977664",
    "recipient_list": "xx1@gmail.com<xx1@gmail.com>",
    "expired_in": 1672502400,
    "email_note": "email node",
    "enable_secondary_distribution": "false"
    "reply_to": "xx2@gmail.com",
}`;

fetch('https://api.waiverforever.com/openapi/v2/waiverRequests/sendGroupEmail', {
  method: 'POST',
  body: inputBody,
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

payload ={
    "group_id"=> "AboljiXtzg1672625614",
    "template_id"=> "sgMbm2RMWo1670977664",
    "recipient_list"=> "xx1@gmail.com<xx1@gmail.com>",
    "expired_in"=> 1672502400,
    "email_note"=> "email node",
    "enable_secondary_distribution"=> false
    "reply_to"=> "xx2@gmail.com",
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/waiverRequests/sendGroupEmail',payload.to_json, headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

data = {
    "group_id": "AboljiXtzg1672625614",
    "template_id": "sgMbm2RMWo1670977664",
    "recipient_list": "xx1@gmail.com<xx1@gmail.com>",
    "expired_in": None,
    "email_note": "email node",
    "enable_secondary_distribution": "false"
    "reply_to": "xx2@gmail.com",
}

r = requests.post('https://api.waiverforever.com/openapi/v2/waiverRequests/sendGroupEmail', json=data, headers=headers)

print(r.json())

POST /openapi/v2/waiverRequests/sendGroupEmail

Once a waiver request has been created, you should use this API to send email requests to your customers asking them to sign the waiver.

Parameters

Parameter In Type Required Description
group_id body string true request group id
template_id body string true request template id
reply_to body string true request reply_to
recipient_list body string true request email list
email_note body string true request email note
expired_in body int true request expired timestamp

Example responses

{
  "tracks": [
            {
                "tracking_id": "9SfrMTYPtO1672625614",
                "email": "xx@gmail.com",
                "human_name": "xx@gmail.com",
                "status": "open",
                "send_result": false
            },
            {
                "tracking_id": "oB40y1XQlM1672625614",
                "email": "xx2@163.com",
                "human_name": "xx2@163.com",
                "status": "open",
                "send_result": false
            }
        ]
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverTracking true Waiver Request

Get Waiver Request Tracking Info

Code samples

# You can also use wget
curl https://api.waiverforever.com/openapi/v2/waiverRequests/groupTrackings?group_id=oVMlLtxIZL1673829942&page=1&per_page=10 \
  -H 'Accept: application/json' \
  -H 'Content-Type': 'application/json' \
  -H 'X-Api-Key: <api_key>'
const fetch = require('node-fetch');

const headers = {
  'Accept':'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
};

fetch('https://api.waiverforever.com/openapi/v2/waiverRequests/groupTrackings?group_id=oVMlLtxIZL1673829942&page=1&per_page=10 ', {
  method: 'GET',
  headers: headers
}).then(res => res.json())
  .then(body => console.log(body))
  .catch(error => {
    console.log(error);
  });
require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'Content-Type' => 'application/json',
  'X-Api-Key' => '<api_key>'
}

result = RestClient.post 'https://api.waiverforever.com/openapi/v2/waiverRequests/groupTrackings?group_id=oVMlLtxIZL1673829942&page=1&per_page=10', headers

p JSON.parse(result)
import requests
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Api-Key': '<api_key>'
}

r = requests.get('https://api.waiverforever.com/openapi/v2/waiverRequests/groupTrackings?group_id=oVMlLtxIZL1673829942&page=1&per_page=10', headers=headers)

print(r.json())

GET /openapi/v2/waiverRequests/groupTrackings

Retrieve the status of the email requests sent for a particular waiver request

Parameters

Parameter In Type Required Description
tracking_id string true tracking id
page int true page
per_page int true per page

Example responses

{
  "data": [
            {
                "tracking_id": "9SfrMTYPtO1672625614",
                "email": "xx@gmail.com",
                "human_name": "xx@gmail.com",
                "status": "open",
                "send_result": false
            },
            {
                "tracking_id": "oB40y1XQlM1672625614",
                "email": "xx2@163.com",
                "human_name": "xx2@163.com",
                "status": "open",
                "send_result": false
            }
        ]
}

Responses

Status Meaning Description Schema
200 OK Successful request Inline
403 Forbidden Invalid api key None
404 Not Found Template not found None

Response Schema

Status Code 200

Name Type Required Description
result boolean true request success or fail
msg string true response message
data WaiverTrackingResponse true paged data

Schemas

Response

{
  "result": true,
  "msg": "success"
}

Properties

Name Type Required Description
result boolean false request success or fail
msg string false response message

Subscription

{
  "result": true,
  "msg": "success",
  "data": {
    "id": "subscription id",
    "event": "event name",
    "template_id": "template id",
    "target_url": "target url"
  }
}

Properties

Name Type Required Description
id string true subscription id
event string true event name
template_id string true template id
target_url string true target url
secret_key string true secret key

Template

{
  "title": "Demo Wavier",
  "id": "oBrbmWnp7X1446531274",
  "disabled": false,
  "created_at": 1446531274,
  "updated_at": 1493594388
}

Properties

Name Type Required Description
id string true template id
title string true template title
disabled boolean true true if disabled by user
created_at integer true created timestamp
updated_at integer true updated timestamp

TemplatePrefillResponse

 {
    "url": "https://app.waiverforever.com/pending/ydZzcImufE1693278569?prefill_id=uZgzpO5Wq11720142756",
    "expire_at": 1720143820
}

Properties

Name Type Required Description
url string true prefill url
expire_at int true expire datetime of prefill url

Waiver

{
  "id": "zZ613txA741510127626",
  "status": "approved",
  "has_pdf": true,
  "pictures": [
    {
      "id": "picture id",
      "title": "Your Photo",
      "timestamp": 1510127609
    }
  ],
  "data": [
    {
      "id": 1,
      "value": "HF",
      "type": "initial_field",
      "title": "please input your initials"
    },
    {
      "id": 2,
      "first_name": "first",
      "middle_name": "",
      "last_name": "",
      "value": "first m last",
      "title": "Please fill in your name",
      "type": "name_field"
    },
    {
      "id": 3,
      "title": "Please fill in your email",
      "value": "gh@me.com",
      "type": "email_field"
    },
    {
      "id": 4,
      "value": "1 851-234-5678",
      "title": "Please fill in your phone number",
      "type": "phone_field"
    },
    {
      "id": 5,
      "state": "TX",
      "first_line": "No 123",
      "value": "No 123 TX, USA",
      "type": "address_field",
      "country": "USA",
      "title": "Please fill in your address",
      "zipcode": "123456",
      "second_line": "",
      "city": ""
    },
    {
      "id": 6,
      "value": "18",
      "title": "Please fill in your age",
      "type": "age_field"
    },
    {
      "id": 7,
      "type": "date_field",
      "title": "Please fill date",
      "value": "2017-11-8",
      "year": "2017",
      "month": "11",
      "day": "8"
    },
    {
      "id": 8,
      "type": "checkbox_field",
      "title": "Text to agree on",
      "value": "checked"
    },
    {
      "id": 9,
      "value": "Ghosts ",
      "title": "Your fav team",
      "type": "short_answer_field"
    },
    {
      "id": 10,
      "value": "Femal",
      "title": "Male or Female",
      "type": "single_choice_field"
    },
    {
      "id": 11,
      "value": ["Magazine", "Trip advisor"],
      "title": "Where did you hear about us? (Gain market insight!)",
      "type": "multiple_choice_field"
    },
    {
      "id": 12,
      "type": "container_field",
      "title": "please enter your minors' information",
      "result_list": [
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C1 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C1 gh@me.com",
            "type": "email_field"
          }
        ],
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C2 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C2 gh@me.com",
            "type": "email_field"
          }
        ]
      ]
    }
  ],
  "template_title": "Bike Rental Waiver",
  "template_version": "D6RkEV1yUK1512568456",
  "s3_pdf_download_url": "https://s3.amazonaws.com/xxx/xxxxx.pdf",
  "template_id": "JwIvKHHfW81493594388",
  "tracking_id": "D6RkEV1yUK1512568456",
  "request_id": "P4g4R0nmkY1652897359",
  "received_at": 1510127625,
  "signed_at": 1510127615,
  "note": "",
  "ip": "1.1.1.1",
  "tags": ["tag1", "tag2"],
  "reference_number": "168915918B",
  "geolocation": {
      "accuracy": 5,
      "latitude": "137.785834",
      "longitude": "-22.406417"
  },
   "device": {
      "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
      "username": "a",
      "id": "opZTzJP2gI1504892592",
      "device_name": "Jing's iPhone",
      "identifier": ""
  }
}

Properties

Name Type Required Description
id string true waiver id
template_id string true template id
template_title string true template title
template_version string true template version
has_pdf boolean true true if the PDF is available to download
geolocation GeoLocation false signing location
received_at integer true server received timestamp, should be 0 if waiver status is not approved
signed_at integer true waiver signed timestamp
pictures [Picture] false attached pictures
data [Field] true filled fields
device Device false signing device
note string true waiver note
tags [string] true waiver tags
ip string false ip
request_id string false waiver request id, should be '' if not exists
tracking_id string false waiver tracking id, should be '' if not exists
status string true waiver status, possible values pending, approved, revoked
s3_pdf_download_url string true waiver pdf download url, this url only valid for 30 seconds
reference_number string false waiver reference number

Event

{
  "type": "pdf_generated",
  "content_type": "waiver",
  "content": {
  "id": "zZ613txA741510127626",
  "has_pdf": true,
  "pictures": [
    {
      "id": "picture id",
      "title": "Your Photo",
      "timestamp": 1510127609
    }
  ],
  "data": [
    {
      "id": 1,
      "value": "HF",
      "type": "initial_field",
      "title": "please input your initials"
    },
    {
      "id": 2,
      "first_name": "first",
      "middle_name": "",
      "last_name": "",
      "value": "first m last",
      "title": "Please fill in your name",
      "type": "name_field"
    },
    {
      "id": 3,
      "title": "Please fill in your email",
      "value": "gh@me.com",
      "type": "email_field"
    },
    {
      "id": 4,
      "value": "1 851-234-5678",
      "title": "Please fill in your phone number",
      "type": "phone_field"
    },
    {
      "id": 5,
      "state": "TX",
      "first_line": "No 123",
      "value": "No 123 TX, USA",
      "type": "address_field",
      "country": "USA",
      "title": "Please fill in your address",
      "zipcode": "123456",
      "second_line": "",
      "city": ""
    },
    {
      "id": 6,
      "value": "18",
      "title": "Please fill in your age",
      "type": "age_field"
    },
    {
      "id": 7,
      "type": "date_field",
      "title": "Please fill date",
      "value": "2017-11-8",
      "year": "2017",
      "month": "11",
      "day": "8"
    },
    {
      "id": 8,
      "type": "checkbox_field",
      "title": "Text to agree on",
      "value": "checked"
    },
    {
      "id": 9,
      "value": "Ghosts ",
      "title": "Your fav team",
      "type": "short_answer_field"
    },
    {
      "id": 10,
      "value": "Femal",
      "title": "Male or Female",
      "type": "single_choice_field"
    },
    {
      "id": 11,
      "value": ["Magazine", "Trip advisor"],
      "title": "Where did you hear about us? (Gain market insight!)",
      "type": "multiple_choice_field"
    },
    {
      "id": 12,
      "type": "container_field",
      "title": "please enter your minors' information",
      "result_list": [
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C1 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C1 gh@me.com",
            "type": "email_field"
          }
        ],
        [
          {
            "id": 1,
            "first_name": "first",
            "middle_name": "",
            "last_name": "",
            "value": "C2 first m last",
            "title": "Please fill in your name",
            "type": "name_field"
          },
          {
            "id": 2,
            "title": "Please fill in your email",
            "value": "C2 gh@me.com",
            "type": "email_field"
          }
        ]
      ]
    }
  ],
  "template_title": "Bike Rental Waiver",
  "template_id": "JwIvKHHfW81493594388",
  "tracking_id": "D6RkEV1yUK1512568456",
  "received_at": 1510127625,
  "signed_at": 1510127615,
  "geolocation": {
      "accuracy": 5,
      "latitude": "137.785834",
      "longitude": "-22.406417"
  },
   "device": {
      "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
      "username": "a",
      "id": "opZTzJP2gI1504892592",
      "device_name": "Jing's iPhone",
      "identifier": ""
  },
  "note": "",
  "tags": ["tag1", "tag2"],
  "ip": "1.1.1.1",
  "status": "approved"
}
}

Properties

Name Type Required Description
type string true event type
content_type string true content type. only support waiver now.
content Waiver true waiver content

Field Types

Property Value
» type name_field
» type email_field
» type phone_field
» type age_field
» type initial_field
» type date_field
» type address_field
» type checkbox_field
» type short_answer_field
» type single_choice_field
» type multiple_choice_field
» type container_field

NameField

{
  "id": 1,
  "first_name": "first",
  "middle_name": "m",
  "last_name": "last",
  "value": "first m last",
  "title": "Please fill in your name",
  "type": "name_field",
  "format": "0"
}

Properties

Name Type Required Description
id integer true field id
title string true name field title
value string true display value
type string true always "name_field"
first_name string true first name
last_name string true last name
middle_name string false middle name (optional)
full_name string false fill name (optional)
format string true 0-[first_name+middle_name+last_name]; 1-[last_name+middle_name+first_name]; 2-[full_name];

EmailField

{
  "id": 1,
  "title": "Please fill in your email",
  "value": "demo@example.com",
  "type": "email_field"
}

Properties

Name Type Required Description
id integer true field id
title string true email field title
value string true filled email
type string true always "email_field"

PhoneField

{
  "id": 1,
  "value": "1 408-123-5678",
  "title": "Please fill in your phone number",
  "type": "phone_field"
}

Properties

Name Type Required Description
id integer true field id
title string true phone field title
value string true filled phone
type string true always "phone_field"

InitialField

{
  "id": 1,
  "value": "HF",
  "type": "initial_field",
  "title": "please input your initials"
}

Properties

Name Type Required Description
id integer true field id
title string true initial field
value string true initialed value
type string true always "initial_field"

AgeField

{
  "id": 1,
  "title": "Please fill in your age",
  "value": "17",
  "type": "age_field"
}

Properties

Name Type Required Description
id integer true field id
title string true age field title
value string true filled age
type string true always "age_field"

CheckBoxField

{
  "id": 1,
  "title": "Text to agree on",
  "value": "checked",
  "checked": true,
  "type": "checkbox_field"
}

Properties

Name Type Required Description
id integer true field id
title string true checkbox field
value string true checked value
checked boolean true true / false
type string true always "checkbox_field"

ShortAnswerField

{
  "id": 1,
  "title": "Your fav team",
  "value": "Mavericks",
  "type": "short_answer_field"
}

Properties

Name Type Required Description
id integer true field id
title string true short answer field title
value string true filled answer
type string true always "short_answer_field"

AddressField

{
  "id": 1,
  "state": "TX",
  "first_line": "No 123",
  "value": "No 123 TX, USA",
  "type": "address_field",
  "country": "USA",
  "title": "Please fill in your address",
  "zipcode": "123456",
  "second_line": "",
  "city": ""
}

Properties

Name Type Required Description
id integer true field id
title string true address field title
value string true display value
type string true always "address_field"
first_line string false first line
second_line string false second line
city string true city
state string true state or province
country string false country
zipcode string true zipcode or postal code

DateField

{
  "id": 1,
  "type": "date_field",
  "title": "Please fill date",
  "value": "2017-11-8",
  "year": "2017",
  "month": "11",
  "day": "8"
}

Properties

Name Type Required Description
id integer true field id
title string true date field
value string true selected date
type string true always "date_field"
year string true year of the date
month string true month of the date
day string true day of the date

SingleChoiceField

{
  "id": 1,
  "value": "Femal",
  "title": "Male or Female",
  "type": "single_choice_field"
}

Properties

Name Type Required Description
id integer true field id
title string true choice field title
value string true selected choice
type string true always "single_choice_field"

MultipleChoiceField

{
  "id": 1,
  "value": ["Magazine", "Trip advisor"],
  "title": "Where did you hear about us? (Gain market insight!)",
  "type": "multiple_choice_field"
}

Properties

Name Type Required Description
id integer true field id
title string true choice field title
value [string] true selected choices
type string true always "multiple_choice_field"

ContainerField

{
  "id": 1,
  "title": "string",
  "type": "container_field",
  "result_list": [
    // a list of ordinary fields set
  ]
}

Properties

Name Type Required Description
id integer true field id
title string true container field title
type string true always "container_field"
result_list [Field] true a list of ordinary fields set

Picture

{
  "title": "Your Photo",
  "id": "picture id",
  "timestamp": 1510127609
}

Properties

Name Type Required Description
title string true picture title
id string true picture id
timestamp integer true created timestamp

GeoLocation

{
  "accuracy": 5,
  "latitude": "37.785834",
  "longitude": "-122.406417"
}

Properties

Name Type Required Description
accuracy integer true location accuracy level in meters
latitude string true latitude value
longtitude string true longtitude value

Device

{
    "device_model": "iPhone 5 (GSM CDMA)(9.3.5)",
    "username": "a",
    "id": "opZTzJP2gI1504892592",
    "device_name": "Jing's iPhone",
    "identifier": ""
}

Properties

Name Type Required Description
id string true device id
device_name string true device name
device_model string true device model
username string false username
identifier string true device identifier. should always be an empty string

WaiverRequest

 {
    "id": "B7Z3Z5pymj1594862535",
    "note": "note",
    "size": 10,
    "datetime": 1594862535,
    "template_id": "",
    "request_link": "https://app.waiverforever.com/requested_waiver_group/B7Z3Z5pymj1594862535",
    "contact_info": "c info",
    "type": "normal",
    "status": "collecting",
    "accepted_count": 0,
    "submitted_count": 0,
    "name": "open api created 2",
    "waivers": [
        {
            "id": "zZ613txA741510127626",
            "status": "approved",
            "has_pdf": true,
            "pictures": [
                {
                    "id": "picture id",
                    "title": "Your Photo",
                    "timestamp": 1510127609
                }
            ],
            "data": [
                {
                    "id": 1,
                    "value": "HF",
                    "type": "initial_field",
                    "title": "please input your initials"
                },
                {
                    "id": 2,
                    "first_name": "first",
                    "middle_name": "",
                    "last_name": "",
                    "value": "first m last",
                    "title": "Please fill in your name",
                    "type": "name_field"
                },
                {
                    "id": 3,
                    "title": "Please fill in your email",
                    "value": "gh@me.com",
                    "type": "email_field"
                },
                {
                    "id": 4,
                    "value": "1 851-234-5678",
                    "title": "Please fill in your phone number",
                    "type": "phone_field"
                },
                {
                    "id": 5,
                    "state": "TX",
                    "first_line": "No 123",
                    "value": "No 123 TX, USA",
                    "type": "address_field",
                    "country": "USA",
                    "title": "Please fill in your address",
                    "zipcode": "123456",
                    "second_line": "",
                    "city": ""
                },
                {
                    "id": 6,
                    "value": "18",
                    "title": "Please fill in your age",
                    "type": "age_field"
                },
                {
                    "id": 7,
                    "type": "date_field",
                    "title": "Please fill date",
                    "value": "2017-11-8",
                    "year": "2017",
                    "month": "11",
                    "day": "8"
                },
                {
                    "id": 8,
                    "type": "checkbox_field",
                    "title": "Text to agree on",
                    "value": "checked"
                },
                {
                    "id": 9,
                    "value": "Ghosts ",
                    "title": "Your fav team",
                    "type": "short_answer_field"
                },
                {
                    "id": 10,
                    "value": "Femal",
                    "title": "Male or Female",
                    "type": "single_choice_field"
                },
                {
                    "id": 11,
                    "value": [
                        "Magazine",
                        "Trip advisor"
                    ],
                    "title": "Where did you hear about us? (Gain market insight!)",
                    "type": "multiple_choice_field"
                },
                {
                    "id": 12,
                    "type": "container_field",
                    "title": "please enter your minors' information",
                    "result_list": [
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C1 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C1 gh@me.com",
                                "type": "email_field"
                            }
                        ],
                        [
                            {
                                "id": 1,
                                "first_name": "first",
                                "middle_name": "",
                                "last_name": "",
                                "value": "C2 first m last",
                                "title": "Please fill in your name",
                                "type": "name_field"
                            },
                            {
                                "id": 2,
                                "title": "Please fill in your email",
                                "value": "C2 gh@me.com",
                                "type": "email_field"
                            }
                        ]
                    ]
                }
            ],
}

Properties

Name Type Required Description
id string true request id
name string true request name
size int true request size
note string true request note
type string true request type. possible values normal, anonymous
contact_info string true contact info
template_id string true template id of waiver request
status string true request status. possible values collecting, accepted
request_link string true request share link
datetime int true created timestamp
accepted_count int true user accepted count
submitted_count int true user submitted count
waivers [Waiver] false waiver list

WaiverTrackingResponse

{
  "page": 1,
  "per_page": 10,
  "count": 2,
  "trackings": [
    {
      "human_name": "xx@xx.com",
      "status": "open",
      "tracking_id": "t0QmIZCMeY1673829942",
      "send_result": True,
      "email": "xx@xx.com"
    },
    {
      "human_name": "",
      "status": "open",
      "tracking_id": "nWOEDdxyZI1673831842",
      "send_result": True,
      "email": "xx@xx.com"
    }
  ]
}

Properties

Name Type Required Description
count int true count
per_page int true per page
data WaiverTracking true track list

WaiverTracking

 {
    "tracking_id": "B7Z3Z5pymj1594862535",
    "status": "normal",
    "email": "xx@gmail.com",
    "human_name": "name",
    "send_result": True,
}

Properties

Name Type Required Description
tracking_id string true tracking id
status string true status
email string true email
human_name string true human_name
send_result boolean true send_result