Spruce Health Contacts API

The Contacts API from Spruce Health — 6 operation(s) for contacts.

Operations 11

GET /contacts List contacts #
POST /contacts Create a contact #
DELETE /contacts/{contactId} Delete a contact #
GET /contacts/{contactId} Get a contact by Spruce Contact ID #
PATCH /contacts/{contactId} Update a contact #
GET /contacts/{contactId}/conversations List the conversations associated with a contact #
POST /contacts/{contactId}/invite Invite patient to Spruce #
POST /contacts/search Search contacts #

Documentation

Specifications

Other Resources

🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contact-fields.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contact-fields.opencollection.json
🔗
AgenticAccess
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/agentic-access/spruce-health-agentic-access.yml
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contact-tags.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contact-tags.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contacts.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-contacts.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversation-item.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversation-item.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversation-tags.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversation-tags.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversations.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-conversations.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-internal-endpoints.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-internal-endpoints.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-media.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-media.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-organization.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-organization.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-phone-lines.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-phone-lines.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-saved-messages.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-saved-messages.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-scheduled-messages.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-scheduled-messages.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-teams.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-teams.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-transcription.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-transcription.opencollection.json
🔗
PostmanCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-webhooks.postman_collection.json
🔗
OpenCollection
https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/collections/spruce-health-webhooks.opencollection.json

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/spruce-health-contacts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

spruce-health-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Spruce Health Contacts API
  version: 1.0.0
  description: The Contacts operations of the Spruce Health API, split by tag from the OpenAPI Spruce Health publishes for developer.sprucehealth.com (ReadMe registry @spruce/v1.0#13needamst2v4m6). Base https://api.sprucehealth.com/v1, Bearer organization token.
  contact:
    name: Spruce Health
    url: https://developer.sprucehealth.com
servers:
- url: https://api.sprucehealth.com/v1
  variables:
    domain:
      default: api.sprucehealth.com
security:
- spruceAPIToken: []
tags:
- name: Contacts
paths:
  /contacts:
    get:
      description: 'This operation lists all contacts available to a given organization.


        The `hasMore` field can be used to determine if there are remaining results to list. The `paginationToken` field can be provided on subsequents calls to retrieve the next page of results.

        '
      operationId: ListContacts
      parameters:
      - description: How many contacts to return at one time
        in: query
        name: pageSize
        required: false
        schema:
          format: int32
          maximum: 500
          minimum: 1
          type: integer
      - in: query
        name: paginationToken
        required: false
        schema:
          $ref: '#/components/schemas/paginationToken'
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  contacts:
                    items:
                      $ref: '#/components/schemas/contact'
                    type: array
                  hasMore:
                    $ref: '#/components/schemas/hasMore'
                  paginationToken:
                    $ref: '#/components/schemas/paginationToken'
                  totalCount:
                    $ref: '#/components/schemas/totalCount'
                required:
                - totalCount
                - contacts
                - hasMore
                type: object
          description: A paged array of contacts
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: List contacts
      tags:
      - Contacts
    post:
      description: 'This operation creates a contact within an organization.


        Creating a new contact requires at least of the following fields to be populated (`givenName`, `familyName`, `phoneNumbers`, `faxNumbers`, `emailAddresses`).

        '
      operationId: CreateContact
      parameters:
      - $ref: '#/components/parameters/s-idempotency-key'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/createContact'
              description: Contact json object. At least one name or piece of contact information is required
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
          description: created
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: duplicate request
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Create a contact
      tags:
      - Contacts
  /contacts/{contactId}:
    delete:
      description: 'This operation deletes a specific contact by id.


        See the `canDelete` field on a given contact to determine if deletion is allowed.

        '
      operationId: DeleteContact
      parameters:
      - description: The id of the contact to delete
        in: path
        name: contactId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ok response
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Delete a contact
      tags:
      - Contacts
    get:
      description: This operation retrieves a specific contact by id.
      operationId: Contact
      parameters:
      - description: The id of the contact to retrieve
        in: path
        name: contactId
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
          description: Expected response to a valid request
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Get a contact by Spruce Contact ID
      tags:
      - Contacts
    patch:
      description: 'This operation updates a specific contact by id.


        Fields provided in the input object will be updated, omitted fields *(null)* will be unchanged.

        '
      operationId: UpdateContact
      parameters:
      - $ref: '#/components/parameters/s-idempotency-key'
      - description: The id of the contact to update
        in: path
        name: contactId
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/updateContact'
              description: Contact json object. Omitted fields are not updated.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/contact'
          description: ok response
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: duplicate request
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Update a contact
      tags:
      - Contacts
  /contacts/{contactId}/conversations:
    get:
      description: This operation retrieves the conversations associated with a contact
      operationId: ContactConversations
      parameters:
      - description: The id of the contact to fetch conversations for
        in: path
        name: contactId
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  conversations:
                    items:
                      $ref: '#/components/schemas/conversation'
                    type: array
                required:
                - conversations
                type: object
          description: Expected response to a valid request
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: List the conversations associated with a contact
      tags:
      - Contacts
  /contacts/{contactId}/integrationlinks:
    delete:
      description: This operation deletes a specific integration link associated with a contact.
      operationId: DeleteContactIntegrationLink
      parameters:
      - description: The id of the contact to delete the integration link for.
        in: path
        name: contactId
        required: true
        schema:
          type: string
      - description: The identifier of the integration type the existing integration link is for.
        in: query
        name: type
        required: false
        schema:
          $ref: '#/components/schemas/contact_integrationLinkType'
      - description: The id of the contact in the external integrated system.
        in: query
        name: externalId
        required: false
        schema:
          $ref: '#/components/schemas/contact_externalId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contact_deleteContactIntegrationLink'
        required: false
      responses:
        '200':
          description: ok response
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Delete an integration link
      tags:
      - Contacts
    get:
      description: This operation retrieves the integration links associated with a contact
      operationId: ContactIntegrationLinks
      parameters:
      - description: The unique identifier of the contact
        in: path
        name: contactId
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  integrationLinks:
                    $ref: '#/components/schemas/contact_integrationLinks'
                required:
                - integrationLinks
                type: object
          description: Expected response to a valid request
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: List the integration links associated with a contact
      tags:
      - Contacts
    post:
      description: This operation creates a link between a contact and an external system with which the Spruce account is integrated.
      operationId: CreateContactIntegrationLink
      parameters:
      - $ref: '#/components/parameters/s-idempotency-key'
      - description: The id of the contact for which the integration link should be created.
        in: path
        name: contactId
        required: true
        schema:
          type: string
      - description: The integration type of the existing integration link.
        in: query
        name: type
        required: false
        schema:
          $ref: '#/components/schemas/contact_integrationLinkType'
      - description: The id of the contact in the external integrated system.
        in: query
        name: externalId
        required: false
        schema:
          $ref: '#/components/schemas/contact_externalId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contact_createContactIntegrationLink'
        required: false
      responses:
        '201':
          content:
            application/json:
              schema:
                properties:
                  integrationLinks:
                    $ref: '#/components/schemas/contact_integrationLinks'
                required:
                - integrationLinks
                type: object
          description: created
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: duplicate request
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Create an integration link
      tags:
      - Contacts
  /contacts/{contactId}/invite:
    post:
      description: 'This operation sends an invite to a patient contact:

        - If the contact is invited for the first time, a new secure conversation will be created,

        - If the contact is already invited, the invite will be re-sent to the same secure conversation,

        - If the contact is already on Spruce, an error will be returned.

        '
      operationId: SendInvite
      parameters:
      - description: The id of the contact to invite.
        in: path
        name: contactId
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/sendInvite'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  contact:
                    $ref: '#/components/schemas/contact'
                  conversation:
                    $ref: '#/components/schemas/conversation'
                required:
                - contact
                - conversation
                type: object
          description: Expected response to a valid request
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Invite patient to Spruce
      tags:
      - Contacts
  /contacts/search:
    post:
      description: 'This operation searches all contacts available to a given organization and returns a resulting set of results.



        The `hasMore` field can be used to determine if there are remaining results to list. The `paginationToken` field can be provided on subsequents calls to retrieve the next page of results.



        ## Sort Order


        Results are sorted by **entity ID in ascending order** when doing a structured search and by **relevance** for free text search.


        Why is this a `POST`? `GET` requests with a body are not supported by all HTTP libraries. To support complex nested search filters and other tooling, the `POST` body is leveraged.

        '
      operationId: SearchContacts
      parameters:
      - description: How many contacts to return at one time
        in: query
        name: pageSize
        required: false
        schema:
          format: int32
          maximum: 500
          minimum: 1
          type: integer
      - in: query
        name: paginationToken
        required: false
        schema:
          $ref: '#/components/schemas/paginationToken'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/contactSearch'
              description: Contact Search json object.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  contacts:
                    items:
                      $ref: '#/components/schemas/contact'
                    type: array
                  hasMore:
                    $ref: '#/components/schemas/hasMore'
                  paginationToken:
                    $ref: '#/components/schemas/paginationToken'
                  totalCount:
                    $ref: '#/components/schemas/totalCount'
                  totalCountRelation:
                    $ref: '#/components/schemas/searchTotalCountRelation'
                required:
                - totalCount
                - totalCountRelation
                - contacts
                - hasMore
                type: object
          description: A paged array of contacts
          headers:
            s-ratelimit-limit:
              $ref: '#/components/headers/s-ratelimit-limit'
            s-ratelimit-remaining:
              $ref: '#/components/headers/s-ratelimit-remaining'
            s-request-id:
              $ref: '#/components/headers/s-request-id'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: bad request
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
          description: unexpected error
      summary: Search contacts
      tags:
      - Contacts
components:
  schemas:
    contact_searchInviteFilter:
      properties:
        inviteStates:
          items:
            $ref: '#/components/schemas/contact_searchInviteStateFilter'
          type: array
        match:
          $ref: '#/components/schemas/searchListMatchFilter'
      required:
      - inviteStates
      - match
      type: object
    contact_organizationContactFields:
      description: Fields on a contact that are custom
      items:
        $ref: '#/components/schemas/contact_organizationContactField'
      type: array
    contact_displayName:
      description: The contact's full name for easy display to a user. This is determined by combining the givenName, middleName, and familyName, or if those are all empty, falling back to companyName, phone number or email address.
      example: Joe William Smith
      type: string
    conversation_tagId:
      description: Spruce's conversation tag ID
      example: tag_0E5QDGJC03000
      type: string
    objectType:
      description: String representing the object's type
      type: string
    faxNumberInput:
      properties:
        label:
          $ref: '#/components/schemas/phoneNumberLabel'
        value:
          $ref: '#/components/schemas/phoneNumberValue'
      required:
      - value
      type: object
    paginationToken:
      description: Token given in a previous response to allow requesting the next page
      example: abcdefghijklmnop
      type: string
    contact_faxNumbers:
      items:
        $ref: '#/components/schemas/faxNumber'
      type: array
    contact_searchCategoryFilters:
      items:
        $ref: '#/components/schemas/contact_searchCategoryFilter'
      type: array
    emailAddress:
      properties:
        id:
          $ref: '#/components/schemas/entityContactID'
        label:
          description: A label for the email address such as 'Work', 'Home', etc.
          example: Work
          type: string
        value:
          $ref: '#/components/schemas/emailAddressValue'
      required:
      - id
      - value
      type: object
    contact_organizationContactFieldInput:
      properties:
        id:
          $ref: '#/components/schemas/contact_organizationContactFieldId'
        value:
          $ref: '#/components/schemas/contact_customFieldValue'
      required:
      - id
      - value
      type: object
    contact_searchGenderFilters:
      items:
        $ref: '#/components/schemas/contact_searchGenderFilter'
      type: array
    contact_emailAddressInputs:
      items:
        $ref: '#/components/schemas/emailAddressInput'
      type: array
    conversation_tagValue:
      description: The text value of a conversation tag
      example: Smith
      type: string
    faxNumber:
      properties:
        displayValue:
          $ref: '#/components/schemas/phoneNumberDisplayValue'
        id:
          $ref: '#/components/schemas/entityContactID'
        label:
          $ref: '#/components/schemas/phoneNumberLabel'
        value:
          $ref: '#/components/schemas/phoneNumberValue'
      required:
      - id
      - value
      - displayValue
      type: object
    createContact:
      properties:
        category:
          $ref: '#/components/schemas/contact_categoryInput'
        companyName:
          $ref: '#/components/schemas/contact_companyName'
        dateOfBirth:
          $ref: '#/components/schemas/contact_dateOfBirth'
        emailAddresses:
          $ref: '#/components/schemas/contact_emailAddressInputs'
        familyName:
          $ref: '#/components/schemas/contact_familyName'
        faxNumbers:
          $ref: '#/components/schemas/contact_faxNumberInputs'
        gender:
          $ref: '#/components/schemas/contact_gender'
        genderDetail:
          $ref: '#/components/schemas/contact_genderDetail'
        givenName:
          $ref: '#/components/schemas/contact_givenName'
        internalMemberIds:
          $ref: '#/components/schemas/contact_internalMemberIds'
        middleName:
          $ref: '#/components/schemas/contact_middleName'
        organizationContactFields:
          $ref: '#/components/schemas/contact_organizationContactFieldInputs'
        phoneNumbers:
          $ref: '#/components/schemas/contact_phoneNumberInputs'
        pronouns:
          $ref: '#/components/schemas/contact_pronouns'
        tagIds:
          $ref: '#/components/schemas/contact_tagIds'
      type: object
    conversation_tags:
      items:
        $ref: '#/components/schemas/conversation_tag'
      type: array
    contact_internalMemberIds:
      description: The ids of the teammates, teams and/or your organization that are members of the contact. Contact Membership must be enabled for the organization for this field to be interacted with.
      items:
        type: string
      type: array
    contact_searchEmailAddressFilters:
      items:
        $ref: '#/components/schemas/contact_searchEmailAddressFilter'
      type: array
    contact_searchGenderFilter:
      properties:
        genders:
          items:
            $ref: '#/components/schemas/contact_gender'
          type: array
        match:
          $ref: '#/components/schemas/searchListMatchFilter'
      required:
      - genders
      - match
      type: object
    conversation_id:
      description: Spruce's conversation ID
      example: t_0E5QDGJC03000
      type: string
    contact_genderDetail:
      description: Optional free-text details for gender
      example: Non-binary
      type: string
    contact_createContactIntegrationLink:
      properties:
        externalId:
          $ref: '#/components/schemas/contact_externalId'
          description: The id of the contact in the external integrated system.
        type:
          $ref: '#/components/schemas/contact_integrationLinkType'
          description: The integration type of the integration link.
        url:
          description: The URL to the contact in the external system (only for custom integration links).
          example: https://example.com/contacts/123
          type: string
      type: object
    contact:
      properties:
        apiURL:
          description: An absolute URL for fetching this contact from the API
          example: https://api.sprucehealth.com/contact/entity_0E5QDGJC03000
          format: url
          type: string
        appURL:
          description: An absolute URL to view the contact in the Spruce app
          example: https://app.sprucehealth.com/org/entity_0D4QABCC06000/contact/entity_0E5QDGJC03000
          format: url
          type: string
        canDelete:
          description: Whether the contact may be deleted.
          example: true
          type: boolean
        canEdit:
          description: Whether the contact may be edited.
          example: true
          type: boolean
        category:
          $ref: '#/components/schemas/contact_category'
        companyName:
          $ref: '#/components/schemas/contact_companyName'
        created:
          description: The date this contact was added to Spruce
          example: '2021-01-30T08:30:00Z'
          format: date-time
          type: string
        customContactFields:
          $ref: '#/components/schemas/contact_customContactFields'
        dateOfBirth:
          $ref: '#/components/schemas/contact_dateOfBirth'
        displayName:
          $ref: '#/components/schemas/contact_displayName'
        emailAddresses:
          $ref: '#/components/schemas/contact_emailAddresses'
        familyName:
          $ref: '#/components/schemas/contact_familyName'
        faxNumbers:
          $ref: '#/components/schemas/contact_faxNumbers'
        gender:
          $ref: '#/components/schemas/contact_gender'
        genderDetail:
          $ref: '#/components/schemas/contact_genderDetail'
        givenName:
          $ref: '#/components/schemas/contact_givenName'
        hasAccount:
          description: Whether the contact has created a Spruce account for secure messaging, video calling, etc.
          example: true
          type: boolean
        hasPendingInvite:
          description: Whether the contact has a pending Spruce account invitation
          example: true
          type: boolean
        id:
          $ref: '#/components/schemas/contact_id'
        integrationLinks:
          $ref: '#/components/schemas/contact_integrationLinks'
        internalMemberIds:
          $ref: '#/components/schemas/contact_internalMemberIds'
        middleName:
          $ref: '#/components/schemas/contact_middleName'
        object:
          $ref: '#/components/schemas/objectType'
        organizationContactFields:
          $ref: '#/components/schemas/contact_organizationContactFields'
        phoneNumbers:
          $ref: '#/components/schemas/contact_phoneNumbers'
        pronouns:
          $ref: '#/components/schemas/contact_pronouns'
        tags:
          $ref: '#/components/schemas/contact_tags'
      required:
      - id
      - displayName
      - tags
      - gender
      - category
      - created
      - phoneNumbers
      - emailAddresses
      - customFields
      - appURL
      - apiURL
      - hasAccount
      - hasPendingInvite
      - customContactFields
      - organizationContactFields
      - canDelete
      - canEdit
      - integrationLinks
      - object
      - internalMemberIds
      type: object
    contact_categoryInput:
      enum:
      - patient
      - professional
      example: patient
      type: string
    conversation:
      properties:
        apiURL:
          description: An absolute URL for fetching this conversation from the API
          example: https://api.sprucehealth.com/conversations/t_0E5QDJJC03000
          format: url
          type: string
        appURL:
          description: An absolute URL to view the conversation in the Spruce app
          example: https://app.sprucehealth.com/org/entity_0D4QABCC06000/thread/t_0E5QDJJC03000
          format: url
          type: string
        archived:
          description: Whether or not the conversation is archived
          example: false
          type: boolean
        assignedToMemberId:
          description: The id of the teammate the conversation is assigned to
          example: entity_0D4QABCC06000
          type: string
        associatedContactIds:
          description: The ids of the contacts associated with the conversation. This may include contacts that are not a part of the conversation. For example, the conversation may be with parents, but associated with a contact representing their child.
          example:
          - entity_0D4QABCC06000
          items:
            type: string
          type: array
        createdAt:
          description: The date the conversation was created
          example: '2020-04-01T00:00:00Z'
          forma

# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spruce-health/refs/heads/main/openapi/spruce-health-contacts-api-openapi.yml