Introduction
API Documentation Capture
Authenticating requests
To authenticate requests, include a X-API-KEY header with the value "{YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Assessment Purpose
APIs for managing assessment purpose
Get All Assessment Purpose
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/assessment-purpose" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/assessment-purpose"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/assessment-purpose';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Assessment Purpose",
"data": [
{
"name": "Rekrutment",
"id": 1,
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Division
APIs for managing division
Get All Division
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/divisions" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/divisions"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/divisions';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Division",
"data": [
{
"name": "Divisi 1",
"id": 1,
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Endpoints
GET api/v1/companies
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/companies" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/companies"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/companies';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": 401,
"message": "Unauthorized"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/generate-token
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/generate-token" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/generate-token"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/generate-token';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": 401,
"message": "Unauthorized"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/generate-token/user
requires authentication
Example request:
curl --request POST \
"https://api-staging.capture.co.id/api/v1/generate-token/user" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/generate-token/user"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/generate-token/user';
$response = $client->post(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/candidates
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/candidates" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"current_page\": 16,
\"per_page\": 22,
\"search\": \"g\",
\"position\": \"z\",
\"division\": \"m\"
}"
const url = new URL(
"https://api-staging.capture.co.id/api/v1/candidates"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"current_page": 16,
"per_page": 22,
"search": "g",
"position": "z",
"division": "m"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/candidates';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'current_page' => 16,
'per_page' => 22,
'search' => 'g',
'position' => 'z',
'division' => 'm',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": 401,
"message": "Unauthorized"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET api/v1/filters/options
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/filters/options" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/filters/options"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/filters/options';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"status": 401,
"message": "Unauthorized"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/comparison/ideal-profile
requires authentication
Example request:
curl --request POST \
"https://api-staging.capture.co.id/api/v1/comparison/ideal-profile" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"profile_ideal\": \"architecto\",
\"user_ids\": []
}"
const url = new URL(
"https://api-staging.capture.co.id/api/v1/comparison/ideal-profile"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"profile_ideal": "architecto",
"user_ids": []
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/comparison/ideal-profile';
$response = $client->post(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'profile_ideal' => 'architecto',
'user_ids' => [],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
POST api/v1/comparison/generate
requires authentication
Example request:
curl --request POST \
"https://api-staging.capture.co.id/api/v1/comparison/generate" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"profile_ideal\": \"architecto\",
\"user_ids\": []
}"
const url = new URL(
"https://api-staging.capture.co.id/api/v1/comparison/generate"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"profile_ideal": "architecto",
"user_ids": []
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/comparison/generate';
$response = $client->post(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'profile_ideal' => 'architecto',
'user_ids' => [],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Form Data
APIs for managing form data
Get All Form Data
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/form-data" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/form-data"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/form-data';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Form Data",
"data": [
{
"id": 1,
"title": "Form Data",
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Level
APIs for managing level
Get All Level
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/levels" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/levels"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/levels';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Level",
"data": [
{
"id": 1,
"name": "Level 1",
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Mail Template
APIs for managing mail template
Get All Mail Template
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/mail-templates/architecto" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/mail-templates/architecto"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/mail-templates/architecto';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Mail Template",
"data": [
{
"id": 1,
"code": "Mail Template 1",
"name_code": "Mail Template 1",
"unit_id": 1,
"subject": "Mail Template 1",
"content": "Mail Template 1",
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Example response (404):
{
"status": 404,
"message": "Unit not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Position
APIs for managing position
Get All Position
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/positions" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"division_id\": 16
}"
const url = new URL(
"https://api-staging.capture.co.id/api/v1/positions"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"division_id": 16
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/positions';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'division_id' => 16,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Position",
"data": [
{
"id": 1,
"name": "Position 1",
"division_id": 1,
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Example response (404):
{
"status": 404,
"message": "Division not found"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Schedule
APIs for managing schedule
Create Schedule Individual
requires authentication
Example request:
curl --request POST \
"https://api-staging.capture.co.id/api/v1/test/schedule/individu" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"start_test\": \"2026-01-28 16:00:00\",
\"finish_test\": \"2026-01-28 16:00:00\",
\"purpose_assessment_id\": 1,
\"form_data_id\": 1,
\"procto_selfie\": true,
\"procto_capture\": true,
\"procto_camera\": true,
\"test_type\": [
1,
2,
3
],
\"procto_ai\": true,
\"procto_exit_page\": true,
\"unit_id\": 1,
\"division_id\": 1,
\"position_id\": 1,
\"level_id\": 1,
\"candidates\": [
\"architecto\"
],
\"mail_template_id\": 1,
\"sort_tests\": true,
\"test_tags\": [
1,
2,
3
]
}"
const url = new URL(
"https://api-staging.capture.co.id/api/v1/test/schedule/individu"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"start_test": "2026-01-28 16:00:00",
"finish_test": "2026-01-28 16:00:00",
"purpose_assessment_id": 1,
"form_data_id": 1,
"procto_selfie": true,
"procto_capture": true,
"procto_camera": true,
"test_type": [
1,
2,
3
],
"procto_ai": true,
"procto_exit_page": true,
"unit_id": 1,
"division_id": 1,
"position_id": 1,
"level_id": 1,
"candidates": [
"architecto"
],
"mail_template_id": 1,
"sort_tests": true,
"test_tags": [
1,
2,
3
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/test/schedule/individu';
$response = $client->post(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'start_test' => '2026-01-28 16:00:00',
'finish_test' => '2026-01-28 16:00:00',
'purpose_assessment_id' => 1,
'form_data_id' => 1,
'procto_selfie' => true,
'procto_capture' => true,
'procto_camera' => true,
'test_type' => [
1,
2,
3,
],
'procto_ai' => true,
'procto_exit_page' => true,
'unit_id' => 1,
'division_id' => 1,
'position_id' => 1,
'level_id' => 1,
'candidates' => [
'architecto',
],
'mail_template_id' => 1,
'sort_tests' => true,
'test_tags' => [
1,
2,
3,
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"start_test": "[DATETIME]",
"finish_test": "[DATETIME]",
"link": "https://capture.co.id",
"candidates": [
{
"name": "[NAME]",
"email": "[EMAIL_ADDRESS]",
"password": "[PASSWORD]",
"nit": "[NIT]",
"tests": [
{
"name": "Trial - Konfirmasi Kehadiran",
"duration": 0
},
{
"name": "Trial - Latihan Soal Pilihan Ganda",
"duration": 0
},
{
"name": "Trial - Latihan Soal Ranking",
"duration": 0
}
]
}
],
"message": "Schedule Successfully"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Schedule Bulk
requires authentication
Example request:
curl --request POST \
"https://api-staging.capture.co.id/api/v1/test/schedule/bulk" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "start_test=2026-01-28 16:00:00"\
--form "finish_test=2026-01-28 16:00:00"\
--form "purpose_assessment_id=1"\
--form "form_data_id=1"\
--form "procto_selfie=1"\
--form "procto_capture=1"\
--form "procto_camera=1"\
--form "procto_ai=1"\
--form "procto_exit_page=1"\
--form "unit_id=1"\
--form "mail_template_id=1"\
--form "sort_tests=1"\
--form "test_tags[]=1"\
--form "file=@/tmp/phpmWelcJ" const url = new URL(
"https://api-staging.capture.co.id/api/v1/test/schedule/bulk"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('start_test', '2026-01-28 16:00:00');
body.append('finish_test', '2026-01-28 16:00:00');
body.append('purpose_assessment_id', '1');
body.append('form_data_id', '1');
body.append('procto_selfie', '1');
body.append('procto_capture', '1');
body.append('procto_camera', '1');
body.append('procto_ai', '1');
body.append('procto_exit_page', '1');
body.append('unit_id', '1');
body.append('mail_template_id', '1');
body.append('sort_tests', '1');
body.append('test_tags[]', '1');
body.append('file', document.querySelector('input[name="file"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/test/schedule/bulk';
$response = $client->post(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'start_test',
'contents' => '2026-01-28 16:00:00'
],
[
'name' => 'finish_test',
'contents' => '2026-01-28 16:00:00'
],
[
'name' => 'purpose_assessment_id',
'contents' => '1'
],
[
'name' => 'form_data_id',
'contents' => '1'
],
[
'name' => 'procto_selfie',
'contents' => '1'
],
[
'name' => 'procto_capture',
'contents' => '1'
],
[
'name' => 'procto_camera',
'contents' => '1'
],
[
'name' => 'procto_ai',
'contents' => '1'
],
[
'name' => 'procto_exit_page',
'contents' => '1'
],
[
'name' => 'unit_id',
'contents' => '1'
],
[
'name' => 'mail_template_id',
'contents' => '1'
],
[
'name' => 'sort_tests',
'contents' => '1'
],
[
'name' => 'test_tags[]',
'contents' => '1'
],
[
'name' => 'file',
'contents' => fopen('/tmp/phpmWelcJ', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"start_test": "[DATETIME]",
"finish_test": "[DATETIME]",
"link": "https://capture.co.id",
"candidates": [
{
"name": "[NAME]",
"email": "[EMAIL_ADDRESS]",
"password": "[PASSWORD]",
"nit": "[NIT]",
"tests": [
{
"name": "Trial - Konfirmasi Kehadiran",
"duration": 0
},
{
"name": "Trial - Latihan Soal Pilihan Ganda",
"duration": 0
},
{
"name": "Trial - Latihan Soal Ranking",
"duration": 0
}
]
}
],
"message": "Schedule Successfully"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Download Excel Template
requires authentication
Download file template to import file candidate (excel format).
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/test/download-template-candidate" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/test/download-template-candidate"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/test/download-template-candidate';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
Binary data - The generated template file in excel format.
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Test
APIs for managing test
Get All Test Availability
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/test/list" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/test/list"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/test/list';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Test",
"data": [
{
"name": "Logika Berfikir",
"id": 1,
"duration": 60,
"price": 1,
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Unit
APIs for managing unit
Get All Unit
requires authentication
Example request:
curl --request GET \
--get "https://api-staging.capture.co.id/api/v1/units" \
--header "X-API-KEY: {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"const url = new URL(
"https://api-staging.capture.co.id/api/v1/units"
);
const headers = {
"X-API-KEY": "{YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.capture.co.id/api/v1/units';
$response = $client->get(
$url,
[
'headers' => [
'X-API-KEY' => '{YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));Example response (200):
{
"status": 200,
"message": "Get All Unit",
"data": [
{
"id": 1,
"name": "Unit 1",
"created_at": "2025-01-01 10:00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 20
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.