321Forms RESTFul Service

RESTFul Service for the 321Forms Onboarding Platform

Version 0 (deprecated)

Service Entry Point(s)

PRODUCTION

https://www.321forms.com/CB

STAGING

https://sandbox.321forms.com/CB

API Return Formats

This service can detect the incoming resource extension in order to provide to you the resource represented according to the extension:

resource.json

Service Extension Detection: Yes
Allowed Extensions: json
Throw On Invalid Extension: Yes

API Global Headers

Header Type Required Default Description
Authorization string true NSA SHA-1 Encrypted Header (for information on how to create the Authorization Header, scroll to the Creating Acceptable Headers section of the document
Username string true Username of individual responsible for the call.
SentDate string true UTC Timestamp request of when header was created. The call will not be accepted if this timestamp is more than 10 minutes old
Action string true REST action type.

Resource Definitions

The following are all the resources defined in the 321Forms RESTFul Service API

api/company

Returns a list of companies that the user can access

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company.json
Route Pattern has no Placeholders
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
partial string false searchable partial name of the company
offset integer false 0 query search offset
limit integer false 10 (max:50) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when the request was successful.

[
    {
        "name": "Fake Company 1",
        "id": 7
    },
    {
        "name": "Another Fake Company",
        "id": 9
    },
    {
        "name": "Final Fake Company",
        "id": 11
    }
]

api/company/:companyID/:userType

List array of users in a company {:companyID} based on {:userType} Provided. Will only show users that the requesting account is allowed to manage

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company/:companyID/:userType.json
Placeholder Type Required Default Description
:companyID integer true ID of company of which search is being performed
:userType string true role of users to be searched
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
offset integer false 0 query search offset
limit integer false 10 (max:50) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when {:userType} is employee and the request was successful.

[
    {
        "first_name": "John",
        "role": "employee",
        "id": 1,
        "username": "john",
        "date_created": "March, 05 2013 16:10:19",
        "active": 1,
        "deactive_date": "",
        "last_name": "321forms",
        "email_address": "",
        "division_id": 14
    },
    {
        "first_name": "Ehan",
        "role": "employee",
        "id": 2,
        "username": "ehanjones",
        "date_created": "September, 26 2014 12:09:18",
        "active": 0,
        "deactive_date": "October, 16 2014 00:00:00",
        "last_name": "Jones",
        "email_address": "[email protected]",
        "division_id": 10
    }
]

api/company/:companyID/complete

Returns a list of 100% onboarded users in the provided company {:companyID}. Sorted by latest approved form date (provided in response as 'utc_latest_approved_date')

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company/:companyID/complete.json
Placeholder Type Required Default Description
:companyID integer true ID of company of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
offset integer false 0 query search offset
limit integer false 10 (max:50) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when the company has employees that are 100% complete

[
    {
        "percent_total": 100,
        "progress_towards_completion": 3,
        "username": "myUserName1",
        "approved_forms": 1,
        "total_possible": 3,
        "total_assigned": 1,
        "submitted_forms": 1,
        "household_progress": 1,
        "utc_latest_approved_date": "March, 02 2015 20:03:00",
        "division_id": 2,
        "is_active": 1
    },
    {
        "percent_total": 100,
        "progress_towards_completion": 3,
        "username": "myUserName2",
        "approved_forms": 1,
        "total_possible": 3,
        "total_assigned": 1,
        "submitted_forms": 1,
        "household_progress": 1,
        "utc_latest_approved_date": "March, 01 2015 16:04:00",
        "division_id": 2,
        "is_active": 1
    }
]

api/company/:companyID/forms

Returns an array of the company's forms. This will be used when selecting the forms to provide for a new hire

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company/:companyID/forms.json
Placeholder Type Required Default Description
:companyID integer true ID of company of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

Response Default Response Format: json

Samples

An array of forms and their IDs can be retrieved for a company.

[
    {
        "id": 1,
        "description": "A custom form built specifically for your company",
        "name": "Your Custom Form"
    },
    {
        "id": 2,
        "description": "This is another form that we have custom-built for your company",
        "name": "Another Customer Form"
    }
]

api/company/:companyID/form/:formID

Returns an array of form questions and an object with the basic details of the form itself

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company/:companyID/form/:formID.json
Placeholder Type Required Default Description
:companyID integer true ID of company of which search is being performed
:formID integer true ID of form of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
type string false questions Type of response to return. Choices: questions,pdf
Response Default Response Format: json

Samples

The following will be returned when a valid company/form ID combo have been processed

{
    "form_questions": [
        {
            "special_format": "",
            "max_value": "",
            "question_type": "textarea",
            "choices": [],
            "question_text": "Last Name (without suffix):",
            "question_number": 0,
            "max_length": 255,
            "min_value": ""
        },
        {
            "special_format": "",
            "max_value": "",
            "question_type": "textarea",
            "choices": [],
            "question_text": "Birth Date:",
            "question_number": 0,
            "max_length": 10,
            "min_value": ""
        },
        {
            "special_format": "",
            "max_value": "",
            "question_type": "radio buttons",
            "choices": [
                true,
                false
            ],
            "question_text": "Have you worked for this company before?",
            "question_number": 0,
            "max_length": "",
            "min_value": ""
        }
    ],
    "form_details": {
        "id": 0,
        "description": "Custom Questionnaire Description",
        "name": "Custom Questionnaire"
    }
}

The following will be returned when param[type] == 'pdf'

{
	"base_64_blank_form":"[URL ENCODED BASE64 DATA]",
	"form_details":{
		"id":0000,
		"description":"Calculates income withheld for federal taxes.",
		"name":"W-4 - 2015"
	}
}

api/company/:companyID/divisions

Returns a structure containing two elements. the companyID provided and an array of divisions

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/company/:companyID/divisions.json
Placeholder Type Required Default Description
:companyID integer true ID of company of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

Response Default Response Format: json

Samples

The following will be returned when this method is requested successfully.

{
    "divisions": [
        {
            "name": "First Division",
            "id": 9
        },
        {
            "name": "Second Division",
            "id": 10
        }
    ],
    "companyID": 1
}

api/division/:divisionID/:userType

Returns a list of users for a given division. Response format is the same as 'api/company/:companyID/:userType'

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/division/:divisionID/:userType.json
Placeholder Type Required Default Description
:divisionID integer true ID of division of which search is being performed
:userType string true role of users to be searched
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
offset integer false 0 query search offset
limit integer false 10 (max:50) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when {:userType} is employee and the request was successful.

[
    {
        "first_name": "John",
        "role": "employee",
        "id": 1,
        "username": "john",
        "date_created": "March, 05 2013 16:10:19",
        "active": 1,
        "deactive_date": "",
        "last_name": "321forms",
        "email_address": "",
        "division_id": 14
    },
    {
        "first_name": "Ehan",
        "role": "employee",
        "id": 2,
        "username": "ehanjones",
        "date_created": "September, 26 2014 12:09:18",
        "active": 0,
        "deactive_date": "October, 16 2014 00:00:00",
        "last_name": "Jones",
        "email_address": "[email protected]",
        "division_id": 10
    }
]

api/division/:divisionID/complete

Returns a list of 100% onboarded users in the provided division {:divisionID}. Sorted by latest approved form date (provided in response as 'utc_latest_approved_date')

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/division/:divisionID/complete.json
Placeholder Type Required Default Description
:divisionID integer true ID of division of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
offset integer false 0 query search offset
limit integer false 10 (max:50) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when the division has employees that are 100% complete

[
    {
        "percent_total": 100,
        "progress_towards_completion": 3,
        "username": "myUserName1",
        "approved_forms": 1,
        "total_possible": 3,
        "total_assigned": 1,
        "submitted_forms": 1,
        "household_progress": 1,
        "utc_latest_approved_date": "March, 02 2015 20:03:00",
        "division_id": 2,
        "is_active": 1
    },
    {
        "percent_total": 100,
        "progress_towards_completion": 3,
        "username": "myUserName2",
        "approved_forms": 1,
        "total_possible": 3,
        "total_assigned": 1,
        "submitted_forms": 1,
        "household_progress": 1,
        "utc_latest_approved_date": "March, 01 2015 16:04:00",
        "division_id": 2,
        "is_active": 1
    }
]

api/division/:divisionID/forms

Returns an array of the company's forms, with the additional information on which forms are 'selected_as_default' for a division. This will be used when selecting the forms to provide for a new hire. An employee that is to be placed within a certain division should have the defaults selected if provided

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/division/:divisionID/forms.json
Placeholder Type Required Default Description
:divisionID integer true ID of division of which search is being performed
HTTP Request Methods

Supported: GET
Default: GET

Response Default Response Format: json

Samples

An array of forms and their IDs can be retrieved for a company.

[
    {
        "id": 1,
        "name": "Your Custom Form",
        "description": "A custom form built specifically for your company",
        "selected_as_default": true
    },
    {
        "id": 2,
        "name": "Another Customer Form",
        "description": "This is another form that we have custom-built for your company",
        "selected_as_default": false
    }
]

api/users/:userID

Returns an individual user based on {:userID}.

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/users/:userID.json
Placeholder Type Required Default Description
:userID string true username of employee being searched
HTTP Request Methods

Supported: GET
Default: GET

Response Default Response Format: json

Samples

The following will be returned when the request was successful for a user you can manage.

{
    "first_name": "Testing",
    "id": 11,
    "username": "testingemployee",
    "active": true,
    "email_address": "[email protected]",
    "last_name": "Employee"
}

The following will be returned when the request was successful for your own account. In this case, the agency_id and site_id values refer to companyID and divisionID, respectively

{
    "roles": {
        "admin": [
            {
                "SITE_ID": "",
                "AGENCY_ID": ""
            }
        ],
        "reseller": [
            {
                "SITE_ID": "",
                "AGENCY_ID": 1
            }
        ],
        "hrAdmin": [
            {
                "SITE_ID": "",
                "AGENCY_ID": 2
            }
        ],
        "staff": [
            {
                "SITE_ID": 10,
                "AGENCY_ID": 3
            }
        ]
    },
    "first_name": "Testing",
    "id": 11,
    "username": "testinguser",
    "active": true,
    "email_address": "[email protected]",
    "last_name": "Employee"
}

api/users/:userID

Creates a new employee based on :userID

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/users/:userID.json
Placeholder Type Required Default Description
:userID string true username of employee being created
HTTP Request Methods

Supported: POST
Default: POST

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
firstName string true First name of New Employee
lastName string true Last name of New Employee
companyId integer true Company to place New Employee
emailAddress string false email addres of employee being created
sendActivationEmail boolean false Determine if you want an activation email to be automatically sent to the new employee. emailAddress field must be present for activation email to be sent
divisionId integer true Division to place New Employee
forms int[] true List of forms to provide to New Employee
isTest boolean false false if true, will not actually save the employee. Useful for testing structure of your JSON
responses object[] false Object of responses. Each object consists of {id:int} and {response:string} of question you will pre-populate for your new hire
Response Default Response Format: json

Samples

The following is a complete json request to the API.

{
	"companyID" : 1,
	"divisionID" : 5,
	"firstName" : "Jon",
	"lastName" : "Doe",
	"emailAddress" : "[email protected]",
	"forms" : [1,2,3,"D"],
	"responses" : 
		[
			{
				"id" : 1,
				"response" : "First Front-End Response"
			},
			{
				"id" : 2,
				"response" : "Yes"
			}
		],
	"isTest" : true
}

The following will be returned when the request was successful.

{
    "SUCCESS": true,
    "USER_ID": 0,
    "DETAIL": "Onboard Success",
    "SSO_EMPLOYEE_ID": "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx",
    "ALL_RESPONSES_SAVED": true,
    "USERNAME": "321Test",
    "PASSWORD": "ARealPasswordWillBeHere"
}

The following will be returned when an error occurred.

{
    "SUCCESS": false,
    "USER_ID": 0,
    "DETAIL": "The username provided is unavailable. Please enter another username.",
    "SSO_EMPLOYEE_ID": null,
    "ALL_RESPONSES_SAVED": null,
    "USERNAME": "321Test",
    "PASSWORD": null
}

api/users/:userID/available

Tests if a username is available for use in a new account

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/users/:userID/available.json
Placeholder Type Required Default Description
:userID string true username being checked for availability
HTTP Request Methods

Supported: GET
Default: GET

Response Default Response Format: json

Samples

The following will be returned when the request was successful.

{
    "success": true,
    "detail": "Username jengland355235 is currently available"
}

The following will be returned when an error occurred.

{
    "success": false,
    "detail": "(fakename): The username provided is unavailable. Please enter another username."
}

api/users/:userID/form/:formID

Receives response information of a user's latest form of a particular status

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/users/:userID/form/:formID.json
Placeholder Type Required Default Description
:userID string true username of person whose form is being selected
:formID string true form id of document to return
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
type string false questions Type of response to return. Choices: questions,fields,pdf
status string false approved Status document needs to be in for return. Choices: approved,submitted
Response Default Response Format: json

Samples

The following will be returned when param[type] == 'questions'.

{
    "formID": 0000,
    "formInfo": {
        "utc_submission_timestamp": "July, 20 2014 23:08:32",
        "approved": true,
        "utc_approved_timestamp": "July, 20 2014 23:08:32",
        "aaid": 0000000
    },
    "questions": [
        {
            "response": "Doe",
            "question_number": 21
        },
        {
            "response": "John",
            "question_number": 204
        },
        {
            "response": "L",
            "question_number": 59
        }
    ],
    "userID": "FAKE_USERNAME"
}

The following will be returned when param[type] == 'fields'.

{
    "formID": 0000,
    "formInfo": {
        "utc_submission_timestamp": "July, 20 2014 23:08:32",
        "approved": true,
        "utc_approved_timestamp": "July, 20 2014 23:08:32",
        "aaid": 000000
    },
    "fields": [
        {
            "name": "eSignature_eSignature_1",
            "value": "John Doe"
        },
        {
            "name": "office_name",
            "value": "Test Division"
        },
        {
            "name": "Primary_full_name_1",
            "value": "John Doe"
        },
        {
            "name": "submission_date",
            "value": "07/20/2014"
        },
        {
            "name": "submission_date_yf",
            "value": "2014/07/20"
        },
        {
            "name": "submission_day",
            "value": 20
        },
        {
            "name": "submission_month",
            "value": "July"
        },
        {
            "name": "submission_time",
            "value": "4:08:32 PM PDT"
        },
        {
            "name": "submission_year",
            "value": 2014
        }
    ],
    "userID": "FAKE_USERNAME"
}

The following will be returned when param[type] == 'pdf'.

{
    "formID": 0000,
    "pdf": {
        "data": "[URL ENCODED BASE64 DATA]",
        "info": "base64 representation of binary object"
    },
    "formInfo": {
        "utc_submission_timestamp": "July, 20 2014 23:08:32",
        "approved": true,
        "utc_approved_timestamp": "July, 20 2014 23:08:32",
        "aaid": 000000
    },
    "userID": "FAKE_USERNAME"
}

api/users/:userID/responses

Receives response information to questions asked of a user

URL Pattern Placeholders

The following patterns are part of the RESTful resource and must be passed in the exact position shown in the URL resource. Usually placeholders start with a (:) colon.

api/users/:userID/responses.json
Placeholder Type Required Default Description
:userID string true username of person whose questions are being selected
HTTP Request Methods

Supported: GET
Default: GET

HTTP Parameters

HTTP Parameters are passed to the resource via the URL or via FORM posts depending on the HTTP verb used.

Header Type Required Default Description
questions int[] false all questions List of questions to return responses
offset integer false 0 query search offset
limit integer false 100 (max:500) maximum returned results
Response Default Response Format: json

Samples

The following will be returned when a request is successful.

Two important distinctions within the response are:

  1. Responses are represented in an array in case of multi-select options, and
  2. All responses will have leading and trailing spaces to ensure that response data is not mis-cast (for example: SSN 000000007 may be cast as 7 if not for spaces)

[
    {
        "responses": [
            " Male "
        ],
        "question_text": "Gender:",
        "question_number": 23
    },
    {
        "responses": [
            " 01/02/1990 "
        ],
        "question_text": "Birth Date:",
        "question_number": 22
    },
    {
        "responses": [
            " Jones "
        ],
        "question_text": "Last Name (without suffix):",
        "question_number": 21
    }
]

HTTP Response Codes

All RESTful service APIs should return appropriate HTTP Status Codes for every request.

Code Description
200 Success!
201 Created. A new resource has been created successfully. The response body is either empty or contains a representation revealing the URI of the newly created resource.
202 Accepted. The request was valid and accepted but not yet processed. The response body should containe a URI to poll for status updates or a token assigned to this request. This allows for asynchronous REST requests.
204 No content. The request was successfull but the server has no response for it.
301 Moved permanently
302 Moved temporarily. The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests
400 Bad request. Look at the accompanying error messages to see why the request was invalid.
401 Unauthorized. Client not authorized to make the request.
403 Forbidden. The request is understood, but it has been refused. Look at the accompanying error messages to see why the request was invalid.
404 Not Found
405 Method Not Allowed. The requested method is not allowed for that resource
406 Not Acceptable. Cannot generate representation with given formats, headers or parameters.
410 Gone, the resource is no longer available.
429 Too Many Requests.
500 Internal service error.
503 Service unavailable. Maybe too many requests.

Creating Acceptable Headers

RESTful transactions are used because they are EASY!!, however we still need them to be secured. Because of that all requests made to our RESTful API must include the proper headers in order to proceed with a transaction


What you need to know:
Item Description
321Forms Username The username attached to your 321Forms account
SSO Secret Key AN SSO Secret Key can be generated by 321Forms by visiting the Edit Account page when logged into 321Forms. Only one secret can be generated at a time, so if you misplace your secret or believe it has been compromised, a new one can be generated in its place. NOTE: if you are a partner who already generates SSO keys for your users, the keys you generate can be used here as well.

Once you have your SSO Secret Key, you are ready to start making calls to the web service. Each RESTful call requires four headers to be attached. For more information on the required headers, scroll to the API Global Headers section of this documentation. Of these headers, the Authorization header requires some work that will be detailed in the next section


The Authorization Header

The authorization header is built to ensure that malicious calls cannot be created by a third party on your behalf. The simple description is already listed in the API Global Headers section, however this section will step your through the encryption process

Step 1. Creating your JSON object

The json object contains three values that are exactly the same as your headers of the same name (Username, SentDate, Action). It is important to create this JSON exactly the same way it is represented on this page, as your requests will fail if the format varies.

Here is an example of the structure, assuming the username sample_user:

{"Username":"sample_user","SentDate":"{ts '2014-10-20 19:32:48'}","Action":"GET"}

Step 2. Creating the SHA-1 hash

  • An SHA-1 hash can be built using any programming language. If you are unfamiliar with this cryptographic hash function, here's the Wikipedia page explaining it in detail.
  • If you would like to test your hash function, one website that will allow you to hash a string with a key of your choice is Online Converter.
  • Your final hash key should be converted into base64
Using the JSON string provided above and an encryption key of 1234567890, your base64 representation of the hash will be C+ofkWM27JCzdkZKUndMEhOjA9o=. This result will be your Authorization header.

Full API Client Implementation
.Net
GitHub User and 321Forms partner pdsteward has shared his implementation of 321Forms integration, which can be viewed here.

Clone from GitHub using the following command:

	git clone https://github.com/pdstewart/Dss.OnboardingApiClient.git
Node.js
If you'd like to connect to the API via Node.js, please see the official 321Forms Node.js API connection implementation here.

Clone from GitHub using the following command:

	git clone https://github.com/JEinOKC/321Forms-NodeJS.git
Code Examples
C#

/*
    The following was provided by an integration partner who was kind enough to share with us his code.  
*/

using System;
using System.Security.Cryptography;
// Source: http://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/

namespace Program
{
    class Program
    {
        static string GetHMACSHA1Hash(string TextToHash, string EncryptionKey)
        {
            var encoding = new System.Text.ASCIIEncoding();
            byte[] keyBytes = encoding.GetBytes(EncryptionKey);
            byte[] textBytes = encoding.GetBytes(TextToHash);
            using (var hasher = new HMACSHA1(keyBytes))
            {
                byte[] hashBytes = hasher.ComputeHash(textBytes);
                return Convert.ToBase64String(hashBytes);
            }
        }
        static void Main()
        {
            string Username = "sample_user";
            string SentDate = "2014-10-20 19:32:48"; //DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            string Action = "GET";
            string json = string.Format("{{\"Username\":\"{0}\",\"SentDate\":\"{{ts '{1}'}}\",\"Action\":\"{2}\"}}", Username, SentDate, Action);
            string key = "1234567890";
            string Authorization = GetHMACSHA1Hash(json, key);
            
            Console.SetWindowSize(90, 10);
            Console.WriteLine(json);
            Console.WriteLine(Authorization);
            Console.ReadLine();
        }
    }
}
Step 3. Sending the request with headers

At this point, you have your 4 header values and the request should be able to be processed. Good Luck!

Changelog

1.9.4


  • added boolean includeInactive option for users/:userID/forms endpoint
  • added new endpoint "users/find-username/:userID-numeric" to allow you to find a username based off of the sytem-assigned user id

1.9.3


  • added boolean includeInactive option for company/:companyID/report/:reportID endpoint

1.9.2


  • added boolean includeAll option for :userID/forms.json endpoint

1.9.1


  • Added 'signature' as option for the parameter 'type' in :apiversion/company/:companyID/form/:formID endpoint

1.9.0


  • Added the optional 'useSMS' and 'phoneNumber' parameters to the users/:userID (post) endpoint

1.8.0


  • Added company/:companyID/plugins endpoint

1.7.1 - 1.7.4


  • Minor patches and internal updates

1.7.0


  • Added the optional 'responseValidation' parameter to the users/:userID (post) endpoint

1.6.9


  • Added everify and eid options for company/:companyID/report/:reportID endpoint

1.6.8


  • Added optional password parameter for user creation

1.6.7


  • Added users/:userID/basicInformation endpoint
  • Added webhook endpoints

1.6.6


  • Added division/:divisionID/flyers endpoint
  • Added division/:divisionID/flyers/:flyerID endpoint

1.6.5


  • added the following fields in prefill endpoint response object: forms, help_text, note_text, example_text

1.6.4


  • Added redirection capabilities for Single Sign-On

1.6.3


  • Added "required" boolean in response for division/:divisionID/prefill endpoint

1.6.2


  • Added division/:divisionID/prefill endpoint

1.6.1


  • Added users/:userID/everify endpoint

1.6.0


  • Added 'url' as valid type in users/:userID/form/:formID.json endpoint. This will return a temporary URL to a form as an alternative to returning the data
  • Updated division/:divisionID/forms.json endpoint to remove any forms that are considered 'private' within the company and have not been specifically assigned to that division
  • Added constraint that blocks deactivated companies from using the user creation process

1.5.1


  • Updated staff access to division/:divisionID/:userType when userType is 'employee'

1.5.0


  • Added 'resolution' as option for the parameter 'type' in :apiversion/company/:companyID/form/:formID endpoint

1.4.0


  • Added 'PUT' method for user/:userID endpoint
  • Added 2 Single Sign-on Endpoints: SSO/generate & SSO/:EmployeeCFUUID

1.3.1


  • Added 'roles' object to return value for users/:userID endpoint. All visible roles displayed will be roles beneath the user performing the query. Roles outside of this scope will be hidden from view

1.3.0


  • Added 2 new endpoint: company/:companyID/report & company/:companyID/report/:reportID

1.2.0


  • Added 1 new endpoint: users/:userID/forms

1.1.0


  • Added optional 'show_uid' parameter on company/complete and division/complete endpints
  • Added 2 new endpoints: users/:userID/uploads and users/:userID/uploads/:fileID

1.0.2


  • Updated security constraints to allow HR Staff to use select segments of the API

1.0.1


  • Fixed check on company/division combo. When user had access to both, but division was not in company, employee creation was still attempted

Receive Updates For This API

* indicates required

COMPLEX requests are those requests that take up a larger portion of computation time on the API. Requests labeled as 'complex' may not be sent at a frequency higher than 1 request per account per second.