One single API to push and pull data from multiple connectors.
Introduction
Welcome to the ATS API.
You can use this API structure to access API endpoints.
The base URL for all API requests is https://api.chattechnologies.com
Headers
Custom headers that are expected as part of the request.
Name | Type | Required | Description |
---|---|---|---|
ct-consumer-id | String | Yes | The id of the customer stored inside CT. This can be a user id, account id, device id or whatever entity that can have integration within your application. |
ct-service-id | String | No | Describe the service you want to call (e.g., chatrecruit). Only needed when a customer has activated multiple integrations. |
ct-raw | Boolean | No | Include raw response. Mostly used for debugging purposes. |
ct-app-id | String | Yes | The application id |
Authorization | String | Yes | Bearer API KEY |
Authorization
You can interact with the API through the authorization methods below.
To use API you have to sign up and get your own API key.
Authenticate your API requests by including your live secret API key in the request header.
Bearer authorization header:
Authorization: Bearer <your-ct-api-key>
Application id header:
ct-app-id: <your-ct-app-id>
Do not share or include your secret API keys on client side code. Your API keys carry significant privileges. Please ensure to keep them 100% secure and be sure to not share your secret API keys in areas that are publicly accessible like GitHub.
Learn how to set the Authorization header inside Postman https://learning.postman.com/docs/postman/sending-api-requests/authorization/#api-key
Pagination
API resources have support for bulk retrieval via list APIs. CT API uses cursor-based pagination via the optional cursor
and limit
parameters.
To fetch the first page of results, call the list API without a cursor
parameter. Afterwards you can fetch subsequent pages by providing a cursor parameter. You will find the next cursor in the response body in metadata.cursors.next
. If metadata.cursors.next
is null
you're at the end of the list.
Query Parameters
Name | Type | Required | Description |
---|---|---|---|
cursor | String | No | Cursor to start from. You can find cursors for next & previous pages in the metadata.cursors property of the response. |
limit | Number | No | Number of results to return. Minimum 1, Maximum 300, Default 50 |
Errors
The API returns standard HTTP response codes to indicate success or failure of the API requests. For errors, we also return a customized error message inside the JSON response. You can see the returned HTTP status codes below.
Code | Title | Description |
---|---|---|
200 | OK | The request message has been successfully processed, and it has produced a response. The response message varies, depending on the request method and the requested data. |
201 | Created | The request has been fulfilled and has resulted in one or more new resources being created. |
204 | No Content | The server has successfully fulfilled the request and that there is no additional content to send in the response payload body. |
400 | Bad Request | The receiving server cannot understand the request because of malformed syntax. Do not repeat the request without first modifying it; check the request for errors, fix them and then retry the request. |
401 | Unauthorized | The request has not been applied because it lacks valid authentication credentials for the target resource. |
402 | Payment Required | Subscription data is incomplete or out of date. You'll need to provide payment details to continue. |
403 | Forbidden | You do not have the appropriate user rights to access the request. Do not repeat the request. |
404 | Not Found | The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. |
409 | Conflict | The request could not be completed due to a conflict with the current state of the target resource. |
422 | Unprocessable Entity | The server understands the content type of the request entity, and the syntax of the request entity is correct but was unable to process the contained instructions. |
429 | Too Many Requests | You sent too many requests in a given amount of time ("rate limit"). Try again later |
5xx | Server Errors | Something went wrong with the Unify API. These errors are logged on our side. You can contact our team to resolve the issue. |
API Styles and data formats
REST API
The API is organized around REST, providing simple and predictable URIs to access and modify objects. Requests support standard HTTP methods like GET, PUT, POST, and DELETE and standard status codes. JSON is returned by all API responses, including errors. In all API requests, you must set the content-type HTTP header to application/json. All API requests must be made over HTTPS. Calls made over HTTP will fail.
Available HTTP methods
The Chat Technologies API uses HTTP verbs to understand if you want to read (GET), delete (DELETE) or create (POST) an object. When your web application cannot do a POST or DELETE, we provide the ability to set the method through the query parameter _method.
POST /messages GET /messages GET /messages/{messageId} PATCH /messages/{messageId} DELETE /messages/{messageId}
Response bodies are always UTF-8 encoded JSON objects, unless explicitly documented otherwise. For some endpoints and use cases we divert from REST to provide a better developer experience.
Schema
All API requests and response bodies adhere to a common JSON format representing individual items, collections of items, links to related items and additional meta data.
Support
If you have problems or need help with your case, you can always reach out to our Support.
Companies & Candidates Examples
Please note all of these formats / values are customizable based on your integration needs. Below are just request and response examples.
curl --location 'https://api.chattechnologies.com/company' \ --header 'Authorization: Token token=.......................' \
REQUEST curl --location --request PATCH 'https://api.chattechnologies.com/company' \ --header 'Authorization: Token token=..........................' \ --header 'Content-Type: application/vnd.api+json' \ --data '{ "data": { "type": "companies", "id": "<insert your company uuid>", "attributes": { "name": "Acme Corp" }, "relationships": { "manager": { "data": { "type": "users", "id": "1" } } } } }'
RESPONSE { "data": { "id": "ZPX-868y8", "type": "companies", "links": { "self": "https://api.chattechnoloties.localhost/companies/ZPX-868y8" }, "attributes": { "locale": "en", "website": "", "name": "Acme Corp" }, "relationships": { "manager": { "links": { "self": "https://api.chattechnologies.localhost/companies/ZPX-868y8/relationships/manager", "related": "https://api.chattechnologies.localhost/companies/ZPX-868y8/manager" } } } } }
Response { "data": { "id": "447", "type": "candidates", "links": { "self": "https://api.chattechnologies.localhost/candidates/447" }, "attributes": { "connected": false, "created-at": "2020-12-15T10:36:53.370+01:00", "email": "jonas@example.com", "facebook-id": null, "first-name": "Jonas", "internal": false, "last-name": "Brusman", "linkedin-uid": null, "linkedin-url": null, "original-resume": null, "phone": null, "picture": null, "pitch": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "referring-site": null, "referring-url": null, "referred": false, "resume": null, "sourced": false, "unsubscribed": false, "updated-at": "2020-12-15T10:36:53.370+01:00", "facebook-profile": null, "linkedin-profile": null, "tags": [] }, "relationships": { "activities": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/activities", "related": "https://api.chattechnologies.localhost/candidates/447/activities" } }, "department": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/department", "related": "https://api.chattechnologies.localhost/candidates/447/department" } }, "role": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/role", "related": "https://api.chattechnologies.localhost/candidates/447/role" } }, "regions": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/regions", "related": "https://api.chattechnologies.localhost/candidates/447/regions" } }, "job-applications": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/job-applications", "related": "https://api.chattechnologies.localhost/candidates/447/job-applications" } }, "questions": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/questions", "related": "https://api.chattechnologies.localhost/candidates/447/questions" } }, "answers": { "links": { "self": "https://api.chattechnologies.localhost/v1/candidates/447/relationships/answers", "related": "https://api.chattechnologies.localhost/candidates/447/answers" } }, "locations": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/locations", "related": "https://api.chattechnologies.localhost/candidates/447/locations" } }, "uploads": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/uploads", "related": "https://api.chattechnologies.localhost/candidates/447/uploads" } }, "custom-field-values": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/custom-field-values", "related": "https://api.chattechnologies.localhost/candidates/447/custom-field-values" } }, "partner-results": { "links": { "self": "https://api.chattechnologies.localhost/candidates/447/relationships/partner-results", "related": "https://api.chattechnologies.localhost/candidates/447/partner-results" } } } } }
Example Datapoints
Changes
Required scope
Admin
Attributes
Attribute | Type | Description |
---|---|---|
code | string | Activity type |
created-at | date | |
data | string | Json string with activity data, like note text, todo value etc. |
Relations
Relation | Description |
---|---|
candidate | Candidate which the activity concerns |
job | Job which the activity concerns |
user | User who creates the activity |
Candidates
Attribute | Type | Description |
---|---|---|
connected | boolean | |
consent-future-jobs-at | date | Read only, the date candidate gave consent for contacting about future jobs. |
consent-given-future-jobs | boolean | Write only, True if candidate gave consent for contacting about future jobs. |
created-at | date | |
updated-at | date | |
string | Email to candidate. Always unique. | |
facebook-id | string | User id if connected with Facebook |
facebook-profile | string | Read only, html version of Facebook profile |
first-name | string | |
internal | boolean | |
last-name | string | |
linkedin-profile | string | Read only, html version of LinkedIn profile |
linkedin-uid | string | User id if connected with LinkedIn |
linkedin-url | string | URL to LinkedIn profile |
merge | boolean | Write only True if the attributes should be merged with an existing candidate, matched by email address. To merge with a |
original-resume | string | Read only Signed URL to original version of resume, valid for 30 seconds. |
phone | string | |
picture | string | Url to candidate picture |
pitch | string | 140 character pitch |
referring-site | string | Read only, friendly name parsed from referring-url (i.e. Facebook, Indeed etc) |
referring-url | string | |
referred | boolean | Read only True if added by an employee. |
resume | string | Signed URL to pdf-version of resume, valid for 30 seconds. When creating a candidate, this should be a publicly available URL to a document. |
sourced | boolean | True if added by a recruiter without applying |
set-consent-expiration | boolean | Write only True if candidate have given their consent for you to store their personal details. Will set an expiration period according to your data retention policy. |
tags | array | |
unsubscribed | boolean | If true no new job notifications are sent |
send-welcome-message | boolean | Create only, set to true if you want to send the "Welcome to connect" email to the candidate. Default: false |
Companies
Attributes
Attribute | Type | Description |
---|---|---|
name | string | Company name |
locale | string | Career site language. Possible values: ar, cs, da, de, en, es, et, fi, fil, fr, hu, it, ja, ko, lv, ms, nl, no, pl, pt, ro, ru, sv, th, tr, zh-CN |
website | string | Company website URL |
Relations
Relation | Description |
---|---|
manager | The Admin user who is assigned |
Departments
Attributes
Attribute | Type | Description |
---|---|---|
name | string | The departmen's name |
Relations
Relation | Description |
---|---|
roles | The department's roles |
teams | The teams this department is part of |
{ "data": { "id": "1", "type": "departments", "links": { "self": "https://api.chattechnologies.localhost/departments/1" }, "attributes": { "name": "Product Development" }, "relationships": { "roles": { "links": { "self": "https://api.chattechnologies.localhost/departments/1/relationships/roles", "related": "https://api.chattechnologies.localhost/departments/1/roles" } }, "teams": { "links": { "self": "https://api.chattechnologies.localhost/departments/1/relationships/teams", "related": "https://api.chattechnologies.localhost/departments/1/teams" } } } }, "meta": { "texts": { "name-singular": "department", "name-plural": "departments", "all": "All departments" } } }
ROLES
Attributes
Attribute | Type | Description |
---|---|---|
name | string | The name of the role |
Relations
Relation | Description |
---|---|
department | Parent Department |
teams | The teams this role is part of |