OpenAPI Specification
openapi: 3.0.3
info:
title: PetExec Authentication Reports 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: Reports
description: Billing and statistics reports.
paths:
/report/billing-report/{start_date}/{end_date}/{pay_type}/{owner_portal}:
get:
operationId: getBillingReport
tags:
- Reports
summary: Get a billing report
description: Requires the report_read scope.
parameters:
- $ref: '#/components/parameters/StartDate'
- $ref: '#/components/parameters/EndDate'
- name: pay_type
in: path
required: true
description: All Types, Cash, Check, Credit, Clover Mini, Gift Certificate, No Payment, Paw Point Redemption, Refund, Tradeout, or Unprocessed.
schema:
type: string
- name: owner_portal
in: path
required: true
description: yes or no
schema:
type: string
enum:
- true
- 'no'
responses:
'200':
description: The billing report.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/report/statistics-report/{start_date}/{end_date}/{taxable_only}:
get:
operationId: getStatisticsReport
tags:
- Reports
summary: Get a statistics report
parameters:
- $ref: '#/components/parameters/StartDate'
- $ref: '#/components/parameters/EndDate'
- name: taxable_only
in: path
required: true
description: yes or no
schema:
type: string
enum:
- true
- 'no'
responses:
'200':
description: The statistics report.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/report/statistics-report/{start_date}/{end_date}/breakdown/{pay_type}:
get:
operationId: getStatisticsReportByPayType
tags:
- Reports
summary: Get a statistics report broken down by payment type
parameters:
- $ref: '#/components/parameters/StartDate'
- $ref: '#/components/parameters/EndDate'
- name: pay_type
in: path
required: true
description: Cash, Check, Credit, Clover Mini, Tradeout, Refund, No Payment, Gift Certificate, Paw Point Redemption, Not Processed, Discount, Tax, or Tip / Gratuity.
schema:
type: string
responses:
'200':
description: The statistics report broken down by payment type.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/report/statistics-report/{start_date}/{end_date}/breakdown/service/{service_id}:
get:
operationId: getStatisticsReportByServiceType
tags:
- Reports
summary: Get a statistics report broken down by service
parameters:
- $ref: '#/components/parameters/StartDate'
- $ref: '#/components/parameters/EndDate'
- name: service_id
in: path
required: true
schema:
type: integer
responses:
'200':
description: The statistics report broken down by service.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
components:
schemas:
Error:
type: object
additionalProperties: true
responses:
Unauthorized:
description: Missing, invalid, or expired Bearer token, or insufficient scope.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
EndDate:
name: end_date
in: path
required: true
description: yyyy-mm-dd
schema:
type: string
format: date
StartDate:
name: start_date
in: path
required: true
description: yyyy-mm-dd
schema:
type: string
format: date
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'OAuth2 password-grant access token obtained from POST /token. Passed as `Authorization: Bearer YOUR_ACCESS_TOKEN`.'