openapi: 3.0.3 info: title: ezyVet Animals Invoices API description: 'The ezyVet API is a RESTful interface to ezyVet, cloud-based veterinary practice information management software (PIMS). ezyVet was founded in New Zealand in 2006 and acquired by IDEXX Laboratories in June 2021, alongside IDEXX''s Cornerstone and Neo PIMS (the acquisition also included Vet Radar). The full API spans roughly 216 endpoints across animals/patients, contacts/clients, appointments, consultations, invoices, products, and diagnostics. Access is partner-gated: a developer must apply for an integration and receive an approved partner_id plus client_id/client_secret, then obtain a bearer token via the OAuth 2.0 Client Credentials grant. Tokens have a 12-hour TTL. GROUNDING NOTE: The OAuth token endpoint, the /v1/contact CRUD endpoints, the Standard Diagnostic Integration, and the base/rate-limit behavior below are confirmed from ezyVet''s public developer documentation (developers.ezyvet.com). The remaining resource paths (animal, appointment, consult, invoice, product, diagnostic, prescription, vaccination and their reference resources) are MODELED on ezyVet''s documented /v1/{resource} REST pattern and published resource categories - operationId or path names may differ from the exact ezyVet catalog. Consult the partner Postman collection for authoritative request/response shapes.' version: '1.0' contact: name: ezyVet Developer Portal url: https://developers.ezyvet.com/docs/v1/ x-ownership: ezyVet is owned by IDEXX Laboratories, Inc. (acquired June 2021). servers: - url: https://api.ezyvet.com description: Production - url: https://api.trial.ezyvet.com description: Trial / sandbox security: - bearerAuth: [] tags: - name: Invoices description: Invoices, invoice lines, and payments. (Modeled.) paths: /v1/invoice: get: operationId: listInvoices tags: - Invoices summary: List invoices description: Lists invoices. (Modeled.) parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Page' responses: '200': $ref: '#/components/responses/ListResponse' post: operationId: createInvoice tags: - Invoices summary: Create an invoice requestBody: $ref: '#/components/requestBodies/GenericResource' responses: '200': $ref: '#/components/responses/ItemResponse' '422': $ref: '#/components/responses/ValidationError' /v1/invoice/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getInvoice tags: - Invoices summary: Retrieve an invoice responses: '200': $ref: '#/components/responses/ItemResponse' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateInvoice tags: - Invoices summary: Update an invoice requestBody: $ref: '#/components/requestBodies/GenericResource' responses: '200': $ref: '#/components/responses/ItemResponse' '404': $ref: '#/components/responses/NotFound' /v1/invoiceline: get: operationId: listInvoiceLines tags: - Invoices summary: List invoice lines description: Lists line items on invoices. (Modeled.) responses: '200': $ref: '#/components/responses/ListResponse' /v1/payment: get: operationId: listPayments tags: - Invoices summary: List payments description: Lists payments recorded against invoices. (Modeled.) responses: '200': $ref: '#/components/responses/ListResponse' post: operationId: createPayment tags: - Invoices summary: Create a payment requestBody: $ref: '#/components/requestBodies/GenericResource' responses: '200': $ref: '#/components/responses/ItemResponse' '422': $ref: '#/components/responses/ValidationError' components: responses: ValidationError: description: Request validation failed. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found. content: application/json: schema: $ref: '#/components/schemas/Error' ListResponse: description: A paginated list envelope. content: application/json: schema: $ref: '#/components/schemas/ListEnvelope' ItemResponse: description: A single resource envelope. content: application/json: schema: type: object additionalProperties: true requestBodies: GenericResource: required: true description: Resource payload. ezyVet write bodies are resource-specific; consult the partner Postman collection for exact field lists. (Modeled as a free-form object here.) content: application/json: schema: type: object additionalProperties: true schemas: Error: type: object properties: error: type: string messages: type: array items: type: string ListEnvelope: type: object description: ezyVet list responses return a meta object plus an items array whose elements wrap each resource under its type key. (Shape modeled.) properties: meta: type: object properties: items: type: object properties: total: type: integer limit: type: integer page: type: integer pages: type: integer items: type: array items: type: object additionalProperties: true parameters: Page: name: page in: query required: false description: 1-based page number. schema: type: integer default: 1 Id: name: id in: path required: true description: The numeric ID of the resource. schema: type: integer Limit: name: limit in: query required: false description: Number of records per page (pagination is envelope-based via the meta object). schema: type: integer default: 10 maximum: 200 securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: Bearer access token from POST /v1/oauth/access_token (OAuth 2.0 Client Credentials). 12-hour TTL.