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

# Update contact

> Partially updates a contact. Re-fetches Gravatar if email changes.



## OpenAPI

````yaml https://folksbase.onrender.com/api/openapi.json patch /api/contacts/{id}
openapi: 3.1.0
info:
  title: folksbase API
  description: >-
    Contact management API for folksbase. Upload CSVs, manage contacts and tags,
    export data.
  version: 1.0.0
servers:
  - url: https://folksbase.onrender.com
    description: Production
  - url: http://localhost:3001
    description: Local development
security:
  - bearerAuth: []
paths:
  /api/contacts/{id}:
    patch:
      tags:
        - Contacts
      summary: Update contact
      description: Partially updates a contact. Re-fetches Gravatar if email changes.
      operationId: patchApiContactsById
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                  pattern: >-
                    ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                first_name:
                  type: string
                  minLength: 1
                  maxLength: 100
                last_name:
                  anyOf:
                    - type: string
                      maxLength: 100
                    - type: 'null'
                phone:
                  anyOf:
                    - type: string
                      maxLength: 50
                    - type: 'null'
                company:
                  anyOf:
                    - type: string
                      maxLength: 200
                    - type: 'null'
                notes:
                  anyOf:
                    - type: string
                    - type: 'null'
      responses:
        '200':
          description: Contact updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  workspace_id:
                    type: string
                    format: uuid
                    pattern: >-
                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                  email:
                    type: string
                  first_name:
                    type: string
                  last_name:
                    anyOf:
                      - type: string
                      - type: 'null'
                  phone:
                    anyOf:
                      - type: string
                      - type: 'null'
                  company:
                    anyOf:
                      - type: string
                      - type: 'null'
                  notes:
                    anyOf:
                      - type: string
                      - type: 'null'
                  avatar_url:
                    anyOf:
                      - type: string
                      - type: 'null'
                  is_unsubscribed:
                    type: boolean
                  custom_fields:
                    anyOf:
                      - type: object
                        propertyNames:
                          type: string
                        additionalProperties: {}
                      - type: 'null'
                  created_at:
                    type: string
                  updated_at:
                    type: string
                  tags:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        workspace_id:
                          type: string
                          format: uuid
                          pattern: >-
                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                        name:
                          type: string
                        color:
                          anyOf:
                            - type: string
                            - type: 'null'
                        emoji:
                          anyOf:
                            - type: string
                            - type: 'null'
                        created_at:
                          type: string
                      required:
                        - id
                        - workspace_id
                        - name
                        - color
                        - emoji
                        - created_at
                required:
                  - id
                  - workspace_id
                  - email
                  - first_name
                  - last_name
                  - phone
                  - company
                  - notes
                  - avatar_url
                  - is_unsubscribed
                  - custom_fields
                  - created_at
                  - updated_at
        '404':
          description: Contact not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                  message:
                    type: string
                  details: {}
                required:
                  - code
                  - message
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Supabase JWT token from Authorization header

````