List Integration Fields
List the configuration fields of a single integration — everything a company has to supply before the integration can run.
Use this to build the setup form dynamically instead of hard-coding each ATS: render one input per field in order, send the answers back as config in Compose Company Integration keyed by config_path, and skip the fields where is_visible is false.
Which fields come back depends on the partner's entitlements, so two partners can see different forms for the same integration. The response is a plain array — this endpoint is not paginated. An unknown integration slug returns an empty array rather than a 404.
Requires a partner-scoped API key.
curl -X GET "https://api.getkini.com/integrations/personio/fields/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://api.getkini.com/integrations/personio/fields/"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://api.getkini.com/integrations/personio/fields/", {
method: "GET",
headers: {
"Content-Type": "application/json",
"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/integrations/personio/fields/", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
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/integrations/personio/fields/')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
[
{
"id": 68,
"integration": "personio",
"title": "Recruiting API Key",
"placeholder": null,
"description": "Navigieren Sie zu Einstellungen > API-Zugangsdaten. Klicken Sie auf den "Recruiting API key".",
"order": 1,
"field_type": "text",
"options": [],
"config_path": "credentials.api_key",
"regex_pattern": null,
"is_required": true,
"is_visible": true
}
]
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
/integrations/{integration}/fields/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>.Slug of the integration, as returned by List Integrations
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
Responses
Kini ID of the field
Slug of the integration the field belongs to
Label to show above the input
Placeholder text for the input
Help text explaining where the company admin finds this value
Display order, ascending. Fields without an order come last.
Input type. Enum: text, json (a JSON string, parsed on submit), secret, number, boolean, select, multi_select.
textjsonsecretnumberbooleanselectmulti_selectAllowed values for select and multi_select fields. Empty otherwise.
The key to send this value under in the config object of Compose Company Integration. Dotted paths may be sent flat ("credentials.api_key": "…") or nested (\{"credentials": \{"api_key": "…"\}\}) — both are accepted. Paths ending in a dot, such as channel_mapping., expect a nested object.
Regular expression the value must match, if any
Whether the field must be supplied. Only enforced for fields that are also visible.
Whether to show the field to the company admin. Hidden fields are filled from their default and should not be rendered in a setup form.