Squarespace Contacts API

Manage customer contacts and address book entries for a website: create, read, update, delete, and query contacts; maintain addresses for shipping and fulfillment.

Operations 11

GET /v1/contacts List contacts #
POST /v1/contacts Create contact #
POST /v1/contacts/query Query contacts #
DELETE /v1/contacts/{contactId} Delete contact #
GET /v1/contacts/{contactId} Get contact #
PATCH /v1/contacts/{contactId} Update contact #
GET /v1/contacts/{contactId}/address-book Get address book #
POST /v1/contacts/{contactId}/address-book Create address book entry #
DELETE /v1/contacts/{contactId}/address-book/{addressBookEntryId} Delete address book entry #
GET /v1/contacts/{contactId}/address-book/{addressBookEntryId} Get address book entry #
PUT /v1/contacts/{contactId}/address-book/{addressBookEntryId} Replace address book entry #

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/squarespace-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 email required.

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

OpenAPI Specification

squarespace-contacts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Commerce Contacts API
  version: '2'
  description: 'Manage customer contacts and address book entries for a website: create, read, update, delete, and query contacts; maintain addresses for shipping and fulfillment.'
servers:
- url: https://api.squarespace.com
  description: Commerce API
security:
- Authorization: []
tags:
- description: 'Manage customer contacts and address book entries for a website: create, read, update, delete, and query contacts; maintain addresses for shipping and fulfillment.'
  name: Contacts
  x-zudoku-collapsed: true
paths:
  /v1/contacts:
    get:
      description: Returns a paginated list of contacts for the website. Requires OAuth website scope website.contacts.read or website.contacts, or API key scope CONTACT_READONLY or CONTACT, or OAuth website scope website.profiles.read or website.profiles (OAuth only).
      operationId: getContacts
      parameters:
      - description: number of contacts to retrieve per request
        in: query
        name: pageSize
        required: false
        schema:
          maximum: 1000
          minimum: 0
          type: integer
          format: int32
          default: 50
      - description: where next page of results begins. should be {pagination.nextPageCursor} from previous response.
        in: query
        name: cursor
        required: false
        schema:
          type: string
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedGetContactsResponse'
          description: A paginated list of contacts.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: 'Invalid pagination parameters: page size out of range or cursor not from a previous response.'
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: List contacts
      tags:
      - Contacts
    post:
      description: Creates a new contact. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: createContact
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateContactRequest'
        description: The contact to create.
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateContactResponse'
          description: The created contact.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Invalid input or malformed JSON.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: A contact with the same unique fields already exists.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Create contact
      tags:
      - Contacts
      parameters:
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
  /v1/contacts/query:
    post:
      description: Returns a paginated list of contacts matching filters and sort options in the request body. Requires OAuth website scope website.contacts.read or website.contacts, or API key scope CONTACT_READONLY or CONTACT, or OAuth website scope website.profiles.read or website.profiles (OAuth only).
      operationId: queryContacts
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryContactsRequest'
        description: Filters and sort order for the contact query.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedQueryContactsResponse'
          description: A paginated list of contacts matching the query.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Invalid input or malformed JSON.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Query contacts
      tags:
      - Contacts
      parameters:
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
  /v1/contacts/{contactId}:
    delete:
      description: Deletes the contact for the given contact ID. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: deleteContact
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '204':
          description: No content.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Delete contact
      tags:
      - Contacts
    get:
      description: Returns the contact for the given contact ID. Requires OAuth website scope website.contacts.read or website.contacts, or API key scope CONTACT_READONLY or CONTACT, or OAuth website scope website.profiles.read or website.profiles (OAuth only).
      operationId: getContact
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetContactResponse'
          description: The requested contact.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Get contact
      tags:
      - Contacts
    patch:
      description: Updates a contact using JSON merge patch. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: patchContact
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      requestBody:
        content:
          application/merge-patch+json:
            schema:
              $ref: '#/components/schemas/PatchContactRequest'
        description: Fields to update on the contact.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchContactResponse'
          description: The updated contact.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Malformed syntax or invalid request body.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact was not found.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The email address is already associated with another contact.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Update contact
      tags:
      - Contacts
  /v1/contacts/{contactId}/address-book:
    get:
      description: Returns paginated addresses for the contact. When there is at least one entry, exactly one is the default shipping address (defaultShippingAddressId and each entry's defaultShipping reflect this). The default shipping address (when present) is always included on the first page of results. Requires OAuth website scope website.contacts.read or website.contacts, or API key scope CONTACT_READONLY or CONTACT, or OAuth website scope website.profiles.read or website.profiles (OAuth only).
      operationId: getAddressBook
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - description: number of contacts to retrieve per request
        in: query
        name: pageSize
        required: false
        schema:
          maximum: 1000
          minimum: 0
          type: integer
          format: int32
          default: 50
      - description: where next page of results begins. should be {pagination.nextPageCursor} from previous response.
        in: query
        name: cursor
        required: false
        schema:
          type: string
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAddressBookResponse'
          description: Paginated list of the contact's addresses. When there is at least one entry, the first page always includes the default shipping address, and defaultShippingAddressId identifies it. On later pages, addressBookEntries is the next slice only; defaultShippingAddressId is present only when the default shipping entry appears in that slice.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Get address book
      tags:
      - Contacts
    post:
      description: Creates a new address book entry for the contact. If this is the contact's only address book entry after creation, it becomes the default shipping address even when defaultShipping is false. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: createAddressBookEntry
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAddressBookEntryRequest'
        description: The address book entry to create.
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAddressBookEntryResponse'
          description: The created address book entry.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Invalid input or malformed JSON.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Create address book entry
      tags:
      - Contacts
  /v1/contacts/{contactId}/address-book/{addressBookEntryId}:
    delete:
      description: Deletes the address book entry for the contact. If the deleted entry was the default shipping address, another entry is assigned as the default. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: deleteAddressBookEntry
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - description: The address book entry's ID.
        in: path
        name: addressBookEntryId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 5f8d0d55b54764421b7156aa
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '204':
          description: No content.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact or address book entry was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Delete address book entry
      tags:
      - Contacts
    get:
      description: Returns a single address book entry for the contact. Requires OAuth website scope website.contacts.read or website.contacts, or API key scope CONTACT_READONLY or CONTACT, or OAuth website scope website.profiles.read or website.profiles (OAuth only).
      operationId: getAddressBookEntry
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - description: The address book entry's ID.
        in: path
        name: addressBookEntryId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 5f8d0d55b54764421b7156aa
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAddressBookEntryResponse'
          description: The requested address book entry.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact or address book entry was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Get address book entry
      tags:
      - Contacts
    put:
      description: Replaces an address book entry for the contact with a full JSON body. When updating the entry that is currently the default, setting "defaultShipping" from true to false has no effect. Requires OAuth website scope website.contacts, or API key scope CONTACT, or OAuth website scope website.profiles (OAuth only).
      operationId: updateAddressBookEntry
      parameters:
      - description: The contact's ID.
        in: path
        name: contactId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 64a7e3d2c8f1b95e30a14d2b
      - description: The address book entry's ID.
        in: path
        name: addressBookEntryId
        required: true
        schema:
          type: string
        examples:
          default:
            value: 5f8d0d55b54764421b7156aa
      - in: header
        name: Authorization
        required: true
        description: API key or OAuth access token
        schema:
          type: string
          default: Bearer YOUR_API_KEY_OR_OAUTH_TOKEN
      - in: header
        name: User-Agent
        required: true
        description: User Agent
        schema:
          type: string
          default: YOUR_CUSTOM_APP_DESCRIPTION
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAddressBookEntryRequest'
        description: The replacement address book entry.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateAddressBookEntryResponse'
          description: The updated address book entry.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Invalid input or malformed JSON.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Forbidden. Insufficient scope (OAuth or API key), or the requested resource is not accessible for the authenticated website.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: The contact or address book entry was not found.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StandardErrorPayload'
          description: Too many requests. The rate limit for this endpoint has been exceeded.
      summary: Replace address book entry
      tags:
      - Contacts
components:
  schemas:
    CreateContactResponse:
      type: object
      properties:
        contact:
          $ref: '#/components/schemas/Contact'
    CreateAddressBookEntryResponse:
      type: object
      properties:
        addressBookEntry:
          $ref: '#/components/schemas/AddressBookEntry'
    AddressBook:
      type: object
      properties:
        addressBookEntries:
          type: array
          description: List of Address Book Entries
          items:
            $ref: '#/components/schemas/AddressBookEntry'
        defaultShippingAddressId:
          type: string
          description: The id of the address book entry that is the default shipping address.
      description: Address settings for a contact. When there is at least one address book entry, exactly one is the default shipping address; default shipping address is always returned on the first page of paginated results).
    UpdateAddressBookEntryRequest:
      required:
      - address
      type: object
      properties:
        address:
          $ref: '#/components/schemas/ContactAddress'
        defaultShipping:
          type: boolean
          description: Whether this entry should be the default shipping address. When updating the entry that is currently the default, changing this value from true to false has no effect.
    IntegerFilter:
      type: object
      properties:
        max:
          type: integer
          description: Filter out any numbers greater
          format: int32
        min:
          type: integer
          description: Filter out any numbers lower
          format: int32
      description: Object for filtering by a min and max integer
    CreateContactRequest:
      required:
      - firstName
      - lastName
      - locale
      - primaryEmail
      type: object
      properties:
        firstName:
          type: string
          description: Contact's first name
          examples:
          - john
        lastName:
          type: string
          description: Contact's last name
          examples:
          - doe
        locale:
          type: string
          description: Contact's locale
          examples:
          - en-US
        primaryEmail:
          $ref: '#/components/schemas/CreateEmail'
    CreateEmail:
      required:
      - email
      type: object
      properties:
        acceptsMarketing:
          type: boolean
          description: If contact's email accepts marketing
          default: false
        email:
          type: string
          format: email
          description: The email address.
          examples:
          - jane.doe@example.com
      description: Primary email supplied when creating a contact.
    PatchContactRequest:
      type: object
      properties:
        firstName:
          type: string
          description: The contact's first name.
          examples:
          - John
        lastName:
          type: string
          description: The contact's last name.
          examples:
          - Smith
        locale:
          type: string
          description: The contact's locale.
          examples:
          - en-US
        primaryEmail:
          $ref: '#/components/schemas/PatchEmail'
      description: Fields to update on an existing contact.
      examples:
      - firstName: John
        lastName: Smith
        locale: en-US
        primaryEmail:
          email: johnsmith@mail.com
          acceptsMarketing: true
    GetAddressBookEntryResponse:
      type: object
      properties:
        addressBookEntry:
          $ref: '#/components/schemas/AddressBookEntry'
    PaginatedGetContactsResponse:
      type: object
      properties:
        contacts:
          type: array
          description: paginated list of contacts retrieved
          items:
            $ref: '#/components/schemas/Contact'
        pagination:
          examples:
          - hasNextPage: true
            nextPageCursor: ewogICJhIiA6ICI2OWNhOWExZjgxNGMwYTY0MmIwMTIzYzkiLAogICJiIiA6ICJJRCIKfQ
            nextPageUrl: /v1/contacts?cursor=ewogICJhIiA6ICI2OWNhOWExZjgxNGMwYTY0MmIwMTIzYzkiLAogICJiIiA6ICJJRCIKfQ
          type: object
          properties:
            hasNextPage:
              type: boolean
            nextPageCursor:
              type: string
            nextPageUrl:
              type: string
    QueryContactsRequest:
      type: object
      properties:
        acceptsMarketingWithDate:
          $ref: '#/components/schemas/AcceptsMarketingWithDate'
        cursor:
          type: string
          description: The cursor for the next page of results. Use the value of `pagination.nextPageCursor` from the previous response.
        donationAmount:
          $ref: '#/components/schemas/IntegerFilter'
        donationCount:
          $ref: '#/components/schemas/IntegerFilter'
        firstDonationOn:
          $ref: '#/components/schemas/DateFilter'
        firstOrderOn:
          $ref: '#/components/schemas/DateFilter'
        lastDonationOn:
          $ref: '#/components/schemas/DateFilter'
        lastOrderOn:
          $ref: '#/components/schemas/DateFilter'
        orderAmount:
          $ref: '#/components/schemas/IntegerFilter'
        orderCount:
          $ref: '#/components/schemas/IntegerFilter'
        pageSize:
          maximum: 1000
          minimum: 1
          type: integer
          description: The number of contacts to return per request.
          format: int32
          default: 50
        searchString:
          type: string
          description: Search string for Name and Email address
        sortDirection:
          type: string
          description: Direction to sort results, ASCENDING or DESCENDING
          enum:
          - ASCENDING
          - DESCENDING
        sortField:
          type: string
          description: Field to sort results by
          enum:
          - ID
          - CREATED_ON
          - EMAIL
          - ACCEPTS_MARKETING_JOINED_ON
          - FIRST_NAME
          - LAST_NAME
          - ORDER_COUNT
          - LAST_ORDER_ON
          - ORDER_AMOUNT
          - DONATION_COUNT
          - LAST_DONATION_ON
          - DONATION_AMOUNT
      examples:
      - acceptsMarketingWithDate:
          acceptsMarketing: true
          joinedOn:
            before: '2025-11-21T10:00:00Z'
            after: '2020-11-26T14:30:00Z'
        searchString: jane
        firstOrderOn:
          before: '2025-11-21T10:00:00Z'
          after: '2025-11-26T14:30:00Z'
        lastOrderOn:
          before:

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