Vitally Users API

The Users API from Vitally — 3 operation(s) for users.

OpenAPI Specification

vitally-users-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Vitally REST Accounts Users API
  version: '1.0'
  x-generated: '2026-07-21'
  x-method: generated
  x-source: https://docs.vitally.io/en/articles/9880649-rest-api-overview and the per-resource REST API reference articles (accounts, users, tasks, organizations, notes, conversations, npsResponses, admins, customObjects). Operations, hosts, authentication, pagination and error semantics are taken verbatim from Vitally's published documentation; object schemas for Account, User and Task are transcribed from their documented object tables. Not a provider-published OpenAPI — a faithful generation from the public docs.
  description: Vitally's public REST API for creating, updating, retrieving and listing the core Customer Success objects — Accounts, Organizations, Users, Tasks, Notes, Conversations and NPS Responses. Authentication is HTTP Basic using a Vitally REST API key as the username. List endpoints use cursor-based pagination ordered by updatedAt (default) or createdAt.
  contact:
    name: Vitally
    url: https://docs.vitally.io/en/articles/9880649-rest-api-overview
servers:
- url: https://{subdomain}.rest.vitally.io/resources
  description: US data center (default)
  variables:
    subdomain:
      default: yoursubdomain
      description: Your Vitally subdomain (from your login URL yoursubdomain.vitally.io)
- url: https://rest.vitally-eu.io/resources
  description: EU data center
security:
- basicAuth: []
tags:
- name: Users
paths:
  /accounts/{accountId}/users:
    parameters:
    - $ref: '#/components/parameters/accountId'
    get:
      operationId: listUsersForAccount
      tags:
      - Users
      summary: List users for an account
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/from'
      responses:
        '200':
          description: A page of users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users:
    get:
      operationId: listUsers
      tags:
      - Users
      summary: List users
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/from'
      - $ref: '#/components/parameters/sortBy'
      responses:
        '200':
          description: A page of users
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createUser
      tags:
      - Users
      summary: Create a user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserWrite'
      responses:
        '200':
          description: The created user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /users/{userId}:
    parameters:
    - name: userId
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: getUser
      tags:
      - Users
      summary: Get a user
      responses:
        '200':
          description: The user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateUser
      tags:
      - Users
      summary: Update a user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserWrite'
      responses:
        '200':
          description: The updated user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    Cursor:
      type: object
      properties:
        next:
          type:
          - string
          - 'null'
          description: The cursor to use for the following page, or null at the end.
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message.
      required:
      - error
    SegmentRef:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
    Account:
      type: object
      properties:
        id:
          type: string
          description: Vitally's unique ID for the account
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        externalId:
          type: string
          description: Your unique ID for the account
        name:
          type: string
        traits:
          type: object
          additionalProperties: true
        organizationId:
          type:
          - string
          - 'null'
        accountOwnerId:
          type:
          - string
          - 'null'
        mrr:
          type:
          - number
          - 'null'
        nextRenewalDate:
          type:
          - string
          - 'null'
          format: date-time
        churnedAt:
          type:
          - string
          - 'null'
          format: date-time
        firstSeenTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        lastSeenTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        lastInboundMessageTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        lastOutboundMessageTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        trialEndDate:
          type:
          - string
          - 'null'
          format: date-time
        usersCount:
          type: integer
        npsDetractorCount:
          type: integer
        npsPassiveCount:
          type: integer
        npsPromoterCount:
          type: integer
        npsScore:
          type:
          - number
          - 'null'
          description: NPS score across all users (-100 to 100)
        healthScore:
          type:
          - number
          - 'null'
          description: Current health score (0-10)
        csmId:
          type:
          - string
          - 'null'
        accountExecutiveId:
          type:
          - string
          - 'null'
        keyRoles:
          type: array
          items:
            type: object
            properties:
              vitallyUser:
                type: object
              keyRole:
                type: string
        segments:
          type: array
          items:
            $ref: '#/components/schemas/SegmentRef'
      required:
      - id
      - name
    UserWrite:
      type: object
      properties:
        externalId:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        avatar:
          type: string
        traits:
          type: object
          additionalProperties: true
        accountIds:
          type: array
          items:
            type: string
      required:
      - name
    User:
      type: object
      properties:
        id:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        externalId:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        avatar:
          type:
          - string
          - 'null'
        traits:
          type: object
          additionalProperties: true
        firstKnown:
          type:
          - string
          - 'null'
          format: date-time
        lastSeenTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        lastInboundMessageTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        lastOutboundMessageTimestamp:
          type:
          - string
          - 'null'
          format: date-time
        npsLastScore:
          type:
          - number
          - 'null'
        npsLastFeedback:
          type:
          - string
          - 'null'
        npsLastRespondedAt:
          type:
          - string
          - 'null'
          format: date-time
        unsubscribedFromConversations:
          type: boolean
        unsubscribedFromConversationsAt:
          type:
          - string
          - 'null'
          format: date-time
        deactivatedAt:
          type:
          - string
          - 'null'
          format: date-time
        permanentlyBounced:
          type: boolean
        segments:
          type: array
          items:
            $ref: '#/components/schemas/SegmentRef'
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/Account'
        organizations:
          type: array
          items:
            $ref: '#/components/schemas/GenericObject'
      required:
      - id
      - name
    GenericObject:
      type: object
      description: Common Vitally object envelope. Every REST object exposes id, createdAt, updatedAt, externalId, name and a traits map; resource-specific fields are documented per resource.
      properties:
        id:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        externalId:
          type:
          - string
          - 'null'
        name:
          type:
          - string
          - 'null'
        traits:
          type: object
          additionalProperties: true
      additionalProperties: true
    UserList:
      allOf:
      - $ref: '#/components/schemas/Cursor'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/User'
  parameters:
    from:
      name: from
      in: query
      description: The cursor returned from a previous request (from the next property).
      schema:
        type: string
    limit:
      name: limit
      in: query
      description: Number of items to return. Max/default is 100.
      schema:
        type: integer
        maximum: 100
        default: 100
    accountId:
      name: accountId
      in: path
      required: true
      schema:
        type: string
    sortBy:
      name: sortBy
      in: query
      description: How to order results. Default updatedAt.
      schema:
        type: string
        enum:
        - createdAt
        - updatedAt
        default: updatedAt
  responses:
    Unauthorized:
      description: Unauthorized - there is an issue with the authorization used
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'HTTP Basic authentication. Use your Vitally REST API key as the username with an empty password (Authorization: Basic base64(apiKey:)). Keys are created in the Vitally UI under Settings -> Integrations -> Vitally REST API.'