NAV
JavaScript Python Shell

Introduction

Welcome to X0PA Room's API! You can use this API to access ROOM endpoints.

BaseURL: https://api.x0pa.ai/room/v1

Your request should look like this:


const headers = {
  'Accept':'application/json',
  'x-api-key':'eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp....',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/resource',
{
  method: 'GET',
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'x-api-key': 'eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp....',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.get('https://api.x0pa.ai/room/v1/resource', headers = headers)

print(r.json())

# You can also use wget
curl -X GET https://api.x0pa.ai/room/v1/resource \
  -H 'Accept: application/json' \
  -H 'x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp....' \
  -H 'Authorization: xyzn504hh377dhdh73....'

x-api-key need to be passed in the headers of all requests to make an authenticated request. Unauthenticated requests will return an HTTP 401 response.

Authorization header with a value generated using the /token also needs to be passed for all protected resources.

Authorization

Your x-api-key, Authorization headers should look like this:

x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp....
Authorization: xyzn504hh377dhdh73....

x-api-key: eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp.... Authorization: xyzn504hh377dhdh73....

Errors

Error Code Meaning
401 Unauthorized -- Invalid key/token. Check to make sure you're passing key via the x-api-key, Authorization
403 Forbidden -- You do not have access to that record.
404 Not Found -- Resource not found
500 Server Error -- We had a problem with our server. Try again later or contact us: support@x0pa.com

Change Log

The timestamps below are UTC.

Date Description
Nov 12, 2020 12:00:00PM Initial API release with required endpoints
Aug 08, 2021 12:00:00PM Base API changed(routes)

Token

Get Token

Code samples

const inputBody = '{
  "email": "a@x.ai",
  "password": "xyz"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/token',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.x0pa.ai/room/v1/token', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/token \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'x-api-key: API_KEY'

POST /token

Body parameter

{
  "email": "string",
  "password": "string"
}

Parameters

Name In Type Required Description
body body TokenPayload false

Detailed descriptions

body: { "email": "a@x.ai", "password": "xyz" }

Example responses

200 Response

{
  "id": "udDuD1E2IrKrATVUmDZioesZ9clJuiehmvvEfZdDnhwmbG5",
  "ttl": 1209600,
  "created": "2021-08-08T04:30:00.007Z",
  "userId": 100
}

Responses

Status Meaning Description Schema
200 OK none TokenResponse

Assessments

Create Assessment

Code samples

const inputBody = '{
  "groupName": "string",
  "groupConfig": {
    "interviewType": "string"
  },
  "responseVisibility": true,
  "expirationDate": "string",
  "expiresAt": "string",
  "startsAt": "string",
  "landingPageInfo": "string",
  "enableBanner": true,
  "removeBanner": true,
  "enableReminder": true,
  "reminderInterval": null,
  "maxReminders": null,
  "enableInclusiveHiring": true,
  "companyBanner": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/assessments',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.post('https://api.x0pa.ai/room/v1/assessments', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/assessments \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

POST /assessments

Body parameter

{
  "groupName": "string",
  "groupConfig": {
    "interviewType": "string"
  },
  "responseVisibility": true,
  "expirationDate": "string",
  "expiresAt": "string",
  "startsAt": "string",
  "landingPageInfo": "string",
  "enableBanner": true,
  "removeBanner": true,
  "enableReminder": true,
  "reminderInterval": null,
  "maxReminders": null,
  "enableInclusiveHiring": true,
  "companyBanner": "string"
}

Parameters

Name In Type Required Description
body body CreateAssessment false

Detailed descriptions

body: { "groupName":"dName", "groupConfig":{ "interviewType":"fixed" }, "responseVisibility":false, "expirationDate":"2021-08-19T03:17:32+05:30", "expiresAt":"1629323252040", "startsAt":"1628718452040", "landingPageInfo":"Info", "enableBanner":true, "removeBanner":false, "enableReminder":false, "reminderInterval":null, "maxReminders":null, "enableInclusiveHiring":false, "companyBanner":"public/x.png" }

Responses

Status Meaning Description Schema
200 OK none None

List Assessments

Code samples


const headers = {
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/assessments',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.get('https://api.x0pa.ai/room/v1/assessments', headers = headers)

print(r.json())

# You can also use wget
curl -X GET https://api.x0pa.ai/room/v1/assessments \
  -H 'x-api-key: API_KEY'

GET /assessments

Responses

Status Meaning Description Schema
200 OK none None

Get Assessment

Code samples


const headers = {
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'x-api-key': 'API_KEY',
}

r = requests.get('https://api.x0pa.ai/room/v1/assessments/{id}', headers = headers)

print(r.json())

# You can also use wget
curl -X GET https://api.x0pa.ai/room/v1/assessments/{id} \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

GET /assessments/{id}

Parameters

Name In Type Required Description
id path any true none

Responses

Status Meaning Description Schema
200 OK none None

Edit Assessment

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY',
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.patch('https://api.x0pa.ai/room/v1/assessments/{id}', headers = headers)

print(r.json())

# You can also use wget
curl -X PATCH https://api.x0pa.ai/room/v1/assessments/{id} \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

PATCH /assessments/{id}

Body parameter

{}

Parameters

Name In Type Required Description
id path any true none

Responses

Status Meaning Description Schema
200 OK none None

Questions

Add Question

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}/question',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.x0pa.ai/room/v1/assessments/{id}/question', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/assessments/{id}/question \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY'

POST /assessments/{id}/question

Body parameter

{}

Parameters

Name In Type Required Description
id path any true none

Responses

Status Meaning Description Schema
200 OK none None

Candidates

Add Candidate

Code samples

const inputBody = {
  "firstName":"Jane",
  "lastName":"Doe",
  "emailAddress":"janedoe@example.com",
  "videointerviewGroupId": "1"
};
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}/candidate',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.post('https://api.x0pa.ai/room/v1/assessments/{id}/candidate', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/assessments/{id}/candidate \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

POST /assessments/{id}/candidate

Body parameter

{
  "firstName":"Jane",
  "lastName":"Doe",
  "emailAddress":"janedoe@example.com",
  "videointerviewGroupId": "1"
}

Parameters

Name In Type Required Description
id path any true none

Example responses

200 Response

[
  {
    "interviewId":"611b0532-d8a2-4dc5-913a-e11656b68075",
    "recruiterId":5631,
    "atsJobId":"0",
    "interviewName":"dName",
    "status":"Draft",
    "atsCandidateId":0,
    "createdAt":"2021-08-15T06:31:40+00:00",
    "publicUuid":"bvig-8b261022-e30e-43fe-a307-c817654903ae",
    "candidateEmail":"badi@gmail.com",
    "companyId":5143,
    "questionConfig":"{\"interviewType\":\"fixed\"}",
    "profileId":184583,
    "type":"x0pa",
    "videointerviewGroupId":824,
    "expirationDate":"2021-08-18T21:47:32+00:00",
    "maximumReminders":0
  }
]

Responses

Status Meaning Description Schema
200 OK none None

Send Invite

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}/invite',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.post('https://api.x0pa.ai/room/v1/assessments/{id}/invite', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/assessments/{id}/invite \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

POST /assessments/{id}/invite

Body parameter

{
  "videointerviewGroupId": "1",
  "interviewIds":["611b0532-d8a2-4dc5-913a-e11656b68075"]
}

Parameters

Name In Type Required Description
id path any true none

Example responses

200 Response

{
  "msg":"The invitation has been sent successfully"
}

Responses

Status Meaning Description Schema
200 OK none None

List Candidates

Code samples


const headers = {
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....' \
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}/candidates',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.get('https://api.x0pa.ai/room/v1/assessments/{id}/candidates', headers = headers)

print(r.json())

# You can also use wget
curl -X GET https://api.x0pa.ai/room/v1/assessments/{id}/candidates \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

GET /assessments/{id}/candidates

Parameters

Name In Type Required Description
id path any true none

Example responses

200 Response

{
  "count":1,
  "overallFeedback":false,
  "Videointerviews":[
    {
      "id":"1",
      "interviewId":"88709c9a-3298-4c59-93df-1ad76bd620a8",
      "recruiterId":"1",
      "atsJobId":"0",
      "interviewName":"dName",
      "status":"Draft",
      "inviteSent":false,
      "rrCandidateId":null,
      "atsCandidateId":"0",
      "createdAt":"2021-08-10T06:49:03.000Z",
      "updatedAt":"2021-08-10T06:49:03.929Z",
      "jobId":null,
      "isPublic":null,
      "publicUuid":"bvig-55628c51-4567-444d-a767-f32ae440daf9",
      "avatarUrl":null,
      "candidateEmail":"janedoe@example.com",
      "profileVideo":null,
      "responseAt":null,
      "inviterEmail":null,
      "companyId":"5143",
      "questionConfig":{
        "interviewType":"fixed"
      },
      "profileId":123,
      "type":"x0pa",
      "videointerviewGroupId":1,
      "startsAt":null,
      "expiresAt":null,
      "expirationDate":"2021-08-18T21:47:32.000Z",
      "interviewScore":null,
      "reviewerCount":null,
      "totalScore":null,
      "result":null,
      "outcome":null,
      "sharingUrl":null,
      "inviteDate":null,
      "maximumReminders":"0",
      "retakeReason":null,
      "retakeSent":null,
      "retakeApproval":null,
      "questionFeedback":false,
      "interviewFeedback":true,
      "videointerviewgroup":{
        "videointerviewGroupId":1,
        "groupName":"dName"
      },
      "profile":{
        "profileId":123,
        "firstName":"Jane",
        "lastName":"Doe",
        "email":"janedoe@example.com",
        "iv":"46ed56e4f455d75afeb473a78d801c20"
      }
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK none None

Get Public URL

Code samples


const headers = {
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/candidates/{id}/share',
{
  method: 'POST',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.x0pa.ai/room/v1/candidates/{id}/share', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/candidates/{id}/share \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

POST /candidates/{id}/share

Parameters

Name In Type Required Description
id path any true none

Example responses

200 Response

{
  "videointerviewUrl":"https://live.x0pa.ai/....",
  "videointerviewId":"611b0532-d8a2-4dc5-913a-e11656b68075"
}

Responses

Status Meaning Description Schema
200 OK none None

Delete Candidate

Code samples

const inputBody = [{
  "profileId": 123,
  "videointerviewGroupId":"1"
}];
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/assessment/{id}/candidates/{vid}',
{
  method: 'DELETE',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.delete('https://api.x0pa.ai/room/v1/assessment/{id}/candidates/{vid}', headers = headers)

print(r.json())

# You can also use wget
curl -X DELETE https://api.x0pa.ai/room/v1/assessment/{id}/candidates/{vid} \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

DELETE /assessment/{id}/candidates/{vid}

Body parameter

[{
  "profileId": 123,
  "videointerviewGroupId":"1"
}]

Parameters

Name In Type Required Description
id path any true none
vid path any true none

Example responses

200 Response

[{
  "videointerviews": {
    "affectedRows":1,
    "count":1,
    "rows":[]
  }
}]

Responses

Status Meaning Description Schema
200 OK none None

Edit Candidate

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
};

fetch('https://api.x0pa.ai/room/v1/assessments/{id}/candidate/{pid}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY',
  'Authorization': 'xyzn504hh377dhdh73....'
}

r = requests.patch('https://api.x0pa.ai/room/v1/assessments/{id}/candidate/{pid}', headers = headers)

print(r.json())

# You can also use wget
curl -X PATCH https://api.x0pa.ai/room/v1/assessments/{id}/candidate/{pid} \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY' \
  -H 'Authorization: xyzn504hh377dhdh73....'

PATCH /assessments/{id}/candidate/{pid}

Body parameter

{}

Parameters

Name In Type Required Description
id path any true none
pid path any true none

Responses

Status Meaning Description Schema
200 OK none None

Ratings

List Rating Criteria

Code samples


const headers = {
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/rating-criteria',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'x-api-key': 'API_KEY'
}

r = requests.get('https://api.x0pa.ai/room/v1/rating-criteria', headers = headers)

print(r.json())

# You can also use wget
curl -X GET https://api.x0pa.ai/room/v1/rating-criteria \
  -H 'x-api-key: API_KEY'

GET /rating-criteria

Responses

Status Meaning Description Schema
200 OK none None

Create Rating Critieria

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/rating-criteria',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.post('https://api.x0pa.ai/room/v1/rating-criteria', headers = headers)

print(r.json())

# You can also use wget
curl -X POST https://api.x0pa.ai/room/v1/rating-criteria \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY'

POST /rating-criteria

Body parameter

{}

Responses

Status Meaning Description Schema
200 OK none None

Edit Rating Criteria

Code samples

const inputBody = '{}';
const headers = {
  'Content-Type':'application/json',
  'x-api-key':'API_KEY'
};

fetch('https://api.x0pa.ai/room/v1/rating-criteria/{id}',
{
  method: 'PATCH',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Content-Type': 'application/json',
  'x-api-key': 'API_KEY'
}

r = requests.patch('https://api.x0pa.ai/room/v1/rating-criteria/{id}', headers = headers)

print(r.json())

# You can also use wget
curl -X PATCH https://api.x0pa.ai/room/v1/rating-criteria/{id} \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: API_KEY'

PATCH /rating-criteria/{id}

Body parameter

{}

Parameters

Name In Type Required Description
id path any true none

Responses

Status Meaning Description Schema
200 OK none None

Schemas

TokenPayload

{
  "email": "a@x.ai",
  "password": "xyz"
}

Properties

Name Type Required Restrictions Description
email string false none none
password string false none none

TokenResponse

{
  "id": "udDuD1E2IrKrATVUmDZioesZ9clJuiehmvvEfZdDnhwmbG5",
  "ttl": 1209600,
  "created": "2021-08-08T04:30:00.007Z",
  "userId": 100
}

Properties

Name Type Required Restrictions Description
id string false none none
ttl integer false none none
created string false none none
userId integer false none none

CreateAssessment

{
  "groupName": "Sales Manager",
  "groupConfig": {
    "interviewType": "fixed"
  },
  "responseVisibility": false,
  "expirationDate": "string",
  "expiresAt": "string",
  "startsAt": "string",
  "landingPageInfo": "Test description",
  "enableBanner": false,
  "removeBanner": false,
  "enableReminder": false,
  "enableInclusiveHiring": false,
  "companyBanner": "string"
}

Properties

Name Type Required Restrictions Description
groupName string false none none
groupConfig object false none none
ยป interviewType string false none none
responseVisibility boolean false none none
expirationDate string false none none
expiresAt string false none none
startsAt string false none none
landingPageInfo string false none none
enableBanner boolean false none none
removeBanner boolean false none none
enableReminder boolean false none none
reminderInterval any false none none
maxReminders any false none none
enableInclusiveHiring boolean false none none
companyBanner string false none none