> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tied.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Contact (PATCH)

> Updates a contact. Identical to the documented `PUT` on the same path — Rails routes both verbs to the same action, so use whichever your client prefers.

`custom_attributes` is **merged**, not replaced: keys you send are added or overwritten and keys you leave out stay. Use the destroy-custom-attributes endpoint to remove one.



## OpenAPI

````yaml /api-reference/openapi.json patch /api/v1/accounts/{account_id}/contacts/{id}
openapi: 3.0.4
info:
  title: Tied API
  description: >-
    The Tied REST API. Three families of endpoint, each with its own credential:
    **Application** for everything inside an account, **Platform** for
    provisioning accounts and users, and **Client** for acting as a contact from
    your own surface.
  version: 1.1.0
  termsOfService: https://tied.com/legal
  contact:
    email: hello@tied.com
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://app.tied.com
    description: Tied cloud
security: []
tags:
  - name: Account AgentBots
    description: Account-specific Agent Bots
  - name: Agents
    description: Agent management APIs
  - name: Canned Responses
    description: Pre-defined responses for common queries
  - name: Contacts
    description: Contact management APIs
  - name: Contact Labels
    description: Manage contact labels
  - name: Conversation Assignments
    description: Manage conversation assignments
  - name: Conversation Labels
    description: Manage conversation labels
  - name: Conversations
    description: Conversation management APIs
  - name: Custom Attributes
    description: Custom fields for contacts and conversations
  - name: Custom Filters
    description: Saved filters for conversations
  - name: Inboxes
    description: Communication channels setup
  - name: Integrations
    description: Third-party integrations
  - name: Messages
    description: Message management APIs
  - name: Profile
    description: User profile APIs
  - name: Reports
    description: Analytics and reporting APIs
  - name: Teams
    description: Team management APIs
  - name: Webhooks
    description: Event notification webhooks
  - name: Automation Rule
    description: Workflow automation rules
  - name: Help Center
    description: Knowledge base management
  - name: Contacts API
    description: Public contact APIs
  - name: Conversations API
    description: Public conversation APIs
  - name: Messages API
    description: Public message APIs
  - name: CSAT Survey Page
    description: Customer satisfaction survey
  - name: Account
    description: >-
      The authenticated user's own account — read and update account settings.
      Distinct from the Platform family's **Accounts**, which provisions
      accounts across an installation.
  - name: Audit Logs
    description: Read the account's audit trail
  - name: Inbox API
    description: Public inbox lookup by channel identifier
  - name: Labels
    description: >-
      Create and manage the account's labels. Applying one to a conversation or
      contact is a separate endpoint under those resources.
  - name: Macros
    description: >-
      Saved multi-step actions an agent — or an integration — can run against
      one or more conversations.
  - name: Campaigns
    description: Ongoing website campaigns and one-off SMS and WhatsApp sends.
  - name: Contact Notes
    description: Internal notes on a contact. Never visible to the contact.
  - name: Help Center Categories
    description: Categories group a portal's articles, one tree per allowed locale.
  - name: Help Center Articles
    description: The articles a portal publishes, and their draft and archived states.
  - name: Summary Reports
    description: Per-agent, per-team, per-inbox and per-label totals for a period, as JSON.
  - name: Live Reports
    description: Right-now queue counts. No date range — these describe the present.
  - name: CSAT
    description: >-
      The satisfaction ratings contacts have submitted, and the metrics computed
      from them.
  - name: Notifications
    description: >-
      The per-user notification feed, its read and snooze state, and the
      settings that decide what lands in it.
  - name: Conversation Participants
    description: >-
      The agents watching a conversation. Participants get notified about it
      without being assigned to it.
  - name: Draft Messages
    description: >-
      The unsent reply held for a conversation. Stored in Redis, one per
      conversation.
  - name: Search
    description: >-
      One search service across conversations, contacts, messages and Help
      Center articles.
  - name: Dashboard Apps
    description: Embedded pages that appear as a tab beside a conversation.
  - name: Assignment Policies
    description: How conversations are handed out, and which inbox uses which policy.
  - name: Files
    description: Storing a file so another endpoint can attach it.
  - name: Bot Flows
    description: >-
      Scripted conversation flows, their versions, and the publish and rollback
      that move between them.
  - name: Billing
    description: >-
      Credit balance, usage, invoices, spend controls and the provider-hosted
      payment flows.
  - name: AMB Templates
    description: >-
      Saved Apple Messages primitive payloads an agent can reuse from the
      composer.
  - name: AMB Onboarding
    description: The in-flight Apple Messages for Business registration for an account.
  - name: Widget Session
    description: Starting a widget session and reading the visitor it belongs to.
  - name: Widget Conversation
    description: The visitor's conversation and its messages.
  - name: Widget Context
    description: Campaigns, agents, labels, events and uploads for a widget session.
  - name: CSAT Survey
    description: The public, unauthenticated survey a contact answers from a link.
  - name: Workspace
    description: Scheduling and cancelling deletion of the whole workspace.
paths:
  /api/v1/accounts/{account_id}/contacts/{id}:
    parameters:
      - $ref: '#/components/parameters/account_id'
      - name: id
        in: path
        required: true
        schema:
          type: number
        description: ID of the contact
    patch:
      tags:
        - Contacts
      summary: Update Contact (PATCH)
      description: >-
        Updates a contact. Identical to the documented `PUT` on the same path —
        Rails routes both verbs to the same action, so use whichever your client
        prefers.


        `custom_attributes` is **merged**, not replaced: keys you send are added
        or overwritten and keys you leave out stay. Use the
        destroy-custom-attributes endpoint to remove one.
      operationId: update-contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contact_update_payload'
            example:
              name: Priya Raman
              custom_attributes:
                plan_tier: Enterprise
                seat_count: 18
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact_payload_response'
              example:
                payload:
                  additional_attributes: {}
                  availability_status: offline
                  email: priya.raman@example.com
                  id: 263
                  name: Priya Raman
                  phone_number: '+14155550143'
                  blocked: false
                  identifier: null
                  thumbnail: ''
                  thumbnail_background_color: null
                  domain_logo_avatar: false
                  customer_verified: true
                  custom_attributes:
                    plan_tier: Enterprise
                    seat_count: 18
                  created_at: 1789963580
                  contact_inboxes: []
        '403':
          description: Access denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
        '422':
          description: Validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_validation'
      security:
        - userApiKey: []
components:
  parameters:
    account_id:
      in: path
      name: id
      schema:
        type: integer
      required: true
      description: The numeric ID of the account
  schemas:
    contact_update_payload:
      type: object
      properties:
        name:
          type: string
          description: name of the contact
          example: Alice
        email:
          type: string
          description: email of the contact
          example: alice@acme.inc
        blocked:
          type: boolean
          description: whether the contact is blocked or not
          example: false
        phone_number:
          type: string
          description: phone number of the contact
          example: '+123456789'
        avatar:
          type: string
          format: binary
          description: >-
            Send the form data with the avatar image binary or use the
            avatar_url
        avatar_url:
          type: string
          description: The url to a jpeg, png file for the contact avatar
          example: https://example.com/avatar.png
        identifier:
          type: string
          description: A unique identifier for the contact in external system
          example: '1234567890'
        additional_attributes:
          type: object
          description: >-
            An object where you can store additional attributes for contact.
            example {"type":"customer", "age":30}
          example:
            type: customer
            age: 30
        custom_attributes:
          type: object
          description: >-
            An object where you can store custom attributes for contact. example
            {"type":"customer", "age":30}, this should have a valid custom
            attribute definition.
          example: {}
    contact_payload_response:
      type: object
      description: >-
        Most single-contact responses wrap the contact in a `payload` key.
        Create is the exception — it nests it further, under `payload.contact`.
      properties:
        payload:
          $ref: '#/components/schemas/contact'
    error_message:
      type: object
      description: >-
        The shape returned by `render_unauthorized`, `render_not_found_error`
        and `render_could_not_create_error`.
      properties:
        error:
          type: string
          description: A single human-readable message.
          example: Resource could not be found
      required:
        - error
    error_validation:
      type: object
      description: >-
        The shape returned by `render_record_invalid` when a model validation
        fails.
      properties:
        message:
          type: string
          description: The record's full error messages, comma-joined.
          example: Url has already been taken
        attributes:
          type: array
          description: The attributes that failed validation.
          items:
            type: string
          example:
            - url
      required:
        - message
    contact:
      type: object
      properties:
        payload:
          type: array
          description: List of contacts
          items:
            type: object
            properties:
              additional_attributes:
                type: object
                description: >-
                  The object containing additional attributes related to the
                  contact
              availability_status:
                type: string
                description: The availability status of the contact
              email:
                type: string
                description: The email address of the contact
              id:
                type: integer
                description: The ID of the contact
              name:
                type: string
                description: The name of the contact
              phone_number:
                type: string
                description: The phone number of the contact
              blocked:
                type: boolean
                description: Whether the contact is blocked
              identifier:
                type: string
                description: The identifier of the contact
              thumbnail:
                type: string
                description: The thumbnail of the contact
              custom_attributes:
                type: object
                description: The custom attributes of the contact
                example:
                  attribute_key: attribute_value
                  signed_up_at: dd/mm/yyyy
              last_activity_at:
                type: integer
                description: The last activity at of the contact
              created_at:
                type: integer
                description: The created at of the contact
              contact_inboxes:
                type: array
                items:
                  $ref: '#/components/schemas/contact_inboxes'
                description: Every channel identity this contact has been seen on.
    contact_inboxes:
      type: object
      properties:
        source_id:
          type: string
          description: Contact Inbox Source Id
        inbox:
          $ref: '#/components/schemas/inbox_contact'
    inbox_contact:
      type: object
      properties:
        id:
          type: number
          description: ID of the inbox
        avatar_url:
          type: string
          description: The avatar image of the inbox
        channel_id:
          type: number
          description: The ID of the channel
          nullable: true
        name:
          type: string
          description: The name of the inbox
        channel_type:
          type: string
          description: The type of the inbox
        provider:
          type: string
          description: The provider of the inbox
          nullable: true
  securitySchemes:
    userApiKey:
      type: apiKey
      in: header
      name: api_access_token
      description: >-
        This token can be obtained by visiting the profile page or via rails
        console. Provides access to  endpoints based on the user permissions
        levels. This token can be saved by an external system when user is
        created via API, to perform activities on behalf of the user.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.