Skip to content

Products

A product is anything a clinic sells or charges for: vaccines, exams, surgical procedures, food, retail items, and any other line that can appear on an invoice. Products are organized into categories, can be grouped into bundles for common visit types, and are linked to tax rates that drive the line-item math on invoices.

Products are the catalog. Inventory tracks the physical stock of products; invoice items reference products to record what was sold.

Authoritative schemas live in the live Swagger UI. The fields below are a representative subset for orientation.

FieldTypeDescription
idstringServer-assigned identifier.
namestringHuman-readable name (e.g. “Canine DA2PP vaccine”).
customProductIdstringClinic’s own product code, used for easier search.
pricenumberDefault sale price.
productCategoryIdstringCategory this product belongs to. productCategory expands it.
productTypeIdstringProduct type reference. productType expands it.
isTaxablebooleanWhether tax applies. There is no tax-rate reference on the product itself; see the product tax-rate sub-resources.
isDiscountablebooleanWhether discounts may be applied.
isControlledbooleanWhether this is a controlled substance.
isActivebooleanWhether the product is currently sellable.
dispensingFeeId / customDispensingFeestring / numberDispensing fee reference and per-product override.
medicationProduct / vaccineProduct / serviceProduct / injectionProductobjectType-specific detail blocks; only the one matching the product type is populated.
inventoryProductSettingobjectStock-tracking settings for this product.
includedOnInvoice / includedInMedicalRecordbooleanWhether the product appears on the invoice and in the medical record.
dateCreatedstringISO 8601 UTC timestamp of creation.
dateUpdatedstringISO 8601 UTC timestamp of last update.
isDeletedbooleanSoft-delete flag. Note this is isDeleted, not deleted.
POST /pav2/open-api-products

Standard collection envelope. Filter and page through the catalog with the usual pagination, sort, and embed conventions.

Terminal window
curl -X POST https://open-api.shepherd.vet/pav2/open-api-products \
-H "Content-Type: application/json" \
-H "X-Integration-Public-Key: $SHEPHERD_PUBLIC_KEY" \
-H "X-Integration-Private-Key: $SHEPHERD_PRIVATE_KEY" \
-H "X-Clinic-Id: $SHEPHERD_CLINIC_ID" \
-d '{
"page": 1,
"rpp": 100,
"sort": "name|asc"
}'
{
"item": [
{
"id": "44de1c2e-18b4-4a91-a5c9-abc123456789",
"name": "Canine DA2PP vaccine",
"customProductId": "VAC-DA2PP",
"price": 38.00,
"productCategoryId": "c1aa3c4d-5e6f-789a-bcde-0123456789ab",
"productTypeId": "7b2e4f10-9c3a-4d51-8e6f-2a1b3c4d5e6f",
"productCategory": null,
"productType": null,
"isTaxable": true,
"isDiscountable": true,
"isControlled": false,
"isActive": true,
"includedOnInvoice": true,
"includedInMedicalRecord": true,
"vaccineProduct": null,
"medicationProduct": null,
"serviceProduct": null,
"dateCreated": "2025-09-10T16:55:01Z",
"dateUpdated": "2026-02-14T08:09:33Z",
"isDeleted": false
}
],
"totalRecords": 1284,
"page": 1,
"recordsPerPage": 100,
"sort": "name|asc",
"searchQuery": null,
"embed": null,
"links": []
}

The product catalog is read only through the public API. There is no create, update, or delete endpoint for products; the catalog is maintained by the clinic inside Shepherd, and integrations read it to resolve product IDs, pricing, and tax treatment.

Cache the catalog rather than re-reading it per transaction; it changes rarely. See Lookups for the caching approach.

The product catalog has several adjacent endpoints. Each follows the same request shape: POST, JSON body, the three auth headers, the standard pagination conventions.

EndpointPurpose
POST /pav2/open-api-product-budleBundles: pre-built groups of products for common visit types.
POST /pav2/open-api-product-bundle-itemsLine items that make up each bundle.
POST /pav2/open-api-product-categoriesCatalog categories used to organize products.
POST /pav2/open-api-product-tax-ratesTax rates referenced by products and invoice items.
  • Invoices for how products end up on a bill.
  • Inventory for stock tracking against the catalog.
  • Conventions for pagination, embedding, sorting, and date filters.