# Karir.com โ Zapi reference
> Karir.com job board โ search with location, degree, industry, function, company and salary filters, plus its filter and location vocabularies.
**Base URL:** `https://api.zpi.web.id`
**Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys.
**Response envelope:** `{ content, message, errors }`
**Rate limit:** 60 req/min on free tier.
**Related:**
- Detail page: https://zpi.web.id/api/jobs/karir
- Endpoint catalog: https://zpi.web.id/category/jobs
- Concise index: https://zpi.web.id/llms.txt
- Full reference: https://zpi.web.id/llms-full.txt
---
## Karir.com
**Category:** jobs ยท **Slug:** `karir`
**Detail page:** https://zpi.web.id/api/jobs/karir
Karir.com job board โ search with location, degree, industry, function, company and salary filters, plus its filter and location vocabularies.
**Tags:** karir, lowongan, indonesia
### Filters
The id vocabulary Karir.com's search takes. Rung 1 (direct), 12-20ms each, fetched together.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/jobs:karir/filters`
- **Cache TTL:** 600s
**Parameters:**
_No parameters._
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/jobs:karir/filters" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/jobs:karir/filters", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/jobs:karir/filters",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 302,
"items": [
{
"id": 0,
"name": "Tidak disebutkan",
"group": "industry",
"param": "industryIds"
},
{
"id": 3,
"name": "Rancang Bangun Pesawat",
"group": "industry",
"param": "industryIds"
},
{
"id": 4,
"name": "Otomotif",
"group": "industry",
"param": "industryIds"
},
{
"id": 5,
"name": "Kimia",
"group": "industry",
"param": "industryIds"
},
{
"id": 7,
"name": "Konstruksi",
"group": "industry",
"param": "industryIds"
},
{
"id": 8,
"name": "Konsultan",
"group": "industry",
"param": "industryIds"
}
],
"provider": "karir"
}
```
---
### Job
Karir.com job detail. Rung 1 (direct), ~40ms.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/jobs:karir/job/:jobId`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `jobId` | number | path | yes | Job id, as `search` returns it in `jobId`. |
| `language` | enum(id|en) | query | no | Language for the upstream's own labels. Default id. |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/jobs:karir/job/:jobId?language=id" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/jobs:karir/job/:jobId?language=id", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/jobs:karir/job/:jobId?language=id",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"url": "https://www.karir.com/opportunities/1401487",
"jobId": 1401487,
"title": "Telemarketing Officer",
"majors": [
"Manajemen Komunikasi",
"Administrasi Keuangan dan Perbankan",
"Administrasi Asuransi dan Aktuaria"
],
"salary": {
"max": 4500000,
"min": 2500000,
"shown": true,
"currency": "IDR"
},
"address": "GEDUNG PODIUM THAMRIN NINE (ACE SQUARE) LT6JLMH. THAMRIN, 10. KEBON MELATI TANAH ABANG KOTA ADM JAKARTA PUSAT, DKI JAKARTA",
"company": {
"id": 1326951,
"logo": "https://www.karir.com/assets/images/company/no_image.png",
"name": "PT Chubb Life Insurance Indonesia",
"industry": "Asuransi",
"description": "Sebagai perusahaan underwriting, kami menilai, memperhitungkan dan mengelola risiko dengan kedisplinan dan pengetahuan yang mendalam. Kami melayani dan membayar klaim secara adil. Perusahaan ini juga dikenal karena penawaran produk dan layanannya yang luas, kemampuan distribusi yang luas, kekuatan keuangan yang andal serta jaringan perusahaan yang terdapat di seluruh dunia.",
"subscribers": 0,
"confidential": true,
"workingHoursEnd": "0000-01-01T17:00:00Z",
"workingHoursStart": "0000-01-01T09:00:00Z"
},
"function": "Penjualan dan Pemasaran",
"location": {
"city": "Jakarta Pusat"
},
"postedAt": "2026-09-02T04:52:15.785698Z",
"provider": "karir",
"expiresAt": "2026-11-01T00:00:00Z",
"functions": [
"Penjualan dan Pemasaran",
"Telemarketing"
],
"isExpired": false,
"isUpdated": false,
"updatedAt": "2026-09-02T04:52:15.964377Z",
"hasQuizzes": false,
"viewsCount": 13,
"functionIds": [
86,
67
],
"employmentType": "Tidak Disebutkan",
"qualifications": "
- Pendidikan minimal D3 (Diploma).
- Lulusan SMA/sederajat wajib memiliki pengalaman Telesales minimal 1 tahun.
- Memiliki kemampuan komunikasi yang baik, percaya diri, dan mahir dalam negosiasi.
- Berorientasi pada target dan hasil kerja.
- Pengalaman di bidang sales atau marketing menjadi nilai tambah.
",
"workExperience": 1,
"educationLevels": [
"D3"
],
"experienceLevel": "Pemula / Staf",
"workArrangement": "Tidak Disebutkan",
"experienceLevels": [
"Pemula / Staf"
],
"responsibilities": "- Menghubungi calon nasabah melalui telepon secara proaktif.
- Menawarkan produk asuransi dengan pendekatan yang informatif dan persuasif.
- Memberikan edukasi mengenai manfaat serta pentingnya perlindungan asuransi kepada calon nasabah.
- Berupaya mencapai dan melampaui target penjualan yang telah ditetapkan perusahaan.
"
}
```
---
### Locations
Every location id Karir.com's search accepts, grouped under its province. Rung 1 (direct), ~35ms for both lists.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/jobs:karir/locations`
- **Cache TTL:** 600s
**Parameters:**
_No parameters._
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/jobs:karir/locations" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/jobs:karir/locations", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/jobs:karir/locations",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"count": 1,
"items": [
{
"province": null,
"locations": [
{
"name": "Banda Aceh",
"locationId": 10003
},
{
"name": "Lhokseumawe",
"locationId": 10004
},
{
"name": "Sabang",
"locationId": 10005
},
{
"name": "Medan",
"locationId": 10007
},
{
"name": "Padangsidempuan",
"locationId": 10008
},
{
"name": "Binjai",
"locationId": 10009
}
],
"provinceId": null
}
],
"provider": "karir"
}
```
---
### Search
Karir.com job search. Rung 1 (direct), 300ms-1.3s depending on `limit`.
- **Method:** `GET`
- **Endpoint:** `https://api.zpi.web.id/v1/jobs:karir/search`
- **Cache TTL:** 600s
**Parameters:**
| Name | Type | Location | Required | Description |
|------|------|----------|----------|-------------|
| `query` | string | query | no | Free-text search across job titles and company names. |
| `locationIds` | unknown | query | no | Location id, or a list of them, from the `locations` endpoint. |
| `industryIds` | unknown | query | no | Industry id, or a list of them, from the `filters` endpoint. |
| `jobFunctionIds` | unknown | query | no | Job-function id, or a list of them, from the `filters` endpoint. |
| `degreeIds` | unknown | query | no | Education-level id, or a list of them, from the `filters` endpoint. |
| `companyIds` | unknown | query | no | Company id, or a list of them, as `search` returns it in `company.id`. |
| `level` | number | query | no | Job-level id, from the `filters` endpoint. |
| `minSalary` | number | query | no | Lowest monthly salary in IDR. |
| `maxSalary` | number | query | no | Highest monthly salary in IDR. |
| `expectedSalary` | number | query | no | Salary the candidate is asking for, in IDR. |
| `sort` | enum(newest|priority|popular|salary) | query | no | Result ordering. Default newest. |
| `page` | number | query | no | Page number. Default 1. |
| `limit` | number | query | no | Results per page. Default 20, max 50. |
**cURL:**
```bash
curl "https://api.zpi.web.id/v1/jobs:karir/search?query=admin&locationIds=10027&industryIds=7&jobFunctionIds=46°reeIds=3&companyIds=1279528&level=1&minSalary=8000000&maxSalary=3000000&expectedSalary=10000000&sort=newest&page=1&limit=20" \
-H "x-api-key: YOUR_API_KEY"
```
**JavaScript / TypeScript:**
```javascript
const res = await fetch("https://api.zpi.web.id/v1/jobs:karir/search?query=admin&locationIds=10027&industryIds=7&jobFunctionIds=46°reeIds=3&companyIds=1279528&level=1&minSalary=8000000&maxSalary=3000000&expectedSalary=10000000&sort=newest&page=1&limit=20", {
headers: { "x-api-key": process.env.ZAPI_KEY }
});
const data = await res.json();
```
**Python:**
```python
import requests
r = requests.get("https://api.zpi.web.id/v1/jobs:karir/search?query=admin&locationIds=10027&industryIds=7&jobFunctionIds=46°reeIds=3&companyIds=1279528&level=1&minSalary=8000000&maxSalary=3000000&expectedSalary=10000000&sort=newest&page=1&limit=20",
headers={"x-api-key": "YOUR_API_KEY"})
data = r.json()
```
**Example response:**
```json
{
"page": 1,
"count": 3,
"items": [
{
"url": "https://www.karir.com/opportunities/1401319",
"jobId": 1401319,
"title": "Administrative Staff",
"majors": [
"Semuanya"
],
"maxAge": 27,
"minAge": 22,
"salary": {
"shown": false
},
"company": {
"id": 27514,
"logo": "https://karir-production.nos.jkt-1.neo.id/logos/49/678449/Toto.jpg",
"name": "PT Surya Toto Indonesia Tbk",
"industry": "Manufaktur"
},
"function": "Administrasi",
"isUrgent": false,
"location": {
"city": "Prov. DKI-Jakarta"
},
"postedAt": "2026-09-02T03:10:00Z",
"createdAt": "2026-07-10T10:55:55.884416Z",
"functions": [
"Administrasi"
],
"isUpdated": true,
"updatedAt": "2026-09-02T03:30:42.919967Z",
"industryId": 44,
"workExperience": 2,
"educationLevels": [
"S1"
],
"experienceLevel": "Pemula / Staf",
"experienceLevels": [
"Pemula / Staf"
],
"workExperienceMonths": 24
},
{
"url": "https://www.karir.com/opportunities/1401436",
"jobId": 1401436,
"title": "Administrasi & Keuangan Depo Container",
"majors": [
"Administrasi Bisnis (Keuangan)",
"Administrasi Keuangan dan Perbankan",
"Manajemen"
],
"maxAge": 30,
"minAge": 23,
"salary": {
"max": 5000000,
"min": 4500000,
"shown": true,
"currency": "IDR"
},
"company": {
"id": 110905,
"logo": "https://karir-production.nos.jkt-1.neo.id/logos/95/1790895/download__1_.jpg",
"name": "PT Inter Mitra Transindo",
"industry": "Logistik / Transportasi"
},
"function": "Akuntansi, Keuangan",
"isUrgent": false,
"location": {
"city": "Jakarta Utara"
},
"postedAt": "2026-09-01T02:50:00Z",
"createdAt": "2026-08-14T07:09:42.19834Z",
"functions": [
"Akuntansi, Keuangan",
"Logistik",
"Administrasi"
],
"isUpdated": true,
"updatedAt": "2026-09-01T19:02:22.436719Z",
"industryId": 18,
"workExperience": 1,
"educationLevels": [
"S1",
"D3"
],
"experienceLevel": "Pemula / Staf",
"experienceLevels": [
"Pemula / Staf",
"Staf Senior",
"Supervisor"
],
"workExperienceMonths": 12
},
{
"url": "https://www.karir.com/opportunities/1401467",
"jobId": 1401467,
"title": "Talent Acquisition Admin",
"majors": [
"Manajemen",
"Psikologi"
],
"maxAge": 25,
"minAge": 21,
"salary": {
"max": 5729000,
"min": 5700000,
"shown": true,
"currency": "IDR"
},
"company": {
"id": 9363,
"logo": "https://karir-production.nos.jkt-1.neo.id/logos/-3/-385739/Logo_Bina_Talenta.jpg",
"name": "PT Bina Talenta",
"industry": "Keuangan / Bank"
},
"function": "Administrasi",
"isUrgent": false,
"location": {
"city": "Prov. DKI-Jakarta"
},
"postedAt": "2026-08-31T04:38:00Z",
"createdAt": "2026-08-24T07:38:22.939177Z",
"functions": [
"Administrasi"
],
"isUpdated": true,
"updatedAt": "2026-09-01T19:02:26.741324Z",
"industryId": 11,
"workExperience": 1,
"educationLevels": [
"S1"
],
"experienceLevel": "Pemula / Staf",
"experienceLevels": [
"Pemula / Staf"
],
"workExperienceMonths": 12
}
],
"limit": 5,
"query": "admin",
"total": 3,
"hasMore": false,
"nextPage": null,
"provider": "karir"
}
```
---
_Generated: 2026-09-02T14:24:17.758Z_