openapi: 3.0.3
info:
title: Gingr Partner API
description: >-
Gingr's Partner API for pet-care business management software (dog daycare,
boarding, training, and grooming). The API is JSON:API-flavored - request
and response bodies wrap resource attributes under a `data` object - and
every request must send a `subdomain` header identifying the facility's
Gingr account plus an `Accept: application/vnd.api+json` header. Endpoints
below are a curated subset (owners/parents, pets, bookings/reservations,
services and configuration, invoices/payments, immunizations, report
cards, and waitlist) drawn from Gingr's official public OpenAPI document at
https://docs.gingr.io/documentation/swagger.json (Gingr API v1.8.0), which
documents 158 operations in total. This document is a representative
subset, not a full mirror; consult the live swagger.json for every
operation, filter, and field.
version: '1.8.0'
contact:
name: Gingr
url: https://www.gingrapp.com
servers:
- url: https://api.gingr.io
description: Gingr Partner API (production)
security:
- ApiKeyAuth: []
tags:
- name: Owners
description: Owner/client ("parent") records.
- name: Pets
description: Pet profiles belonging to an owner.
- name: Reservations
description: Bookings/reservations for daycare, boarding, training, and grooming.
- name: Services
description: Service catalog and facility configuration.
- name: Invoices
description: Invoices and charges.
- name: Payments
description: Charging and refunding cards on file, invoices, and deposits.
- name: Vaccinations
description: Pet immunization/vaccination records.
- name: Report Cards
description: Daily activity report cards generated for a pet's stay.
- name: Waitlist
description: Managing bookings that are on the facility waitlist.
paths:
/v1/parents:
get:
operationId: v1ParentsList
tags:
- Owners
summary: Parents - List
description: Lists owner ("parent") records, filterable by name, email, phone, home location, or created date range.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[firstName]
in: query
required: false
schema: { type: string, minLength: 3, maxLength: 255 }
- name: filter[lastName]
in: query
required: false
schema: { type: string, minLength: 3, maxLength: 255 }
- name: filter[contact][email]
in: query
required: false
schema: { type: string, format: email }
- name: filter[homeLocationIds]
in: query
required: false
schema: { type: array, items: { type: integer } }
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of parent resources.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: v1ParentsCreate
tags:
- Owners
summary: Parents - Create
description: Creates a new owner ("parent") record with required contact and address information.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentCreateRequest'
responses:
'200':
description: The created parent resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/ValidationError'
/v1/parents/{parentId}:
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: parentId
in: path
required: true
schema: { type: integer }
get:
operationId: v1ParentsDetails
tags:
- Owners
summary: Parents - Details
description: Retrieves a single owner ("parent") record by ID.
responses:
'200':
description: The requested parent resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentResponse'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: v1ParentsUpdate
tags:
- Owners
summary: Parents - Update
description: Updates an existing owner ("parent") record.
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentCreateRequest'
responses:
'200':
description: The updated parent resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ParentResponse'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: v1ParentsDelete
tags:
- Owners
summary: Parents - Delete
description: Deletes an owner ("parent") record.
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/v1/parents/validate-email:
get:
operationId: v1ParentsValidateEmail
tags:
- Owners
summary: Validate if an email address is already registered
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: email
in: query
required: true
schema: { type: string, format: email }
responses:
'200':
description: Whether the email address already belongs to an owner record.
/v1/parents/validate-phone:
get:
operationId: v1ParentsValidatePhone
tags:
- Owners
summary: Validate if a phone number is already registered
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: phone
in: query
required: true
schema: { type: string }
responses:
'200':
description: Whether the phone number already belongs to an owner record.
/v1/parents/merge:
post:
operationId: v1ParentsMerge
tags:
- Owners
summary: Merge two parent accounts
description: Merges a duplicate owner ("parent") record into a surviving record.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
sourceParentId: { type: integer }
targetParentId: { type: integer }
responses:
'200':
description: Merge confirmation.
/v1/pets:
get:
operationId: v1PetsList
tags:
- Pets
summary: Pets - List
description: Lists pet profiles, filterable by name, owner, species, or breed.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[parentId]
in: query
required: false
schema: { type: integer }
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of pet resources.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PetListResponse'
post:
operationId: v1PetsCreate
tags:
- Pets
summary: Pets - Create
description: Creates a new pet profile belonging to an owner.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PetCreateRequest'
responses:
'200':
description: The created pet resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PetResponse'
'422':
$ref: '#/components/responses/ValidationError'
/v1/pets/{petId}:
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: petId
in: path
required: true
schema: { type: integer }
get:
operationId: v1PetsDetails
tags:
- Pets
summary: Pets - Details
description: Retrieves a single pet profile by ID, including breed, feeding, and medication data.
responses:
'200':
description: The requested pet resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PetResponse'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: v1PetsUpdate
tags:
- Pets
summary: Pets - Update
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PetCreateRequest'
responses:
'200':
description: The updated pet resource.
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: v1PetsDelete
tags:
- Pets
summary: Delete Pet
responses:
'200':
description: Deletion confirmation.
'404':
$ref: '#/components/responses/NotFound'
/v1/pets/merge:
post:
operationId: v1PetsMerge
tags:
- Pets
summary: Pets - Merge
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
type: object
responses:
'200':
description: Merge confirmation.
/v1/bookings:
get:
operationId: v1BookingsList
tags:
- Reservations
summary: Bookings - List
description: >-
Lists bookings/reservations, filterable by created date range, booking
start/end date range, status (completed, cancelled, checked_in,
confirmed, pending_acceptance, wait_listed, unconfirmed), owner, pet,
location, or booking category.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[status][type]
in: query
required: false
schema:
type: string
enum: [completed, cancelled, checked_in, confirmed, pending_acceptance, wait_listed, unconfirmed]
- name: filter[status][from]
in: query
required: false
schema: { type: string, format: date }
- name: filter[status][to]
in: query
required: false
schema: { type: string, format: date }
- name: filter[parentId]
in: query
required: false
schema: { type: integer }
- name: filter[petIds]
in: query
required: false
schema: { type: array, items: { type: integer } }
- name: filter[locationIds]
in: query
required: false
schema: { type: array, items: { type: integer } }
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of booking resources.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingListResponse'
post:
operationId: v1BookingsCreate
tags:
- Reservations
summary: Bookings - Create
description: Creates a new booking/reservation for a pet.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingCreateRequest'
responses:
'200':
description: The created booking resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingResponse'
'422':
$ref: '#/components/responses/ValidationError'
/v1/bookings/{bookingId}:
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: bookingId
in: path
required: true
schema: { type: integer }
get:
operationId: v1BookingsDetails
tags:
- Reservations
summary: Bookings - Details
responses:
'200':
description: The requested booking resource.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingResponse'
'404':
$ref: '#/components/responses/NotFound'
put:
operationId: v1BookingsUpdate
tags:
- Reservations
summary: Bookings - Update
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingCreateRequest'
responses:
'200':
description: The updated booking resource.
'404':
$ref: '#/components/responses/NotFound'
/v1/bookings/{bookingId}/cancel:
put:
operationId: v1BookingsCancel
tags:
- Reservations
summary: Bookings - Cancel
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
cancellationReasonId: { type: integer }
responses:
'200':
description: The cancelled booking resource.
/v1/bookings/{bookingId}/check-in:
post:
operationId: v1BookingCheckIn
tags:
- Reservations
summary: Check In Booking
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The checked-in booking resource.
/v1/bookings/{bookingId}/checkout:
post:
operationId: v1BookingsCheckout
tags:
- Reservations
summary: Bookings - Checkout
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The checked-out booking resource, typically generating an invoice.
/v1/bookings/{bookingId}/estimate:
get:
operationId: v1BookingEstimate
tags:
- Reservations
summary: Booking - Estimate
description: Returns an estimated price for a booking based on its configured services and dates.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: bookingId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: Estimated pricing breakdown for the booking.
/v1/bookings/{bookingId}/services:
put:
operationId: v1BookingAddService
tags:
- Reservations
summary: Add Service to Booking
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
serviceTypeId: { type: integer }
responses:
'200':
description: The updated booking resource with the added service.
/v1/bookings/available-lodgings:
get:
operationId: v1BookingsAvailableLodgings
tags:
- Reservations
summary: Bookings Available Lodgings
description: Returns the lodgings (kennels/runs/suites) available for a given date range and booking type.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[bookingStart]
in: query
required: true
schema: { type: string, format: date }
- name: filter[bookingEnd]
in: query
required: true
schema: { type: string, format: date }
responses:
'200':
description: A list of available lodgings.
/v1/bookings/{bookingId}/wait-list:
post:
operationId: v1BookingMoveToWaitList
tags:
- Waitlist
summary: Move Booking to Wait List
description: Moves a booking to wait_listed status, typically because the requested location or lodging is at capacity.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The booking resource with status set to wait_listed and a waitListDate recorded.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/BookingResponse'
/v1/bookings/{bookingId}/accept:
post:
operationId: v1BookingsAccept
tags:
- Waitlist
summary: Bookings - Accept
description: Accepts a wait-listed or pending booking off the waitlist/queue and confirms it, recording a waitListAcceptedDate when applicable.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: bookingId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The accepted/confirmed booking resource.
/v1/config/service-types:
get:
operationId: v1ConfigServiceTypes
tags:
- Services
summary: Service Types - List
description: Lists the facility's configured service types (e.g. daycare, boarding, grooming, training add-ons).
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of service type resources.
/v1/config/service-types/{serviceTypeId}:
get:
operationId: v1ConfigServiceTypeDetails
tags:
- Services
summary: Retrieve detailed information for a specific service type
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: serviceTypeId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The requested service type resource.
'404':
$ref: '#/components/responses/NotFound'
/v1/config/booking-types:
get:
operationId: v1ConfigBookingTypes
tags:
- Services
summary: Retrieve a paginated list of booking types
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[bookingCategoryId]
in: query
required: false
schema: { type: integer }
- name: filter[locationIds]
in: query
required: false
schema: { type: array, items: { type: integer } }
- name: filter[appointmentBased]
in: query
required: false
schema: { type: boolean }
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of booking type resources.
/v1/config/lodgings:
get:
operationId: v1ConfigLodgings
tags:
- Services
summary: Lodgings - List
description: Lists the facility's configured lodgings (kennels/runs/suites).
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
responses:
'200':
description: A list of lodging resources.
/v1/config/locations:
get:
operationId: v1ConfigLocations
tags:
- Services
summary: Location - List
description: Lists the facility's locations, for multi-location Gingr accounts.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[active]
in: query
required: false
schema: { type: boolean }
- name: filter[locationName]
in: query
required: false
schema: { type: string }
responses:
'200':
description: A list of location resources.
/v1/config/locations/{locationId}:
get:
operationId: v1ConfigLocationDetails
tags:
- Services
summary: Location - Detail
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: locationId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The requested location resource.
'404':
$ref: '#/components/responses/NotFound'
/v1/invoices:
get:
operationId: v1InvoicesList
tags:
- Invoices
summary: Invoices - List
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: filter[parentId]
in: query
required: false
schema: { type: integer }
- name: page[size]
in: query
required: false
schema: { type: integer, enum: [10, 25, 50, 100] }
- name: page[number]
in: query
required: false
schema: { type: integer, minimum: 1 }
responses:
'200':
description: A page of invoice resources.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/InvoiceListResponse'
/v1/invoices/{invoiceId}:
get:
operationId: v1InvoiceDetails
tags:
- Invoices
summary: Invoice - Details
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: invoiceId
in: path
required: true
schema: { type: integer }
responses:
'200':
description: The requested invoice resource with line items.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/InvoiceResponse'
'404':
$ref: '#/components/responses/NotFound'
/v1/invoices/charges:
get:
operationId: v1InvoicesCharges
tags:
- Invoices
summary: Invoices - Charges
description: Lists individual charge line items across invoices.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
responses:
'200':
description: A list of charge line items.
/v1/invoices/{invoiceId}/refund-items:
post:
operationId: v1InvoicesRefundItems
tags:
- Invoices
summary: Invoices - Refund Items
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: invoiceId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
itemIds: { type: array, items: { type: integer } }
refundReasonId: { type: integer }
responses:
'200':
description: Refund confirmation for the specified invoice line items.
/v1/payments/charge:
post:
operationId: v1PaymentsCharge
tags:
- Payments
summary: Payment - Charge
description: Charges an owner's card on file for an arbitrary amount, outside of a specific invoice.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
parentId: { type: integer }
amount: { type: number, format: float }
responses:
'200':
description: Charge confirmation.
/v1/payments/invoices/{invoiceId}:
post:
operationId: v1PaymentsPayInvoice
tags:
- Payments
summary: Payments - Pay Invoice
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: invoiceId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
responses:
'200':
description: Payment confirmation for the invoice.
/v1/payments/invoices/{invoiceId}/refund:
post:
operationId: v1PaymentsRefundInvoice
tags:
- Payments
summary: Payments - Refund Invoices
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: invoiceId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
responses:
'200':
description: Refund confirmation for the invoice.
/v1/payments/deposits/{depositId}:
post:
operationId: v1PaymentsPayDeposit
tags:
- Payments
summary: Payments - Pay Deposit
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: depositId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
responses:
'200':
description: Payment confirmation for the deposit.
/v1/pets/{petId}/immunizations:
get:
operationId: v1PetsImmunizationsList
tags:
- Vaccinations
summary: Pets Immunizations - List
description: Lists a pet's immunization/vaccination records against the facility's configured immunization types.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- name: petId
in: path
required: true
schema: { type: integer }
- name: filter[isExpired]
in: query
required: false
schema: { type: boolean }
responses:
'200':
description: A list of the pet's immunization records.
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ImmunizationListResponse'
/v1/pets/{petId}/immunizations/{immunizationTypeId}:
put:
operationId: v1PetsImmunizationsUpdate
tags:
- Vaccinations
summary: Pets Immunizations - Update
description: Records or updates a pet's immunization/vaccination date and expiration for a given immunization type.
parameters:
- $ref: '#/components/parameters/Subdomain'
- $ref: '#/components/parameters/Accept'
- $ref: '#/components/parameters/ContentType'
- name: petId
in: path
required: true
schema: { type: integer }
- name: immunizationTypeId
in: path
required: true
schema: { type: integer }
requestBody:
content:
application/vnd.api+json:
schema:
type: object
properties:
data:
type: object
properties:
attributes:
type: object
properties:
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gingr/refs/heads/main/openapi/gingr-openapi.yml