Introduction

WaiverStevie is a service that allows you to request and collect electronic signatures (among other things) from your users on PDF documents.

Crucially, WaiverStevie includes a simple, fluent API for integrating electronic signatures directly into your application. If you have any issues with the platform please email info@waiverstevie.com for support.

Coming Soon

Better docs are coming soon. Also, more endpoints. Right now, there is a public API for requesting signatures (sending envelopes), and fetching signers (and their statuses) for any of your forms. We also support webhooks for when people sign, and when forms are fully signed.

We'll expose an API for setting webhooks programmatically by early July 2020.

Finally, We're currently extracting our annotation feature (creating points to sign on any PDFs) and will extend our points API so that you can completely annotate documents within your own system. This will eliminate the need for the dashboard entirely for our whitelabeling clients.

Registering

To create an account, please visit Signup. All plans come with an API key.

API

Authentications

All API requests need the api_key query parameter to be set. You can find your key by logging in and grabbing it from your dashboard. Just click the visibility icon on the top left.

Requesting a signature (Adding a signer)

You'll need to login and upload any documents that you'd like to have signed. Afer uploading a document, you can assign the places where you'd like your users to sign. Additionally, WaiverStevie supports adding 'Date' annotations which are autofilled, and 'Custom Fields' which signers can fill out themselves.

Additionally, you can add multiple signers to a document! Say two people need to sign an NDA, or three people a lease- just use the + button (pictured below). Note, you can't add more signers if previous signers don't have any annotations, nor can you save if anyone has none.

Collecting signatures

The 'Send Envelope' button allows you to mail your document directly to new signers. Since documents may have multiple signers, the number of emails you will have to enter corresponds to the number of signers. You may attach a nickname to a group of signers (or signer) so that it's easier to track.

To send a document via the API, click the visibility button next to your API Key (top left corner). Then, each document will have an endpoint in the panel. The second URL next to 'POST' is for creating new signers- that is, requesting signatures / sending envelopes. You'll also see an example request body. Since the number of signers you are sending to should match the number of signers on a form, the body is variable. It looks something like this:

                                {
                                    "nickname" : "Optional Nickname for this group",
                                    "send_email" : true, 
                                    "signers" : [
                                        {
                                            "email" : "johnsmith1@gmail.com",
                                            "first_name" : "John",
                                            "last_name" : "Smith"
                                        },
                                        {
                                            "email" : "johnsmith2@gmail.com",
                                            "first_name" : "John",
                                            "last_name" : "Smith II"
                                        },
                                    ]
                                }
                            

This would be a valid request body IF the document had annotations added for exactly two signers.

The 'send_email' option allows you to disable / enable WaiverStevie's automatic emailing feature, where documents are emailed to each signer as they are signed. If set to false, you'll need to handle delivering the signer URLs to your users

The response for this request would look something like this:

                                {
                                    "id": "XD6Nzr00QrpW7x",
                                    "resource_url": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains/XD6Nzr00QrpW7x?api_key=AKkb6BgG2iXDpWCzjZ3Vq7FOR79jtzDuP2G1fYcoJz",
                                    "signers": [
                                        {
                                            "created_at": "2020-04-28 03:36:34",
                                            "updated_at": "2020-04-28 03:36:34",
                                            "email" : "johnsmith1@gmail.com",
                                            "first_name" : "John",
                                            "last_name" : "Smith",
                                            "signed_pdf": null,
                                            "signer_number": 1,
                                            "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/XD6Nzr00QrpW7x/signer/jackconsidine3@gmail.com/gqDasdfpdQs5IWwTqU",
                                            "id": "GwKeLgQ9dg2mlv",
                                            "has_signed": false
                                        },
                                        {
                                            "created_at": "2020-04-28 03:36:34",
                                            "updated_at": "2020-04-28 03:36:34",
                                            "email" : "johnsmith2@gmail.com",
                                            "first_name" : "John",
                                            "last_name" : "Smith II",
                                            "signed_pdf": null,
                                            "signer_number": 2,
                                            "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/XD6Nzr00QrpW7x/signer/jack.considine3@gmail.com/HX6kxlcvzJjTkxtfyHrk",
                                            "id": "2xqBK1E2o5WzOb",
                                            "has_signed": false
                                        }
                                    ],
                                    "created_at": "2020-04-28 03:36:34",
                                    "updated_at": "2020-04-28 03:36:34",
                                    "nickname": "Optional Nickname for this group",
                                    "should_email": true
                                }
                            

If I had opted to handle the notification flow on my own (i.e. set "should_email" to false), I could use distribute the URL for each signer Note though: signatures are meant to be collected *consecutively* so the second signers url will not be activated until the first person signs. If you need to manage the notification flow on your own, use webhooks to determine when a user signs, and then distribute the subsequent link.

Fetching Signatures

You can list all signature chains (signers executing the same document) for a form, with the endpoint listed in that form's panel (which is /api/v2/forms/<FORM_ID>/signature-chains)

This endpoint returns a paginated list of chains + all nested signers in the "data" attribute. Links to the next or previous pages (if applicable) are also returned. Here's an example response

                                {
                                    "current_page": 1,
                                    "data": [
                                        {
                                            "id": "WMvAl12A3g8mGP",
                                            "resource_url": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains/WMvAl12A3g8mGP?api_key=AKkb6BgG2iXDpWCzjZ3Vq7FOR79jtzDuP2G1fYcoJz",
                                            "signers": [
                                                {
                                                    "created_at": "2020-04-27 22:07:57",
                                                    "updated_at": "2020-04-27 22:13:17",
                                                    "email": "jackconsidine3@gmail.com",
                                                    "first_name": "John",
                                                    "last_name": "Considine",
                                                    "signed_pdf": "https://app.waiverstevie.com/preview/bPR2KrAPP5yQZ6/Z91D8lVU4s0UmdbT",
                                                    "signer_number": 1,
                                                    "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/WMvAl12A3g8mGP/signer/jackconsidine3@gmail.com/Z91D8lVU4s0UmdbT",
                                                    "id": "dGY6Ngakp5KXzy",
                                                    "has_signed": true
                                                },
                                                {
                                                    "created_at": "2020-04-27 22:07:57",
                                                    "updated_at": "2020-04-27 22:17:38",
                                                    "email": "jconsidi@nd.edu",
                                                    "first_name": "James",
                                                    "last_name": "Vidale",
                                                    "signed_pdf": "https://app.waiverstevie.com/preview/W0xzkr47054oX3/VIBIgW7idW3pTPKk",
                                                    "signer_number": 2,
                                                    "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/WMvAl12A3g8mGP/signer/jconsidi@nd.edu/VIBIgW7idW3pTPKk",
                                                    "id": "vmn8VrWMj1BOW2",
                                                    "has_signed": true
                                                }
                                            ],
                                            "should_email": true,
                                            "is_complete": true,
                                            "nickname": "Test Friends",
                                            "updated_at": "2020-04-27 22:17:38",
                                            "created_at": "2020-04-27 22:07:57"
                                        },
                                        {
                                            "id": "y7XeY5dmOrOWRx",
                                            "resource_url": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains/y7XeY5dmOrOWRx?api_key=AKkb6BgG2iXDpWCzjZ3Vq7FOR79jtzDuP2G1fYcoJz",
                                            "signers": [
                                                {
                                                    "created_at": "2020-04-27 17:58:14",
                                                    "updated_at": "2020-04-27 17:58:14",
                                                    "email": "jackconsidine3@gmail.com",
                                                    "first_name": "John",
                                                    "last_name": "Smith I",
                                                    "signed_pdf": null,
                                                    "signer_number": 1,
                                                    "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/y7XeY5dmOrOWRx/signer/jackconsidine3@gmail.com/4q9kWrOW00dk0nAq",
                                                    "id": "oR0mnrzDv142Nj",
                                                    "has_signed": false
                                                },
                                                {
                                                    "created_at": "2020-04-27 17:58:14",
                                                    "updated_at": "2020-04-27 17:58:14",
                                                    "email": "jack.considine3@gmail.com",
                                                    "first_name": "John",
                                                    "last_name": "Smith II",
                                                    "signed_pdf": null,
                                                    "signer_number": 2,
                                                    "url": "https://app.waiverstevie.com/web/api/v1/signature-chain/y7XeY5dmOrOWRx/signer/jack.considine3@gmail.com/E0o7B3Kn8It0ATIl",
                                                    "id": "QDG84gVxG5Pad2",
                                                    "has_signed": false
                                                }
                                            ],
                                            "should_email": true,
                                            "is_complete": false,
                                            "nickname": "Optional Nickname for this group",
                                            "updated_at": "2020-04-27 17:58:14",
                                            "created_at": "2020-04-27 17:58:14"
                                        }
                                    ],
                                    "first_page_url": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains?page=1",
                                    "from": 1,
                                    "last_page": 1,
                                    "last_page_url": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains?page=1",
                                    "next_page_url": null,
                                    "path": "https://app.waiverstevie.com/api/v2/forms/Ax4YjrYErEXbVM/signature-chains",
                                    "per_page": 15,
                                    "prev_page_url": null,
                                    "to": 2
                                    "total": 2
                                }
                            

Webhooks

It's often necessary for your system to be notified of events without polling. You can configure WaiverStevie to send a HTTP request to your server when a document is signed, as well as when a document is completely executed- that is all signers sign a document. Simply click the "Edit Form Webhooks" button and enter the URLs. The payloads are look like:

                                // Form Signed
                                {
                                    "signed_by": {
                                    "email": "johnsmith@email.com",
                                        "first_name": "John",
                                        "last_name": "Smith"
                                    },
                                    "status": "FORM_SIGNED",
                                    "breadcrumb": "https://app.waiverstevie.com/breadcrumb", // copy of signature
                                    "signers_left": 1,
                                    "signers_done": 1,
                                    "chain_id": "MNBiughasd",
                                    "form_id": "xzcvIUSFDkj"
                                }
                            
                                // Form Executed
                                {
                                    "status": "FORM_EXECUTED",
                                    "completed_document": "https://app.waiverstevie.com/doc",
                                    "signers_done": 2,
                                    "chain_id": "MNBiughasd",
                                    "form_id": "xzcvIUSFDkj
                                }
                            

Both Webhook types are delivered via POST request

You can access a copy of an incomplete document via the "breadcrumb" attribute in the "signed" webhook. You can access the completed document in the "completed_document" attribute of the "executed" payload.