import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
});
async function main() {
const response = await client.properties.updateProperty({
property_id: 'property-aaaaaaaaaaaa',
name: 'Customer Workspace',
});
console.log(response);
}
main();curl -X POST 'https://api.periskope.app/v1/properties/property-aaaaaaaaaaaa' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Customer Workspace"
}'{
"success": true,
"message": "Custom property updated",
"data": {
"property_id": "property-aaaaaaaaaaaa",
"property_name": "Workspace",
"type": "ticket",
"kind": "dropdown",
"mandatory": false,
"section_id": "00000000-0000-0000-0000-000000000000",
"section_name": "Issue Details",
"options": [
{
"id": "1755859200000",
"label": "Example Corp"
},
{
"id": "1755859200001",
"label": "Globex"
}
],
"created_at": "2026-01-15T09:30:00.000Z"
}
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "NOT_FOUND_ERROR",
"message": "No custom property matches property_id",
"status": 404
}{
"code": "CONFLICT_ERROR",
"message": "A custom property with the new name already exists for the type",
"status": 409
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}Update Custom Property
Updates the name, section and/or mandatory flag of a custom property — at least one is required.
import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
});
async function main() {
const response = await client.properties.updateProperty({
property_id: 'property-aaaaaaaaaaaa',
name: 'Customer Workspace',
});
console.log(response);
}
main();curl -X POST 'https://api.periskope.app/v1/properties/property-aaaaaaaaaaaa' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"name": "Customer Workspace"
}'{
"success": true,
"message": "Custom property updated",
"data": {
"property_id": "property-aaaaaaaaaaaa",
"property_name": "Workspace",
"type": "ticket",
"kind": "dropdown",
"mandatory": false,
"section_id": "00000000-0000-0000-0000-000000000000",
"section_name": "Issue Details",
"options": [
{
"id": "1755859200000",
"label": "Example Corp"
},
{
"id": "1755859200001",
"label": "Globex"
}
],
"created_at": "2026-01-15T09:30:00.000Z"
}
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "NOT_FOUND_ERROR",
"message": "No custom property matches property_id",
"status": 404
}{
"code": "CONFLICT_ERROR",
"message": "A custom property with the new name already exists for the type",
"status": 409
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}Authorizations
Your Periskope API token, sent as Authorization: Bearer <token>. Generate one from the Periskope dashboard under Settings → API & Webhooks. API access requires an active Pro or Enterprise plan.
Path Parameters
The property_id (property-xxxxxxxxxxxxxxxx) or the name (case-insensitive) of the custom property. Prefer the property_id — a name that exists as both a chat and a ticket property is ambiguous without the type query parameter.
1"property-aaaaaaaaaaaa"
Query Parameters
Resolves the chat or the ticket property when property_id is a name that exists as both. Not needed when passing a property_id, or when the name only exists under one type.
chat, ticket "ticket"
Body
New name for the property. Must be unique within the property’s type (compared case-insensitively, stored trimmed).
1"Customer Workspace"
Name of the section to move the property to. Matched case-insensitively; created automatically if it does not exist. Pass null or an empty string to remove the property from its current section.
"Issue Details"
Whether the property must be filled in. Supported only for ticket properties — mandatory: true for a chat property is rejected.
true
Was this page helpful?