Skip to content

Update a closure

PATCH
/v1/closures/{closure_id}
curl --fail-with-body -X PATCH 'https://api.talki.it/v1/closures/e2a7c9d4-5b18-4f63-8a0e-9c4d2b7f1e35' \
-H "Authorization: Bearer $TALKI_API_KEY" \
-H "Idempotency-Key: closure-reason-2026-12-24" \
-H "Content-Type: application/json" \
--data '{"reason":"Closed for the Christmas holidays"}'

Change a closure or special opening; omitted fields stay unchanged. To move it, send the whole new window. A special opening must still start and end on the same day. Its location_id cannot change. A request that changes nothing sends no closure.updated. Requires account:write. Limited to 120 requests per minute per account (API key) or per installation (OAuth).

closure_id
required
Closure Id
string
Talki-Version
string
Example
2026-10-01

Serve this one request at the given dated contract version instead of the credential’s pin. An unsupported value is refused with 400 unsupported_version, never downgraded.

Idempotency-Key
string
<= 255 characters

Unique key for this logical write. Reuse it only when retrying the same method, path, query and body. Required on appointment writes, on creating a service, a resource, a closure, a tag, a caller rule or a document, and on teaching the assistant; optional on every other write. Retained for 24 hours: a retry with the same key gets the first response again, marked Idempotency-Replayed: true, and a refusal that holds until the state changes (a time taken, a list full) is replayed too. A response a retry can change is not kept when the request saved nothing, and the retry runs the request again: a 400 asking for a different request (invalid_parameter, invalid_cursor, export_too_large, unknown_scenario, no_services_requested, stay_too_short, stay_too_long, stay_dates_invalid), a 415, a 409 request_conflict, document_not_ready or check_in_progress, a 412, a 429 and a 5xx.

Example
closure-reason-2026-12-24
Media typeapplication/json
ClosureUpdate

A partial edit of a closure or special opening. To move it, send the whole new window in one of the two forms. It stays at the location it was created for.

object
kind
Kind

closed or open. Cannot be null. Turning a closure into a special opening needs a window that starts and ends on one day.

string
Allowed values: closed open
all_day
All Day

Whole days or an exact range. Cannot be null.

boolean
start_date
Any of:
string
end_date
Any of:
string
start_at
Any of:
string format: date-time
end_at
Any of:
string format: date-time
reason
Any of:
string
<= 500 characters
location_id
Any of:
string
Example
{
"reason": "Closed for the Christmas holidays"
}

Successful Response

Media typeapplication/json
Closure

A dated exception to WorkingHours: a closure (kind: closed), when the business takes no bookings, or a special opening (kind: open), extra hours on one day that are added to that day’s weekly hours. It applies at one location, or at every location when location_id is null. Appointments already inside a closure are not cancelled: look them up with GET /v1/appointments and starts_after/starts_before.

object
id
required
Id

Closure identifier.

string
location_id
required
Any of:
string
kind
required

closed — the business is shut, and no time is offered to callers. open — a special opening: extra hours on one day, offered to callers together with that day’s weekly hours. A closure on the same day still wins over both.

string
Allowed values: closed open
all_day
required
All Day

True for whole days, given by start_date and end_date; only a closure can be whole days. False for an exact range, given by start_at and end_at.

boolean
start_date
required
Any of:
string
end_date
required
Any of:
string
start_at
required
Start At

Start, RFC 3339 UTC. For whole days this is midnight at the start of start_date in the account’s timezone.

string format: date-time
end_at
required
End At

End, exclusive, RFC 3339 UTC. For whole days this is midnight at the end of end_date.

string format: date-time
reason
required
Any of:
string
created_at
required
Created At

When it was added, RFC 3339 UTC.

string format: date-time
Example
{
"id": "e2a7c9d4-5b18-4f63-8a0e-9c4d2b7f1e35",
"location_id": null,
"kind": "closed",
"all_day": true,
"start_date": "2026-12-24",
"end_date": "2026-12-26",
"start_at": "2026-12-23T23:00:00Z",
"end_at": "2026-12-26T23:00:00Z",
"reason": "Closed for the Christmas holidays",
"created_at": "2026-09-30T08:12:44Z"
}
X-Request-Id
string

Identifier to include when contacting Talki support.

Talki-Version
string
Example
2026-10-01

The dated contract version this response was served at.

Idempotency-Replayed
string
Allowed values: true

true when this response was replayed from a prior request with the same key.

A parameter or body field is invalid (invalid_parameter), including a special opening that does not start and end on the same day in the account’s timezone (ending at the next midnight is allowed) and a location_id other than the closure’s own; or Talki-Version names an unsupported version (unsupported_version).

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "invalid_request",
"code": "invalid_parameter",
"message": "A special opening must start and end on the same day (Europe/Rome time).",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

The credential is missing, malformed, expired, revoked, or unknown.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "authentication_error",
"code": "invalid_credentials",
"message": "The supplied API credential is invalid.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

The account does not have an active subscription.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "permission_error",
"code": "subscription_inactive",
"message": "This account does not have an active subscription.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

The account or credential may not perform this request.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "permission_error",
"code": "insufficient_scope",
"message": "This credential does not have the required scope.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

No closure with this ID exists in the authenticated account.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "invalid_request",
"code": "resource_not_found",
"message": "No such closure.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

The write conflicts with current state or a previous idempotency key use.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "conflict",
"code": "idempotency_key_reuse",
"message": "This Idempotency-Key was already used for a different request.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

The account or installation exceeded its request rate (rate_limit_exceeded), or the calling address did (ip_rate_limited).

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Retry after the interval in Retry-After.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.

Retry-After
integer

Seconds to wait before retrying.

X-RateLimit-Limit
string

The budget of the window that was exceeded. Absent on ip_rate_limited.

X-RateLimit-Remaining
integer

Requests left in the window. Absent on ip_rate_limited.

X-RateLimit-Reset
integer

When the window resets, in Unix seconds. Absent on ip_rate_limited.

An unexpected error occurred.

Media typeapplication/json

Every error answer has this shape.

object
error
required

The error itself. Branch on code; message is for people.

object
type
required
string
Allowed values: authentication_error permission_error invalid_request conflict rate_limit_error api_error
code
required

Stable machine code; branch on this, not on message. Known codes: invalid_credentials, insufficient_scope, account_closed, subscription_inactive, plan_upgrade_required, plan_feature_unavailable, forbidden, livemode_required, sandbox_api_key_required, unsupported_version, invalid_parameter, invalid_cursor, method_not_allowed, resource_not_found, conflict, precondition_failed, payload_too_large, export_too_large, idempotency_key_required, idempotency_key_reuse, request_in_progress, request_conflict, rate_limit_exceeded, ip_rate_limited, internal_error, api_error, booking_refused, appointment_cancelled, appointment_not_cancelled, unresolved_request_not_resolved, faq_full, document_not_ready, unsupported_file_type, service_has_upcoming_bookings, resource_is_default, resource_required_by_service, capacity_below_committed, capacity_below_service_requirement, resource_too_small, tag_limit_reached, caller_rule_limit_reached, transcript_not_available, trial_suspended, account_suspended, phone_number_missing, forwarding_number_missing, forwarding_number_invalid, check_in_progress, check_quota_exceeded, checks_busy, check_call_failed, agent_test_session_full, agent_test_unavailable, unknown_scenario, sandbox_not_ready, too_many_keys, key_not_active, key_already_rolled, invalid_registration, client_disabled, client_changed, delivery_in_progress, events_url_unset, events_paused, event_unsubscribed, account_refused, installation_inactive, invalid_client, invalid_request, unauthorized_client, access_denied, invalid_scope, slot_unavailable, capacity_exhausted, service_exclusion, closed_day, in_the_past, outside_hours, service_inactive, location_inactive, service_deleted, no_services_requested, party_too_large, stay_too_short, stay_too_long, stay_dates_invalid. New codes may be added; treat an unknown one by its HTTP status.

string
message
required
string
request_id
required
string
Example
{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "An unexpected error occurred. Quote the request_id when reporting it.",
"request_id": "req_7f24a2f8c6b64e699901563a458b5031"
}
}
X-Request-Id
string
Example
req_7f24a2f8c6b64e699901563a458b5031

Identifier to include when contacting Talki support.