Update Campaign
Change the name, dates, refresh interval, or which jobs are included in a campaign. Send only the fields you want to change. See Publish a Campaign.
curl -X PATCH "https://api.getkini.com/campaigns/4711/" \
-H "Content-Type: application/json" \
-H "Company-Id: 1" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "Sponsored Jobs Berlin",
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"refresh_interval": 14,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"included_jobs": [
123456
]
}'
import requests
import json
url = "https://api.getkini.com/campaigns/4711/"
headers = {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"name": "Sponsored Jobs Berlin",
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"refresh_interval": 14,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"included_jobs": [
123456
]
}
response = requests.patch(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.getkini.com/campaigns/4711/", {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"Company-Id": "1",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"name": "Sponsored Jobs Berlin",
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"refresh_interval": 14,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"included_jobs": [
123456
]
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"name": "Sponsored Jobs Berlin",
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"refresh_interval": 14,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"included_jobs": [
123456
]
}`)
req, err := http.NewRequest("PATCH", "https://api.getkini.com/campaigns/4711/", 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/4711/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(uri)
request['Content-Type'] = 'application/json'
request['Company-Id'] = '1'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"name": "Sponsored Jobs Berlin",
"starts_at": "2026-11-16T00:00:00Z",
"ends_at": "2026-12-16T00:00:00Z",
"refresh_interval": 14,
"job_selection_mode": "manual",
"job_filter": [
{
"field": "city",
"op": "eq",
"value": "Berlin"
}
],
"included_jobs": [
123456
]
}'
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/{campaign_id}/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>.Kini ID of the campaign
The media type of the request body
Kini ID of the applicable company.
Label shown on the campaign.
When the campaign begins. Cannot be in the past.
When the campaign ends. Must be after starts_at.
How often the jobs are refreshed, in days. Send a value from the product's refresh_interval_options.
Which jobs the campaign covers. all is every active job. manual is the ids in included_jobs. dynamic is the jobs that match job_filter. Defaults to all.
Used when job_selection_mode is dynamic. Each rule has field, op, and value.
Used when job_selection_mode is manual. Kini IDs of the jobs to include. Each job must belong to the 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>.
Path Parameters
Headers
Body
How often the jobs are refreshed, in days. Send a value from the product's refresh_interval_options.
14Which jobs the campaign covers. all is every active job. manual is the ids in included_jobs. dynamic is the jobs that match job_filter. Defaults to all.
allmanualdynamicUsed when job_selection_mode is dynamic. Each rule has field, op, and value.
Used when job_selection_mode is manual. Kini IDs of the jobs to include. Each job must belong to the company.
[123456]Responses
Kini ID of the campaign.
Label shown on the campaign.
Current status of the campaign.
draftactiveaction_requiredpausedclosedcompleteddeletedKini ID of the company-specific price from List Products.
Which jobs the campaign covers. all is every active job. manual is the ids in included_jobs. dynamic is the jobs that match job_filter. Defaults to all.
allmanualdynamicUsed when job_selection_mode is dynamic. Each rule has field, op, and value.
Budget in EUR for a sponsored product.
How often the budget is charged. Set from the product's pricing.price_interval.
one_timemonthlyHow often the jobs are refreshed, in days. Send a value from the product's refresh_interval_options.
When the campaign begins. Cannot be in the past.
When the campaign ends. Must be after starts_at.
Transaction that records this campaign and the billing detail it is invoiced to.
How many jobs are missing data the job board needs.