Digitail Client Communication API

Send and manage client communications - SMS, chat, and email messaging with pet parents - for reminder, marketing, and telemedicine workflows.

OpenAPI Specification

digitail-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Digitail Open API
  version: v1
  description: >-
    Modeled OpenAPI for the Digitail Open API, a documented REST API for the
    Digitail cloud veterinary practice management platform (PIMS). The base URL,
    OAuth 2.0 authorization-code + PKCE authentication, JSON media types,
    page/per_page pagination, and the 200 requests-per-minute rate limit are
    taken from the public documentation at https://documentation.digitail.io/.
    Endpoints marked with x-endpoints-modeled are inferred from the documented
    resource categories and standard REST conventions rather than verified
    against per-endpoint reference pages. Confirmed endpoints (pets,
    appointments, vets, clinics) were verified against the public reference.
    Obtain OAuth client credentials via the API access registration at
    https://digitail.com/api/access.
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
  x-endpoints-modeled: true
externalDocs:
  description: Digitail API Documentation
  url: https://documentation.digitail.io/
servers:
- url: https://developer.digitail.io/api/v1
  description: Digitail Open API v1
security:
- oauth2: []
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        OAuth 2.0 authorization-code grant with PKCE. Bearer access token is
        long-lived; a refresh token is also returned.
      flows:
        authorizationCode:
          authorizationUrl: https://vet.digitail.io/oauth/authorize
          tokenUrl: https://vet.digitail.io/oauth/token
          refreshUrl: https://vet.digitail.io/oauth/token
          scopes: {}
  parameters:
    page:
      name: page
      in: query
      description: Page number (default 1).
      required: false
      schema:
        type: integer
        default: 1
        minimum: 1
    perPage:
      name: per_page
      in: query
      description: Results per page (default 15).
      required: false
      schema:
        type: integer
        default: 15
        minimum: 1
    clinicIdFilter:
      name: filter[clinic_id]
      in: query
      description: Filter results by clinic ID.
      required: false
      schema:
        type: integer
    idPath:
      name: id
      in: path
      description: Resource identifier.
      required: true
      schema:
        type: integer
  responses:
    Paginated:
      description: A paginated list of resources.
      content:
        application/json:
          schema:
            type: object
            properties:
              data:
                type: array
                items:
                  type: object
              meta:
                type: object
                properties:
                  current_page:
                    type: integer
                  per_page:
                    type: integer
                  total:
                    type: integer
    Resource:
      description: A single resource.
      content:
        application/json:
          schema:
            type: object
    TooManyRequests:
      description: Rate limit exceeded (200 requests per minute).
    Unauthorized:
      description: Missing or invalid OAuth 2.0 bearer token.
paths:
  /pets:
    get:
      operationId: listPets
      summary: List all pets
      description: List patient records (pets). Confirmed endpoint.
      tags: [Pets]
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      - $ref: '#/components/parameters/clinicIdFilter'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /pets/{id}:
    get:
      operationId: retrievePet
      summary: Retrieve a pet
      description: Retrieve a single patient record. Confirmed endpoint.
      tags: [Pets]
      parameters:
      - $ref: '#/components/parameters/idPath'
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /appointments:
    get:
      operationId: listAppointments
      summary: Get all appointments
      description: List appointments. Confirmed endpoint.
      tags: [Appointments]
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /appointments/{id}:
    get:
      operationId: retrieveAppointment
      summary: Retrieve an appointment
      description: Retrieve a single appointment. Confirmed endpoint.
      tags: [Appointments]
      parameters:
      - $ref: '#/components/parameters/idPath'
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /appointment/{id}/change-status:
    put:
      operationId: changeAppointmentStatus
      summary: Change appointment status
      description: Change the status of an appointment. Confirmed endpoint.
      tags: [Appointments]
      parameters:
      - $ref: '#/components/parameters/idPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /vets/{id}:
    get:
      operationId: retrieveVet
      summary: Retrieve a vet
      description: Retrieve a single veterinarian record. Confirmed endpoint.
      tags: [Vets]
      parameters:
      - $ref: '#/components/parameters/idPath'
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /clinic/{id}:
    get:
      operationId: retrieveClinic
      summary: Retrieve a clinic
      description: Retrieve a single clinic record. Confirmed endpoint.
      tags: [Clinics]
      parameters:
      - $ref: '#/components/parameters/idPath'
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /pet-parents:
    get:
      operationId: listPetParents
      summary: List pet parents
      description: List pet parents (owners). Modeled from the documented Pet Parents resource.
      tags: [Pet Parents]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /clients:
    get:
      operationId: listClients
      summary: List clients
      description: List client accounts. Modeled from the documented Clients resource.
      tags: [Clients]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /invoices:
    get:
      operationId: listInvoices
      summary: List invoices
      description: List invoices. Modeled from the documented Invoices resource.
      tags: [Invoices]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /charges:
    get:
      operationId: listCharges
      summary: List charges
      description: List charges. Modeled from the documented Charges resource.
      tags: [Charges]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /sales:
    get:
      operationId: listSales
      summary: List sales
      description: List sales. Modeled from the documented Sales resource.
      tags: [Sales]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /labs:
    get:
      operationId: listLabs
      summary: List labs
      description: List lab orders and results. Modeled from the documented Labs resource.
      tags: [Labs]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /records:
    get:
      operationId: listRecords
      summary: List medical records
      description: List medical records. Modeled from the documented Records resource.
      tags: [Records]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /prescriptions:
    get:
      operationId: listPrescriptions
      summary: List prescriptions
      description: List prescriptions. Modeled from the documented Prescriptions resource.
      tags: [Prescriptions]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /medication:
    get:
      operationId: listMedication
      summary: List medication
      description: List medications. Modeled from the documented Medication resource.
      tags: [Medication]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /files:
    get:
      operationId: listFiles
      summary: List files
      description: List files and attachments. Modeled from the documented Files resource.
      tags: [Files]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /reports:
    get:
      operationId: listReports
      summary: List reports
      description: Retrieve reporting data. Modeled from the documented Reports resource.
      tags: [Reports]
      x-endpoints-modeled: true
      parameters:
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /species:
    get:
      operationId: listSpecies
      summary: List species
      description: List species reference data. Modeled from the documented Species resource.
      tags: [Species]
      x-endpoints-modeled: true
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /breeds:
    get:
      operationId: listBreeds
      summary: List breeds
      description: List breed reference data. Modeled from the documented Breeds resource.
      tags: [Breeds]
      x-endpoints-modeled: true
      responses:
        '200':
          $ref: '#/components/responses/Paginated'
  /visit-types:
    get:
      operationId: listVisitTypes
      summary: List visit types
      description: List visit types. Modeled from the documented Visit Types resource.
      tags: [Visit Types]
      x-endpoints-modeled: true
      responses:
        '200':
          $ref: '#/components/responses/Paginated'