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'