Workspaces
List custom fields
Returns all custom fields in a workspace that are visible to the API key user.
GET
/
api
/
v1
/
workspaces
/
{id}
/
custom-fields
List custom fields
curl --request GET \
--url https://api.getarca.app/api/v1/workspaces/{id}/custom-fields \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getarca.app/api/v1/workspaces/{id}/custom-fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getarca.app/api/v1/workspaces/{id}/custom-fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.getarca.app/api/v1/workspaces/{id}/custom-fields';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getarca.app/api/v1/workspaces/{id}/custom-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 => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}falsefalserequire 'uri'
require 'net/http'
url = URI("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.get("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
.header("Authorization", "Bearer <token>")
.asString();import Foundation
let url = URL(string: "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);using RestSharp;
var options = new RestClientOptions("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
.get()
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute()[
{
"id": 1,
"name": "Customer Tier",
"type": "dropdown",
"config": { "options": ["Free", "Starter", "Pro"] },
"position": 1,
"is_scope_restricted": false,
"granted_folder_ids": [],
"list_overrides": []
},
{
"id": 2,
"name": "Story Points",
"type": "number",
"config": null,
"position": 2,
"is_scope_restricted": true,
"granted_folder_ids": [4],
"list_overrides": []
},
{
"id": 3,
"name": "Satisfaction",
"type": "rating",
"config": { "iconName": "star-filled", "color": "yellow" },
"position": 3,
"is_scope_restricted": true,
"granted_folder_ids": [],
"list_overrides": [{ "list_id": 12, "access": "granted" }]
}
]
{
"error": "Invalid API key"
}
{
"error": "Scope 'tasks:read' is required for this endpoint"
}
{
"error": "Workspace not found"
}
Requires the
tasks:read scope. You must be a member of the workspace.
Fields with a restricted allowed users list are filtered to the API key
user only when their user ID is included in that list.Path parameters
string
required
The numeric workspace ID.
Response
Returns an array of custom field objects ordered byposition ascending.
number
required
Custom field identifier.
string
required
Display name of the custom field (e.g.,
"Customer Tier").string
required
Field type. One of
text, number, date, checkbox, rating, dropdown, money, or people.object | null
Type-specific configuration object.
null for types with no configuration.Show Config by type
Show Config by type
rating — { "iconName": "star-filled", "color": "yellow" }dropdown — { "options": ["Option A", "Option B"] }money — { "currency": "USD", "decimals": 2 }All other types return null.number
required
Sort position within the workspace (ascending).
boolean
required
When
false, the field is available on all lists in the workspace. When true, the field is only available on lists covered by granted_folder_ids and list_overrides.number[]
required
Folder IDs where this field applies when
is_scope_restricted is true. All lists inside a granted folder inherit the field unless overridden.array
required
Explicit list-level overrides when
is_scope_restricted is true. Each entry has list_id (number) and access (granted or denied). A denied entry hides the field on that list even if its folder is granted.Show Override object
Show Override object
list_id — numeric list IDaccess — granted makes the field available on that list; denied hides itTask responses (
GET /tasks/:id, list tasks, etc.) only include custom fields that apply to the task’s list. Values for inapplicable fields are not returned, and writes to those fields are ignored.[
{
"id": 1,
"name": "Customer Tier",
"type": "dropdown",
"config": { "options": ["Free", "Starter", "Pro"] },
"position": 1,
"is_scope_restricted": false,
"granted_folder_ids": [],
"list_overrides": []
},
{
"id": 2,
"name": "Story Points",
"type": "number",
"config": null,
"position": 2,
"is_scope_restricted": true,
"granted_folder_ids": [4],
"list_overrides": []
},
{
"id": 3,
"name": "Satisfaction",
"type": "rating",
"config": { "iconName": "star-filled", "color": "yellow" },
"position": 3,
"is_scope_restricted": true,
"granted_folder_ids": [],
"list_overrides": [{ "list_id": 12, "access": "granted" }]
}
]
{
"error": "Invalid API key"
}
{
"error": "Scope 'tasks:read' is required for this endpoint"
}
{
"error": "Workspace not found"
}
Was this page helpful?
⌘I
List custom fields
curl --request GET \
--url https://api.getarca.app/api/v1/workspaces/{id}/custom-fields \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getarca.app/api/v1/workspaces/{id}/custom-fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.getarca.app/api/v1/workspaces/{id}/custom-fields', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.getarca.app/api/v1/workspaces/{id}/custom-fields';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getarca.app/api/v1/workspaces/{id}/custom-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 => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}falsefalserequire 'uri'
require 'net/http'
url = URI("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyHttpResponse<String> response = Unirest.get("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
.header("Authorization", "Bearer <token>")
.asString();import Foundation
let url = URL(string: "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);using RestSharp;
var options = new RestClientOptions("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://api.getarca.app/api/v1/workspaces/{id}/custom-fields")
.get()
.addHeader("Authorization", "Bearer <token>")
.build()
val response = client.newCall(request).execute()[
{
"id": 1,
"name": "Customer Tier",
"type": "dropdown",
"config": { "options": ["Free", "Starter", "Pro"] },
"position": 1,
"is_scope_restricted": false,
"granted_folder_ids": [],
"list_overrides": []
},
{
"id": 2,
"name": "Story Points",
"type": "number",
"config": null,
"position": 2,
"is_scope_restricted": true,
"granted_folder_ids": [4],
"list_overrides": []
},
{
"id": 3,
"name": "Satisfaction",
"type": "rating",
"config": { "iconName": "star-filled", "color": "yellow" },
"position": 3,
"is_scope_restricted": true,
"granted_folder_ids": [],
"list_overrides": [{ "list_id": 12, "access": "granted" }]
}
]
{
"error": "Invalid API key"
}
{
"error": "Scope 'tasks:read' is required for this endpoint"
}
{
"error": "Workspace not found"
}