List field definitions
Returns all field definitions visible in the current workspace, including built-in fields (returned first, before cursor-based custom fields).
Built-in fields reflect the intrinsic properties of each resource type (e.g.
title, status, dueDate) and are useful for building generic UIs that
enumerate queryable columns. They do not have an id and isBuiltIn is true.
Filter by recordType to restrict results to a specific resource type:
filter[eq][recordType]=task
curl --request GET \
--url https://slog.ai/fields \
--header 'slog-api-key: <api-key>'import requests
url = "https://slog.ai/fields"
headers = {"slog-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'slog-api-key': '<api-key>'}};
fetch('https://slog.ai/fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://slog.ai/fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"slog-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://slog.ai/fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("slog-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://slog.ai/fields")
.header("slog-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://slog.ai/fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["slog-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"fields": [
{
"key": "title",
"name": "title",
"description": null,
"type": "text",
"presentation": null,
"metadata": {},
"recordTypes": [
"task",
"project",
"milestone"
],
"isBuiltIn": true
},
{
"id": "fdef_01jqfield0001",
"key": "sprint_points",
"name": "Sprint Points",
"description": "Story-point estimate for sprint planning.",
"type": "number",
"presentation": null,
"metadata": {},
"recordTypes": [
"task"
],
"isBuiltIn": false,
"createdAt": "2026-05-01T10:00:00.000Z",
"updatedAt": "2026-05-01T10:00:00.000Z"
}
],
"pagination": {
"limit": 50,
"nextCursor": null
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}Authorizations
API key obtained from the Slog dashboard or returned by the signup/invite-redeem
flows. Pass as the slog-api-key header.
Query Parameters
Comma-separated list of fields to return. Supports brace notation for nested
objects: fields=id,title,assignee{name,email}. When omitted, a default set
of fields is returned.
Maximum number of results to return per page.
1 <= x <= 250Opaque cursor from the nextCursor field of a previous response. Pass this to
fetch the next page.
Structured filter using bracket notation: filter[<op>][<field>]=<value>.
Supported operators:
eq— equalsneq— not equalsgt/gte— greater than / greater than or equallt/lte— less than / less than or equalcontains— case-insensitive substring matchstartsWith— case-insensitive prefix matchin— one of (repeat the parameter for multiple values)
Examples:
filter[eq][status]=TODO
filter[contains][title]=auth
filter[in][status]=TODO&filter[in][status]=IN_PROGRESS
filter[gte][dueDate]=2026-01-01
Show child attributes
Show child attributes
Sort using bracket notation: sort[<field>]=asc|desc.
Example: sort[createdAt]=desc
Show child attributes
Show child attributes
curl --request GET \
--url https://slog.ai/fields \
--header 'slog-api-key: <api-key>'import requests
url = "https://slog.ai/fields"
headers = {"slog-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'slog-api-key': '<api-key>'}};
fetch('https://slog.ai/fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://slog.ai/fields",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"slog-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://slog.ai/fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("slog-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://slog.ai/fields")
.header("slog-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://slog.ai/fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["slog-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"fields": [
{
"key": "title",
"name": "title",
"description": null,
"type": "text",
"presentation": null,
"metadata": {},
"recordTypes": [
"task",
"project",
"milestone"
],
"isBuiltIn": true
},
{
"id": "fdef_01jqfield0001",
"key": "sprint_points",
"name": "Sprint Points",
"description": "Story-point estimate for sprint planning.",
"type": "number",
"presentation": null,
"metadata": {},
"recordTypes": [
"task"
],
"isBuiltIn": false,
"createdAt": "2026-05-01T10:00:00.000Z",
"updatedAt": "2026-05-01T10:00:00.000Z"
}
],
"pagination": {
"limit": 50,
"nextCursor": null
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required"
}
}