List Job Bookings
List the company's job bookings — the reach that has been purchased for its jobs, one record per job and talent channel. Each record carries the job's own fields plus the booking's status, run time, price, and click statistics.
curl -X GET "https://api.getkini.com/job_bookings/?status=%5B%22booked%22%2C%22published%22%5D&page=1&page_size=20&search=Software%20Engineer&ordering=-booking_starts_at" \
-H "Content-Type: application/json" \
-H "Company-Id: 1" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://api.getkini.com/job_bookings/?status=%5B%22booked%22%2C%22published%22%5D&page=1&page_size=20&search=Software%20Engineer&ordering=-booking_starts_at"
headers = {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://api.getkini.com/job_bookings/?status=%5B%22booked%22%2C%22published%22%5D&page=1&page_size=20&search=Software%20Engineer&ordering=-booking_starts_at", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.getkini.com/job_bookings/?status=%5B%22booked%22%2C%22published%22%5D&page=1&page_size=20&search=Software%20Engineer&ordering=-booking_starts_at", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Company-Id", "1")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.getkini.com/job_bookings/?status=%5B%22booked%22%2C%22published%22%5D&page=1&page_size=20&search=Software%20Engineer&ordering=-booking_starts_at')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Company-Id'] = '1'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"count": 57,
"next": "https://api.getkini.com/job_bookings/?page=2",
"previous": null,
"results": [
{
"id": 1,
"external_id": "EXT-123456",
"company": 1,
"title": "Software Engineer (m/w/d)",
"description": "Example job description. We are looking for a Software Engineer (m/w/d) to join our team in Berlin.",
"posting_url": "https://careers.example.com/jobs/123456",
"application_url": "https://careers.example.com/jobs/123456/apply",
"application_email": "jobs@example.com",
"status": "published",
"remote": "on-site",
"language": "en",
"category": "software_development",
"employment_type": "permanent",
"work_schedule": "full_time",
"senority": "mid_level",
"education": "Bachelor's degree",
"start_date": "2026-10-01",
"contract_limitation": "Unlimited contract",
"location_name": "Berlin, Germany",
"street": "Example Street 1",
"city": "Berlin",
"country": "Germany",
"postcode": "10115",
"longitude": 13.405,
"latitude": 52.52,
"salary": "50,000 – 65,000 € gross per year",
"salary_from": 50000,
"salary_to": 65000,
"salary_currency": "EUR",
"salary_frequency": "annual",
"contact_name": "Jane Doe",
"contact_email": "jane.doe@example.com",
"contact_title": "Head of HR",
"contact_phone": "+49 30 1234567",
"contact_salutation": "Frau",
"banner_image": "https://www.example.com/banner.jpg",
"screening_questions": [
{
"id": "sq-001",
"question": "Do you have a valid work permit for Germany?",
"answer_type": "boolean",
"required": true,
"options": [
{
"label": "Yes",
"value": "yes"
}
]
}
],
"application_form_fields": [
{
"id": "email",
"name": "email",
"label": "Email address",
"type": "email",
"subtype": null,
"required": true,
"order": 1,
"options": []
}
],
"description_sections": [
{
"id": "tasks",
"type": "tasks",
"order": 2,
"title": "Your tasks",
"content": "Example section content. Describe the responsibilities of the role here."
}
],
"custom_fields": {
"employer_name": "Example Company GmbH",
"employer_logo": "https://www.example.com/logo.png"
},
"raw_values": {
"employmentType": "FULL_TIME"
},
"import_source": "api",
"run_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"created_at": "2026-06-02T11:07:44.512038Z",
"updated_at": "2026-07-30T09:15:02.771604Z",
"last_content_update_at": "2026-07-30T09:15:02.771604Z",
"job": 123456,
"campaign": null,
"failure_error": null,
"transaction": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"provider_product": 2861,
"purchase_price": 430,
"purchase_list_price": 430,
"booking_reference_id": "IND-2026-0041287",
"booking_id": "0123456789abcdef",
"booking_url": "https://de.indeed.com/viewjob?jk=0123456789abcdef",
"booking_starts_at": "2026-07-21T06:03:12.447201Z",
"booking_expires_at": "2026-08-20T06:03:12.447201Z",
"statistics": {
"booking_clicks": 1284,
"booking_apply_clicks": 96
},
"product": {
"id": 2857,
"name": "Indeed.com Germany (Sponsored Job)",
"url": "http://de.indeed.com",
"description": "Gesponserte Anzeige auf Indeed mit budgetabhängiger Platzierung. Ihre Stellenanzeige erscheint bevorzugt in den Suchergebnissen und erreicht höhere Klickraten – perfekt für eine effiziente, budgetkontrollierte Bewerberansprache.",
"list_price": 430,
"list_days": 30,
"max_jobs": null,
"refresh_interval_options": [
7,
14,
30
],
"regions": "96,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775",
"target_audience_education": "97,99,101,103",
"statistics": {
"booking_expected_clicks": 1100,
"booking_apply_expected_clicks": 80
},
"rating": 98,
"required_fields": {},
"talent_channel": {
"id": 1,
"slug": "indeed",
"name": "Indeed",
"url": "https://de.indeed.com/",
"catalog_url": "https://de.indeed.com/hire/pricing",
"logo": "https://storage.googleapis.com/prod-product-logos/logos/indeedcom.com",
"description": "Indeed ist die weltweite Nummer 1 unter den Jobbörsen, mit 300 Millionen Besuchern pro Monat und Standorten in über 60 Ländern.",
"short_description": "Indeed ist die weltweite Nummer 1 unter den Jobbörsen.",
"regions": "96,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775"
}
}
}
]
}
/job_bookings/
Target server for requests. Edit to use your own host.
Authenticate every request with an API key from the Kini Partner App, sent as Authorization: Bearer <your_api_key>.
Authorization: Bearer <your_api_key>.Filter by booking status. Repeat the parameter to match several values, e.g. status=booked&status=processing.
A page number within the paginated result set.
Number of results to return per page.
Free-text search across the job's fields and the product name.
Sort field. Prefix with - to reverse. One of status, purchase_price, booking_starts_at, booking_expires_at, created_at, updated_at.
Kini ID of the company the key is associated with
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Authenticate every request with an API key from the Kini Partner App, sent as Authorization: Bearer \<your_api_key\>.
Query Parameters
Filter by booking status. Repeat the parameter to match several values, e.g. status=booked&status=processing.
["booked","published"]Sort field. Prefix with - to reverse. One of status, purchase_price, booking_starts_at, booking_expires_at, created_at, updated_at.
-booking_starts_atHeaders
Responses
Total number of records available across all pages
URL to the next page of results
URL to the previous page of results
List of job bookings