openapi: 3.0.3 info: title: PetExec Authentication Owners API description: The PetExec API is a REST API for existing PetExec customers and their developers to extend the PetExec pet-care business management platform (daycare, boarding, grooming, training, and scheduled services). Every endpoint, path, and scope in this document is transcribed directly from PetExec's own public GitHub examples repository (https://github.com/PetExec/API-Examples), which is the only complete source of PetExec API technical detail publicly available - PetExec's interactive apidoc reference at https://secure.petexec.net/api/apidoc/index.html is a JavaScript-rendered single-page app and does not expose a machine-readable spec. Access requires an active PetExec account. Client credentials (client_id / client_secret) are self-issued from Company Preferences > Misc. Settings > Maintain API Applications inside the PetExec console, then exchanged for a scoped Bearer token via an OAuth2 Resource Owner Password Credentials (password) grant against POST /token. PetExec was acquired by Togetherwork in November 2024 and is being migrated toward Gingr; PetExec is no longer accepting new customers, but this API surface is documented as live for existing accounts as of the review date. Some of PetExec's own published examples are internally inconsistent (mixed "user-card" / "userCard" casing, a menu example that appears to call the wrong path) - those inconsistencies are called out inline below rather than silently corrected. version: '1.0' contact: name: PetExec url: https://www.petexec.net/features/api-for-developers servers: - url: https://secure.petexec.net/api description: PetExec production API (used by nearly all official PHP and most JavaScript examples) - url: https://beta.petexec.net/api description: PetExec beta/staging API (referenced by some official JavaScript examples for the same paths; not separately documented) security: - bearerAuth: [] tags: - name: Owners description: Owner (pet parent) account records and search. paths: /owner: get: operationId: listOwners tags: - Owners summary: List active owners description: Returns all active owner (pet parent) accounts. Requires the owner_read scope. responses: '200': description: A list of owners. content: application/json: schema: type: array items: $ref: '#/components/schemas/Owner' '401': $ref: '#/components/responses/Unauthorized' /owner/{owner_id}: parameters: - $ref: '#/components/parameters/OwnerId' get: operationId: getOwner tags: - Owners summary: Get owner information description: Retrieves a single owner's account information. Requires the owner_read scope. responses: '200': description: The requested owner. content: application/json: schema: $ref: '#/components/schemas/Owner' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /search/owners/{search_criteria}/page/{page_number}/data/{data_per_page}: get: operationId: searchOwners tags: - Owners summary: Search owners description: Keyword search across owners, paginated. parameters: - name: search_criteria in: path required: true schema: type: string - $ref: '#/components/parameters/PageNumber' - $ref: '#/components/parameters/DataPerPage' responses: '200': description: A page of matching owners. content: application/json: schema: type: array items: $ref: '#/components/schemas/Owner' '401': $ref: '#/components/responses/Unauthorized' components: parameters: PageNumber: name: page_number in: path required: true description: Page number of search results. schema: type: integer OwnerId: name: owner_id in: path required: true description: The PetExec owner (pet parent) ID. schema: type: string DataPerPage: name: data_per_page in: path required: true description: Number of entries per page. schema: type: integer responses: NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing, invalid, or expired Bearer token, or insufficient scope. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object additionalProperties: true Owner: type: object description: Field-level schema is not published by PetExec; shape inferred only from the fact that examples key on an owner ID and are requested under the owner_read/owner_update scopes. properties: ownerid: type: string additionalProperties: true securitySchemes: bearerAuth: type: http scheme: bearer description: 'OAuth2 password-grant access token obtained from POST /token. Passed as `Authorization: Bearer YOUR_ACCESS_TOKEN`.'