Create Campaign
Create a campaign and book the jobs it covers. Send provider_product from List Products with product_type=campaign. The campaign starts as active. Changes to jobs are reflected automatically after creation. See Publish a Campaign.
curl -X POST "https://api.getkini.com/campaigns/" \
-H "Content-Type: application/json" \
-H "Company-Id: 1" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"company_billing_detail": 12,
"campaign": {
"name": "Sponsored Jobs Berlin",
"provider_product": 3104,
"job_selection_mode": "manual",
"included_jobs": [
123456
],
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z"
}
}'
import requests
import json
url = "https://api.getkini.com/campaigns/"
headers = {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"company_billing_detail": 12,
"campaign": {
"name": "Sponsored Jobs Berlin",
"provider_product": 3104,
"job_selection_mode": "manual",
"included_jobs": [
123456
],
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z"
}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.getkini.com/campaigns/", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"company_billing_detail": 12,
"campaign": {
"name": "Sponsored Jobs Berlin",
"provider_product": 3104,
"job_selection_mode": "manual",
"included_jobs": [
123456
],
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z"
}
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"company_billing_detail": 12,
"campaign": {
"name": "Sponsored Jobs Berlin",
"provider_product": 3104,
"job_selection_mode": "manual",
"included_jobs": [
123456
],
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z"
}
}`)
req, err := http.NewRequest("POST", "https://api.getkini.com/campaigns/", bytes.NewBuffer(data))
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/campaigns/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Company-Id'] = '1'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"company_billing_detail": 12,
"campaign": {
"name": "Sponsored Jobs Berlin",
"provider_product": 3104,
"job_selection_mode": "manual",
"included_jobs": [
123456
],
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z"
}
}'
response = http.request(request)
puts response.body
{
"id": 4711,
"name": "Sponsored Jobs Berlin",
"status": "active",
"provider_product": 3104,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"budget": "1500.00",
"budget_interval": "monthly",
"refresh_interval": 14,
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"transaction": "b7e1c2a0-4f3d-4a1e-9c2b-6d5e4f3a2b10",
"incomplete_count": 0,
"created_at": "2026-11-09T09:00:00Z",
"updated_at": "2026-11-09T09:00:00Z"
}
/campaigns/
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>.The media type of the request body
Kini ID of the applicable company.
Optional. Kini ID of an active billing detail for this company.
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>.
Headers
Body
Optional. Kini ID of an active billing detail for this company.
12