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

# Update Contact

> 
<Note>`WRITE` access to the `CONTACT` module is required to access this endpoint</Note>
<Tip>The `contactEdited` webhook will be fired when this endpoint has run successfully</Tip><Warning>Unlike virtually every other model, contact `id` **cannot be assumed to be unique. Use `uuid` instead.**<br/> <br/>Contacts may be either people or organizations and these are stored in separate tables in the database, each with its own auto-incrementing identifier.<br/><br/> The contacts model creates a union between these two tables to allow simplified operations under a single namespace.</Warning>




## OpenAPI

````yaml /api-reference/openapi-mintlify.yaml put /v2/contact
openapi: 3.0.0
info:
  title: Sonderplan API
  description: >
    ## Overview

    You can use our REST API to securely access and modify the data within your
    Sonderplan account. This includes all the information within your bookings,
    projects and invoices that you can use to import / export data or create
    integrations with other systems and software that you use


    ### General Notes


    #### Specifying Fields

    The Sonderplan REST API allows you to specify a comma delimited string of
    exactly which fields are returned, using the `fields` parameter. Using this
    parameter has several advantages including:


    1. In future API versions we may change which fields are presented by
    default, so explicitly specifying the fields required overrides the defaults
    and ensure the fields are served

    2. Limiting fields reduces the processing we need to do and allows us to
    send you the data faster

    3. Some search filters only work if the field you are searching is added to
    the `fields` parameter.


    Example:


    ```

    fields=id,name,start,duration_min

    ```


    ### Applying Filters


    The Query Parameters section in each endpoint shows you special options that
    can be added to your request to customise the response we send you.


    Most endpoints offer the following query params:


    | Query Parameter |
    Description                                                    |

    |-----------------|----------------------------------------------------------------|

    | `fields`        | Only send the specified
    fields                                 |

    | `id`            | Specify one or more ids (comma seperated) of records to
    return |

    | `limit`         | The maximum number of records to
    return                        |

    | `page`          | The page number of records to
    return                           |

    | `order_asc` | Specify which field should be used to sort records
    `ascending` |

    | `order_desc` | Specify which field should be used to sort records
    `descending` |


    In addition to the standard `id` param, you can also specify most other
    fields as a query parameter, useful for performing searching and filtering
    of records.


    For example, you can specify `repeat_master_id=<repeat_booking_id>` to
    return all repeat children of that booking.


    #### Other Query Params


    Refer to the specific API endpoint documentation to see which other query
    params can be used.


    For example, some endpoints allow specifying `updated_after=<UNIX
    TIMESTAMP>` which will only send added, edited and even deleted records that
    were modified after the unix timestamp.


    #### Applying multiple filters


    By default, multiple filters are chained together using **OR** (either
    filter can be true and it will be included). You can change this behaviour
    by specifying `filter_operator=AND`, so each filter must be true to be
    included.


    #### Filtering by Custom Field Values


    For modules that include custom fields, you can search by the value of a
    custom field by adding the `custom_field_<field id>` to the URL query
    parameters. You **must** also specify the custom field in the `fields`
    parameter.


    ```

    GET
    https://api.sonderplan.com/v2/booking?fields=id,name,custom_field_238938&custom_field_238938=Offline

    ```


    This will return custom fields that contain the word 'Offline'.
  contact:
    email: info@sonderplan.com
  version: '2.0'
servers:
  - url: https://api.sonderplan.com
    description: Production Server
security: []
tags:
  - name: Booking
    description: Booking related operations
  - name: Project
    description: Project related operations
  - name: Resource
    description: Resource related operations
  - name: Contact
    description: Contact related operations
  - name: Quote
    description: Quote related operations
  - name: Invoice
    description: Invoice related operations
  - name: Invoice Template
    description: Invoice template related operations
  - name: Billable Item
    description: Billable item related operations
  - name: Rate Scheme
    description: Rate scheme related operations
  - name: Tax
    description: Tax related operations
  - name: Workspace
    description: Workspace (formerly Schedule) related operations
  - name: User
    description: User related operations
  - name: Group
    description: Group related operations
  - name: Status
    description: Status related operations
  - name: Custom Field
    description: Custom field related operations
  - name: Calendar Subscription
    description: Calendar Subscription Import related operations
  - name: Time Entry
    description: Time Entry related operations
  - name: Time Activity
    description: Time Activity related operations
paths:
  /v2/contact:
    put:
      tags:
        - Contact
      summary: Update Contact
      description: >

        <Note>`WRITE` access to the `CONTACT` module is required to access this
        endpoint</Note>

        <Tip>The `contactEdited` webhook will be fired when this endpoint has
        run successfully</Tip><Warning>Unlike virtually every other model,
        contact `id` **cannot be assumed to be unique. Use `uuid`
        instead.**<br/> <br/>Contacts may be either people or organizations and
        these are stored in separate tables in the database, each with its own
        auto-incrementing identifier.<br/><br/> The contacts model creates a
        union between these two tables to allow simplified operations under a
        single namespace.</Warning>
      operationId: 0ef41e39f41b8ccefc1393b794dfc10c
      parameters:
        - name: uuid
          in: query
          description: The uuid of the contact to update
          required: true
          schema:
            type: string
      requestBody:
        description: Contact object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/success'
        '401':
          description: Authorization information is missing or invalid
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/notFound'
      security:
        - bearer: []
components:
  schemas:
    Contact:
      title: Contact Model
      description: The default contact schema
      type: object
      allOf:
        - properties:
            id:
              description: Non unique, automatically generated contact identifier
              type: integer
              readOnly: true
              example: 89420384
            uuid:
              description: >-
                Unique automatically generated contact universally unique
                identifier
              type: string
              readOnly: true
              example: p89420384
            name:
              description: Full name of the contact
              type: string
              example: Sam Smith
            type:
              description: Type of the contact
              type: string
              enum:
                - person
                - organization
              example: person
            linked_organization_id:
              description: >-
                The organization id that this contact has been added to. Applies
                only for 'person' type contacts.
              type: integer
              example: 137834
            linked_resource_id:
              description: >-
                The resource id that this contact has been added to. Applies
                only for 'person' type contacts.
              type: integer
              readOnly: true
              example: 237449
            client:
              description: If true, the contact will be selectable in client menus
              type: boolean
              example: true
            user:
              description: If true, the contact is linked to a user. Hidden by default
              type: boolean
              readOnly: true
              example: true
            resource:
              description: If true, the contact is linked to a resource. Hidden by default
              type: boolean
              readOnly: true
              example: true
            email_1:
              description: Primary email address of the contact
              type: string
              example: sam.smith@example.com
            email_2:
              description: Secondary email address of the contact
              type: string
              example: sam.smith2@example.com
            email_3:
              description: Tertiary email address of the contact
              type: string
              example: ''
            phone_1:
              description: Primary phone number of the contact
              type: string
              example: +1-541-754-3010
            phone_2:
              description: Secondary phone number of the contact
              type: string
              example: ''
            phone_3:
              description: Tertiary phone number of the contact
              type: string
              example: ''
            address_line_1:
              description: Contacts address first line
              type: string
              example: Unit 1/43
            address_line_2:
              description: Contacts address second line
              type: string
              example: 123 Example Street
            address_line_3:
              description: Contacts address third line
              type: string
              example: ''
            address_city:
              description: Contacts city
              type: string
              example: Surry Hills
            address_state:
              description: Contacts state
              type: string
              example: NSW
            address_postcode:
              description: Contacts state
              type: string
              example: '2010'
            address_country:
              description: Contacts country
              type: string
              example: Australia
            website:
              description: Website of the contact
              type: string
              example: www.example.com
            icon:
              description: Icon / avatar of the contact
              type: object
            custom_fields:
              type: array
              items:
                $ref: '#/components/schemas/CustomFieldOnObject'
          type: object
        - $ref: '#/components/schemas/extendedModelMeta'
    success:
      title: Success Response
      properties:
        success:
          properties:
            id:
              type: integer
              example: 1
          type: object
      type: object
    notFound:
      title: Not Found Response
      description: Class OpenApi
      properties:
        error:
          properties:
            code:
              description: The HTTP error code
              type: integer
              example: '404'
            message:
              description: More detail on the error encountered
              type: string
              example: Requested resource was not found
          type: object
      type: object
    CustomFieldOnObject:
      title: Custom Field Module Value
      description: Used to show the values of custom fields on linked modules
      properties:
        id:
          description: The ID of the custom field
          type: integer
          example: 7823
        name:
          description: The name of the custom field
          type: string
          example: Type
        value:
          description: The text value of the custom field, null if not defined
          type: string
          example: Video Editing
        value_id:
          description: >-
            The ID of the selected option, (applied only if the custom field is
            of type `select`)
          type: integer
          example: 8973
        update_key:
          description: The update key to pass back when updating this field
          type: string
          example: '2_1_7823'
          deprecated: true
      type: object
    extendedModelMeta:
      title: Extended Meta Model
      properties:
        created_id:
          description: The unique ID of the person (user) who created this record
          type: integer
          readOnly: true
          example: 3
        created:
          description: The UNIX time value of the creation time
          type: integer
          readOnly: true
          example: 1388552400
        created_name:
          description: The full name of the person (user) who created this record
          type: string
          readOnly: true
          example: John Smith
        updated_id:
          description: The unique ID of the person (user) who last updated this record
          type: integer
          readOnly: true
          example: 3
        updated:
          description: The UNIX time value of the last update
          type: integer
          readOnly: true
          example: 1388552400
        updated_name:
          description: The full name of the person (user) who last updated this record
          type: string
          readOnly: true
          example: John Smith
      type: object
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````