NAV Navbar
curl Node.js Ruby Python
  • WaiverForever OpenAPI
  • Authentication
  • Auth Endpoints
  • Webhooks Endpoints
  • Template Endpoints
  • Waiver Endpoints
  • Schemas
  • 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_signed 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.

    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_signed`          |                                   |
    |                                   |<----------------------------------|
    |                                   |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 /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_signed Waiver a new waiver is signed

    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

    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 /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"
      }]
    }
    

    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_signed"
    }'
    
    const fetch = require('node-fetch');
    const inputBody = `{
      'target_url': '',
      'template_id': '',
      'event': 'new_waiver_signed'
    }`;
    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));
    
    require 'rest-client'
    require 'json'
    
    headers = {
      'Content-Type' => 'application/json',
      'Accept' => 'application/json',
      'X-Api-Key' => '<api_key>'
    }
    
    params = {
      'event' => 'new_waiver_signed',
      'template_id' => '',
      'target_url' => ''
    }
    
    
    result = RestClient.post 'https://api.waiverforever.com/openapi/v1/webhooks/', params.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_signed'
    }
    
    r = requests.post('https://api.waiverforever.com/openapi/v1/webhooks/', json=data, headers=headers)
    
    print r.json()
    
    

    POST /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 /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 /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

    Requeset 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 /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)

    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)

    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
    has_pdf boolean true true if the PDF is available to download
    geolocation GeoLocation false signing location
    received_at integer true server received timestamp
    signed_at integer true waiver signed timestamp
    pictures [Picture] false attached pictures
    data [Field] true filled fields
    device Device false signing device
    ip string false ip

    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 /waiver/{waiver_id}

    Get a signed waiver

    Parameters

    Parameter In Type Required Description
    waiver_id path string true waiver id

    Example responses

    {
      "id": "zZ613txA741510127626",
      "has_pdf": true,
      "pictures": [
        {
          "id": "picture id",
          "title": "Your Photo",
          "timestamp": 1510127609
        }
      ],
      "data": [
        {
          "value": "HF",
          "type": "initial_field",
          "title": "please input your initials"
        },
        {
          "first_name": "first",
          "middle_name": "",
          "last_name": "",
          "value": "first m last",
          "title": "Please fill in your name",
          "type": "name_field"
        },
        {
          "title": "Please fill in your email",
          "value": "gh@me.com",
          "type": "email_field"
        },
        {
          "value": "1 851-234-5678",
          "title": "Please fill in your phone number",
          "type": "phone_field"
        },
        {
          "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": ""
        },
        {
          "value": "18",
          "title": "Please fill in your age",
          "type": "age_field"
        },
        {
          "type": "date_field",
          "title": "Please fill date",
          "value": "2017-11-8",
          "year": "2017",
          "month": "11",
          "day": "8"
        },
        {
          "type": "checkbox_field",
          "title": "Text to agree on",
          "value": "checked"
        },
        {
          "value": "Ghosts ",
          "title": "Your fav team",
          "type": "short_answer_field"
        },
        {
          "value": "Femal",
          "title": "Male or Female",
          "type": "single_choice_field"
        },
        {
          "value": ["Magazine", "Trip advisor"],
          "title": "Where did you hear about us? (Gain market insight!)",
          "type": "multiple_choice_field"
        },
        {
          "type": "container_field",
          "title": "please enter your minors' information",
          "result_list": [
            [
              {
                "first_name": "first",
                "middle_name": "",
                "last_name": "",
                "value": "C1 first m last",
                "title": "Please fill in your name",
                "type": "name_field"
              },
              {
                "title": "Please fill in your email",
                "value": "C1 gh@me.com",
                "type": "email_field"
              }
            ],
            [
              {
                "first_name": "first",
                "middle_name": "",
                "last_name": "",
                "value": "C2 first m last",
                "title": "Please fill in your name",
                "type": "name_field"
              },
              {
                "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": "0D84EB79-68F5-4BAD-9344-262D3882C830"
      }
    }
    

    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 /waiver/tracking_id/{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

    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 /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}/pictures/{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}/pictures/{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}/pictures/{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}/pictures/{picture_id}', params={
    }, headers=headers)
    
    print r.content
    
    

    GET /waiver/{waiver_id}/pictures/{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>'
    }
    
    params = {
      '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', params.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 /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>"
    }
    

    Parameters

    Parameter In Type Required Description
    body body object true search conditions.
    » search_term body string true 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

    Example responses

    {
        "data": {
            "waivers": [
                {
                    "signed_at": 1461130513,
                    "device": null,
                    "template_title": null,
                    "template_id": "igcJYpG2KT1381868360",
                    "tracking_id": "",
                    "has_pdf": true,
                    "id": "ChPV4IMuVm1461130523",
                    "geolocation": {},
                    "pictures": [],
                    "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

    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

    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

    Waiver

    {
      "id": "zZ613txA741510127626",
      "has_pdf": true,
      "pictures": [
        {
          "id": "picture id",
          "title": "Your Photo",
          "timestamp": 1510127609
        }
      ],
      "data": [
        {
          "value": "HF",
          "type": "initial_field",
          "title": "please input your initials"
        },
        {
          "first_name": "first",
          "middle_name": "",
          "last_name": "",
          "value": "first m last",
          "title": "Please fill in your name",
          "type": "name_field"
        },
        {
          "title": "Please fill in your email",
          "value": "gh@me.com",
          "type": "email_field"
        },
        {
          "value": "1 851-234-5678",
          "title": "Please fill in your phone number",
          "type": "phone_field"
        },
        {
          "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": ""
        },
        {
          "value": "18",
          "title": "Please fill in your age",
          "type": "age_field"
        },
        {
          "type": "date_field",
          "title": "Please fill date",
          "value": "2017-11-8",
          "year": "2017",
          "month": "11",
          "day": "8"
        },
        {
          "type": "checkbox_field",
          "title": "Text to agree on",
          "value": "checked"
        },
        {
          "value": "Ghosts ",
          "title": "Your fav team",
          "type": "short_answer_field"
        },
        {
          "value": "Femal",
          "title": "Male or Female",
          "type": "single_choice_field"
        },
        {
          "value": ["Magazine", "Trip advisor"],
          "title": "Where did you hear about us? (Gain market insight!)",
          "type": "multiple_choice_field"
        },
        {
          "type": "container_field",
          "title": "please enter your minors' information",
          "result_list": [
            [
              {
                "first_name": "first",
                "middle_name": "",
                "last_name": "",
                "value": "C1 first m last",
                "title": "Please fill in your name",
                "type": "name_field"
              },
              {
                "title": "Please fill in your email",
                "value": "C1 gh@me.com",
                "type": "email_field"
              }
            ],
            [
              {
                "first_name": "first",
                "middle_name": "",
                "last_name": "",
                "value": "C2 first m last",
                "title": "Please fill in your name",
                "type": "name_field"
              },
              {
                "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": "0D84EB79-68F5-4BAD-9344-262D3882C830"
      },
      "ip": "1.1.1.1"
    }
    

    Properties

    Name Type Required Description
    id string true waiver id
    template_id string true template id
    template_title string true template title
    has_pdf boolean true true if the PDF is available to download
    geolocation GeoLocation false signing location
    received_at integer true server received timestamp
    signed_at integer true waiver signed timestamp
    pictures [Picture] false attached pictures
    tracking_id string false tracking id
    data [Field] false filled fields
    ip string false ip

    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

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

    Properties

    Name Type Required Description
    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)

    EmailField

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

    Properties

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

    PhoneField

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

    Properties

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

    InitialField

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

    Properties

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

    AgeField

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

    Properties

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

    CheckBoxField

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

    Properties

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

    ShortAnswerField

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

    Properties

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

    AddressField

    {
      "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
    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

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

    Properties

    Name Type Required Description
    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

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

    Properties

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

    MultipleChoiceField

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

    Properties

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

    ContainerField

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

    Properties

    Name Type Required Description
    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": "0D84EB79-68F5-4BAD-9344-262D3882C830"
    }
    

    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