---
title: "Update Identity"
method: PATCH
path: "/api/v1/identities/{agent_handle}"
tags: ["Identities"]
---

# Update Identity

`PATCH /api/v1/identities/{agent_handle}`

## Path parameters

- `agent_handle` string, required

## Headers

- `Idempotency-Key` string, nullable — Required when claim_imessage_number claims a new line; replays return the original PATCH result.

## Request body

- AgentIdentityUpdateRequest
  - `agent_handle` string, nullable — New handle for the identity. A leading '@' is stripped automatically. Omit to leave unchanged.
  - `display_name` string, nullable — New human-readable display name for the identity. Omit to leave unchanged; send null to clear.
  - `description` string, nullable — New free-form description of what the identity is. Omit to leave unchanged; send null to clear.
  - `imessage_enabled` boolean, nullable — Whether this identity can be reached through the shared iMessage service. Omit to leave unchanged.
  - `contact_sharing_enabled` boolean, nullable — Whether an attached dedicated iMessage line automatically shares this identity's name and optional avatar. Omit to leave unchanged.
  - `imessage_number_id` string, uuid, nullable — Dedicated iMessage number to attach. Send a number UUID to attach or atomically swap from the current dedicated number, null to move to the shared service, or omit to leave unchanged. Available to admin-scoped API keys and JWT callers.
  - `claim_imessage_number` true, nullable — Claim and attach a dedicated iMessage line. Omit to avoid provisioning. Requires an Idempotency-Key header when supplied.
  - `imessage_filter_mode` 'whitelist' | 'blacklist'
  - `mail_filter_mode` 'whitelist' | 'blacklist'
  - `phone_filter_mode` 'whitelist' | 'blacklist'

## Response `200`

Successful Response

- AgentIdentityDetailResponse
  - `id` string, uuid, required
  - `organization_id` string, required
  - `agent_handle` string, required
  - `display_name` string, nullable
  - `description` string, nullable
  - `status` 'active' | 'paused' | 'deleted'
  - `imessage_enabled` boolean
  - `contact_sharing_enabled` boolean
  - `imessage_filter_mode` 'whitelist' | 'blacklist'
  - `mail_filter_mode` 'whitelist' | 'blacklist'
  - `phone_filter_mode` 'whitelist' | 'blacklist'
  - `email_address` string, email, nullable
  - `has_avatar` boolean
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `signing_key_configured` boolean
  - `signing_key_created_at` string, date-time, nullable
  - `mailbox` MailboxResponse
    - `id` string, uuid, required
    - `email_address` string, required
    - `status` 'active' | 'paused' | 'deleted'
    - `sending_domain` string — Bare domain the mailbox sends from, derived from email_address. Matches the platform default (inkboxmail.com) or the customer's verified custom domain.
    - `filter_mode` 'whitelist' | 'blacklist', required
    - `agent_identity_id` string, uuid, nullable — ID of the agent identity that owns this mailbox, or null on tombstones / system mailboxes.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `storage_used_bytes` integer — Live storage used by this inbox, in bytes.
    - `storage_limit_bytes` integer, nullable — Resolved plan-tiered storage cap in bytes; null when the route did not resolve it (the ORM does not carry the cap).
    - `filter_mode_change_notice` FilterModeChangeNotice
      - `new_filter_mode` 'whitelist' | 'blacklist', required
      - `redundant_rule_action` string, required — 'block' or 'allow'; the action whose rules are now redundant.
      - `redundant_rule_count` integer, required — Count of active rules whose action equals redundant_rule_action. 0 = clean flip; >0 = console UI should prompt the operator to review.
    - `unread_count` integer, nullable
  - `phone_number` PhoneNumberResponse
    - `id` string, uuid, required
    - `number` string, required
    - `type` 'local' | 'toll_free', required
    - `status` 'active' | 'paused' | 'released', required
    - `sms_status` 'pending' | 'ready' | 'assignment_failed', required
    - `sms_error_code` string, nullable
    - `sms_error_detail` string, nullable
    - `sms_ready_at` string, date-time, nullable
    - `incoming_call_action` 'auto_accept' | 'auto_reject' | 'webhook' | 'hosted_agent' | 'forward', required
    - `client_websocket_url` string, nullable, required
    - `incoming_call_webhook_url` string, nullable, required
    - `forwarding_target_type` 'phone' | 'sip'
    - `forwarding_phone_number` string, nullable
    - `forwarding_sip_uri` string, nullable
    - `filter_mode` 'whitelist' | 'blacklist', required
    - `state` string, nullable — 2-letter US state abbreviation for LOCAL numbers (e.g. 'NY'). Null for toll-free numbers.
    - `agent_identity_id` string, uuid, nullable — ID of the agent identity that owns this phone number, or null if the number is standalone (not tied to any agent).
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `filter_mode_change_notice` FilterModeChangeNotice
      - `new_filter_mode` 'whitelist' | 'blacklist', required
      - `redundant_rule_action` string, required — 'block' or 'allow'; the action whose rules are now redundant.
      - `redundant_rule_count` integer, required — Count of active rules whose action equals redundant_rule_action. 0 = clean flip; >0 = console UI should prompt the operator to review.
  - `imessage_number` AgentIdentityIMessageNumberResponse
    - `id` string, uuid, required
    - `number` string, required
    - `type` 'dedicated_outbound', required
    - `status` 'active' | 'paused' | 'released'
    - `inbound_only` false — Deprecated compatibility field; dedicated lines can initiate.
  - `tunnel` TunnelSummaryResponse
    - `id` string, uuid, required
    - `tunnel_name` string, required
    - `agent_identity_id` string, uuid, nullable — Identifier of the identity associated with this tunnel, when available.
    - `tls_mode` 'edge' | 'passthrough', required
    - `status` 'awaiting_cert' | 'active' | 'deleted', required
    - `public_host` string, required
    - `zone` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `400` — The identity mutation request is invalid.
- `402` — An identity or dedicated-number quota was exceeded.
- `409` — The identity mutation conflicts with current state.
- `422` — Validation Error
- `503` — Identity provisioning is temporarily unavailable.
- `4XX` — Client error with Support Agent information.
- `5XX` — Server error with Support Agent information.

---

[API](https://skmtc.dev/inkbox/apis/inkbox-api.md) · [All operations](https://skmtc.dev/inkbox/apis/inkbox-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/inkbox/inkbox-api/revisions/31f357e7e6f8/schema)
