Shepherd Veterinary Software Group API

The Group API from Shepherd Veterinary Software — 1 operation(s) for group.

Operations 1

POST /pav2/open-api-groups Retrieves {OpenApiGroupController.Group} resources that match the specified… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/shepherd-vet:shepherd-vet-group-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

shepherd-vet-group-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: v1
  title: Shepherd Open API (v2.248.0.39) Group API
  description: 'Production Base URL: https://open-api.shepherd.vet/pav2/


    Production App URL: https://app.shepherd.vet/


    Production Documentation URL: https://app.shepherd.vet/swagger/


    Sandbox Base URL: https://demo-open-api.shepherd.vet/pav2/


    Sandbox App URL: https://demo.shepherd.vet/


    Sandbox Documentation URL: https://demo.shepherd.vet/swagger


    Authorization: The integration is authorized by providing two headers in the API call


    X-Integration-Private-Key - this contains the private key from your credentials

    X-Integration-Public-Key - this contains the public key from your credentials


    Additionally, for all requests other than Clinic, the X-Clinic-Id header must be provided with the value of the clinic entity id for which you are running the API requests. You can get the entity id by calling the Clinic endpoint. If authorization fails, the request returns HTTP status 401 and the response body is one of the messages below. Missing X-Integration-Public-Key header - the public key header is absent from the request. Missing X-Integration-Private-Key header - the private key header is absent from the request. Missing X-Clinic-Id header - the clinic identifier header is absent, and the endpoint is clinic scoped. Incorrect API keys provided - both key headers were supplied, but the public key matches no integration, or the private key is not valid for that integration. Integration not enabled for the provided clinic - the key pair is valid, but the integration is not enabled and active for the clinic supplied in X-Clinic-Id. NEW: Each API call will count against your RPH and RPM limits. Once you exhaust those limits, requests will start returning HTTP status 429. The RPH is set to 12000 and RPM to 800 (subject to change). Where an endpoint supports searchQuery, a query longer than 500 characters may return HTTP status 400 with ERROR_MESSAGES.SEARCH_PHRASE.TOO_LONG, and a query with more than 10 words may return HTTP status 400 with ERROR_MESSAGES.SEARCH_PHRASE.TOO_MANY_PHRASES. NOTE: Since this API is WIP, we would be happy to hear any feedback and to implement additional filtering/sorting options etc. **Endpoints:

    All endpoints are POST requests that accept JSON bodies. The common request properties for all endpoints are:**


    rpp::int - The number of items to return per page. The max is 1000. Defaults to 10. page::int - The page number. Defaults to 1. sort::string - Which field to sort by. Needs to be in "field|order" format, where order is either "asc" or "desc". All top-level properties should be sortable, only some nested-fields work and you should probably not use them until this API reaches production and we settle on which nested-field sortings we will support. Default depends on endpoint, usually "id|asc". embed::string - Comma-separated values for nested-fields you want to fetch (eg. "clientPhones,clientPhones.phoneType" on Client endpoint). If a specific embed is not requested, the response will contain either null or an empty array for that value. No default. dateCreatedFrom::date

    dateCreatedTo::date

    dateUpdatedFrom::date

    dateUpdatedTo::date

    - Date range filters for either the creation date or last update date. - You can pass in either one end or both of them. *


    * Only the date filters listed on an endpoint''s request model are supported; sending another one, or a ''From'' later than its ''To'', returns HTTP status 400. The request responses will come back as a JSON object. The common response properties for all endpoints are:


    embed::string - Lists the embed used in the request. This may sometimes be different from what you sent in, if in the future we add that some embeds get set automatically on certain endpoints

    links::object[] - Always empty, a leftover from the internal framework we use on our web API. Will be removed in the future if possible so do not rely on this

    page::int - Which page was fetched.'
servers:
- url: https://open-api.shepherd.vet
tags:
- name: Group
paths:
  /pav2/open-api-groups:
    post:
      tags:
      - Group
      summary: Retrieves {OpenApiGroupController.Group} resources that match the specified…
      description: 'Example Request

        {

        "isMultiSite": true,

        "embed": "petPortalSetting"

        }


        Example Response

        {

        "embed": "petPortalSetting",

        "item": [

        {

        "countryId": "f91c3b26-9b3f-4b99-a6cd-15c84c9a62b1",

        "email": "info@vetgroup.example",

        "hasPetAssureIntegration": true,

        "hasShepherdPayIntegration": false,

        "isAutoResponseMessageEnabled": true,

        "isDemo": false,

        "isDemoChangedOnce": true,

        "isMultiSite": true,

        "mediaVaultEntryId": null,

        "name": "VetCare Global Group",

        "paymentProcessorSetting": null,

        "petPortalSetting": {

        "clinicId": "bdcc3a25-4c39-4c91-90a3-b13b2f1eae90",

        "directBookingEnableRegister": true,

        "directBookingEnabled": true,

        "directBookingMaxDaysInAdvance": 30,

        "directBookingMinDaysInAdvance": 2,

        "directBookingScheduleInterval": 900,

        "directBookingWithoutApprovalEnabled": false,

        "petPortalAppointmentsEnabled": true,

        "petPortalColorSchemeId": "814dcda1-cd17-46d1-b9aa-14a49b9383aa",

        "petPortalEnabled": true,

        "petPortalHeroId": "b317d9d0-6a88-4533-92c1-7f9c29594a70",

        "petPortalOnlinePaymentsEnabled": true,

        "petPortalPrescriptionsEnabled": true,

        "petPortalUrl": "portal.vetcaregroup.example",

        "dateCreated": "2025-05-12T10:54:11.438988Z",

        "dateUpdated": "2025-05-12T10:54:11.520000Z",

        "id": "a9b30d78-6732-46fd-b3a2-7b3d0c6cf57c"

        },

        "phone": "+1-800-555-1234",

        "shareClientDiscount": true,

        "shareClientsAndPatients": true,

        "shareForms": false,

        "shareMessaging": true,

        "sharePaymentMethods": true,

        "sharePaymentProcessorSetting": false,

        "sharePetPortal": true,

        "shareProductPricing": true,

        "shareProducts": true,

        "shareReferralSource": true,

        "shareTasks": true,

        "twilioA2PRegistrationStatus": "Registered",

        "twilioA2PRegistrationStatusId": "08fca9d1-5e55-4d87-942d-90c70f6b28cb",

        "twilioNumber": "+1-202-555-0199",

        "dateCreated": "2025-05-12T10:53:37.644685Z",

        "dateUpdated": "2025-05-12T10:53:37.645684Z",

        "id": "6c935940-8c4b-41a6-a2fa-0485a199a313"

        }

        ]

        }'
      operationId: OpenApiGroupGet
      parameters:
      - name: x-integration-public-key
        in: header
        description: Your public API key
        required: true
        schema:
          type: string
      - name: x-integration-private-key
        in: header
        description: Your private API key
        required: true
        schema:
          type: string
      - name: x-clinic-id
        in: header
        description: The clinic uuid identifier
        required: true
        schema:
          type: string
      responses:
        '200':
          description: A paged collection of groups matching the search criteria.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RESTCollectionModelBase_OpenApiGroupController.Group'
            text/json:
              schema:
                $ref: '#/components/schemas/RESTCollectionModelBase_OpenApiGroupController.Group'
            application/hal+json:
              schema:
                $ref: '#/components/schemas/RESTCollectionModelBase_OpenApiGroupController.Group'
        '401':
          description: 'Authorization failed. One of: Missing X-Integration-Public-Key header, Missing X-Integration-Private-Key header, Missing X-Clinic-Id header, Incorrect API keys provided, or Integration not enabled for the provided clinic.'
        '429':
          description: Request rate limit exceeded. Please wait before making further requests. Returned once the integration passes its configured hourly or per-minute request allowance.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpenApiGroupController.GroupFilterModel'
          text/json:
            schema:
              $ref: '#/components/schemas/OpenApiGroupController.GroupFilterModel'
          application/hal+json:
            schema:
              $ref: '#/components/schemas/OpenApiGroupController.GroupFilterModel'
        description: The model.
        required: true
components:
  schemas:
    RESTCollectionModelBase_OpenApiGroupController.Group:
      type: object
      properties:
        embed:
          type: string
        item:
          type: array
          items:
            $ref: '#/components/schemas/OpenApiGroupController.Group'
        page:
          format: int32
          type: integer
        recordsPerPage:
          format: int32
          type: integer
        searchQuery:
          type: string
        sort:
          type: string
        totalRecords:
          format: int32
          type: integer
    OpenApiGroupController.Group:
      description: Group REST model
      type: object
      properties:
        countryId:
          format: uuid
          description: Unique identifier representing the related Country entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        email:
          description: The email address associated with the group.
          type: string
        hasPetAssureIntegration:
          description: 'Value indicating whether this Group has Pet Assure integration.

            If this Group is a Pet Assure practice, it can automatically apply discounts for all Pet Assure members without manual validation.'
          type: boolean
        hasShepherdPayIntegration:
          description: Value indicating whether this Group has shepherd pay integration.
          type: boolean
        isAutoResponseMessageEnabled:
          description: 'Value indicating whether automatic response messaging is enabled for this Group.

            An automatic message is sent when clients contact the clinic via SMS outside of working hours.'
          type: boolean
        isDemo:
          description: Value indicating whether this Group is demo clinic (for migration).
          type: boolean
        isDemoChangedOnce:
          description: Value indicating whether the IsDemo is changed once from true to false.
          type: boolean
        isMultiSite:
          description: Indicates whether this Group is part of a multisite setup.
          type: boolean
        mediaVaultEntryId:
          format: uuid
          description: Unique identifier representing the related MediaVaultEntry entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        name:
          description: The name of the group.
          type: string
        paymentProcessorSetting:
          $ref: '#/components/schemas/OpenApiGroupController.PaymentProcessorSetting'
          description: Object representing the related payment processor setting entity.
        petPortalSetting:
          $ref: '#/components/schemas/OpenApiGroupController.PetPortalSetting'
          description: Object representing the related the pet portal setting entity.
        phone:
          description: Phone number of the group.
          type: string
        shareClientDiscount:
          description: 'Flag indicating whether group clinics share client discount data. If client discounts are shared, they can only be created and edited on the group platform, but discount can be added to clients on clinics.

            When retrieving data, all client discount data will be shown from the group platform.'
          type: boolean
        shareClientsAndPatients:
          description: 'Flag indicating whether group clinics share client and patient data.

            If clients and patients are shared, client discount data must also be shared.

            Clients and patients are created at one of the multisite clinics, which becomes their home clinic.

            When retrieving data, all values are the same across all clinics within the multisite group.'
          type: boolean
        shareForms:
          description: 'Flag indicating whether group clinics share form data. If forms are shared, they can only be created on the group platform.

            When retrieving data, all form data will be shown from the group, except for assigned appointment types.

            Each group clinic creates its own appointment types, which can be assigned to forms at the clinic level.

            Retrieved form data will include default form values as well as overridden values, such as the appointment type date.'
          type: boolean
        shareMessaging:
          description: 'Flag indicating whether group clinics share messaging data. Shared messaging requires shared Clients/Patients

            If shared, a single phone number is used for all clinics, and messaging is handled on the group platform.

            If messaging is not shared, each group clinic has its own phone number and message center.'
          type: boolean
        sharePaymentMethods:
          description: 'Flag indicating whether group clinics share payment method (payment type) data.

            If shared, creation and editing of payment types is done at the group platform.

            Otherwise, it is managed individually per clinic.'
          type: boolean
        sharePaymentProcessorSetting:
          description: 'Flag indicating whether group clinics share payment processor setting data (shepherd pay).

            If shared, enabling/disabling of shepherd pay is done at the group platform; otherwise, it is managed individually per clinic.'
          type: boolean
        sharePayments:
          description: Value indicating if payments are shared at the group level. To share payments, clients and patients must also be shared.
          type: boolean
        sharePetPortal:
          description: 'Flag indicating whether group clinics share pet portal data.

            If shared, management of the pet portal is done at the group level and all group clinics have the same pet portal URL.

            Otherwise, the pet portal is managed individually per clinic and each clinic has its own URL.

            Value indicating whether all clinics in the group share pet portal data.'
          type: boolean
        shareProductPricing:
          description: 'Flag indicating whether group clinics share product pricing data. Sharing Product pricing requires sharing of products and reminders.

            If shared, product pricing is managed on the group platform and group clinics cannot override pricing values, only default custom types such as discharge instructions and etc.

            If product pricing is not shared, product pricing is managed on the clinic level.'
          type: boolean
        shareProducts:
          description: 'Flag indicating whether a group shares product data.

            If products are shared, creation is done on the group platform.

            When retrieving data, group-level data is already embedded and will always be included.

            If a clinic overrides any values (e.g., price when not shared), the overridden clinic-specific data will be shown instead.

            Clinics can override custom types such as discharge instructions and automatic tasks.'
          type: boolean
        shareReferralSource:
          description: 'Flag indicating whether group clinics share referral sources.

            If shared, creation and editing of referral sources are done on the group platform level.

            Otherwise, each clinic creates and edits its own referral sources.

            Referral sources can be assigned to users at clinic level only.'
          type: boolean
        shareTasks:
          description: 'Flag indicating whether group clinics share task data.

            Tasks are created at the clinic level, regardless of whether sharing is enabled.

            If sharing is enabled, tasks can be managed from any clinic, regardless of where they were originally created. When retrieving data,

            tasks from the clinic specified in the x-clinic-id header will be returned. If additional clinic IDs are included in the request filter,

            tasks from those clinics will also be returned. If tasks are not shared, each clinic creates and manages its own tasks (e.g., Clinic A will not have access to Clinic B''s tasks).

            When a filter is applied, only tasks from the specified clinic IDs are returned.'
          type: boolean
        twilioA2PRegistrationStatus:
          $ref: '#/components/schemas/OpenApiGroupController.TwilioA2PRegistrationStatus'
          description: 'Object representing the related Twilio Application-to-Person registration status entity.

            Twilio Application-to-Person allows businesses to send automated messages to customers, such as alerts or notifications, through SMS or other channels.'
        twilioA2PRegistrationStatusId:
          format: uuid
          description: Unique identifier representing the related TwilioA2PRegistrationStatus entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        twilioNumber:
          description: The twilio number for the group.
          type: string
        dateCreated:
          format: date-time
          type: string
        dateUpdated:
          format: date-time
          type: string
        id:
          type: string
    OpenApiGroupController.PaymentProcessorSetting:
      description: PaymentProcessorSetting REST model.
      type: object
      properties:
        clinicId:
          format: uuid
          description: Unique identifier representing the related Clinic entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        isShepherdPayEnabled:
          description: Indicates whether this PaymentProcessorSetting has Shepherd Pay enabled.
          type: boolean
        dateCreated:
          format: date-time
          type: string
        dateUpdated:
          format: date-time
          type: string
        id:
          type: string
    OpenApiGroupController.GroupFilterModel:
      description: Group Filter REST model
      type: object
      properties:
        hasTwilioAuthToken:
          description: 'Filters by the flag HasTwilioAuthToken.

            If entity has twilio authentitication token. Defaults to null (fetches entities that have twilio authentitication token and those who don''t).'
          type: boolean
        isMultiSite:
          description: 'Filters by the flag IsMultiSite.

            If entity is a multisite. Defaults to null (fetches entities that are multisite and standalone).'
          type: boolean
        shareForms:
          description: 'Filters by the flag ShareForms.

            If entity shares forms. Defaults to null (fetches entities that share and don''t share forms).'
          type: boolean
        dateCreatedFrom:
          format: date-time
          description: 'Sets the start of the date range filter on the entity creation date. Must not be later than DateCreatedTo, or

            the request returns 400. Defaults to null.'
          type: string
        dateCreatedTo:
          format: date-time
          description: The end of the date range filter on the entity creation date. Defaults to null.
          type: string
        dateUpdatedFrom:
          format: date-time
          description: 'The start of the date range filter on the entity last update date. Must not be later than DateUpdatedTo, or the

            request returns 400. Defaults to null.'
          type: string
        dateUpdatedTo:
          format: date-time
          description: The end of the date range filter on the entity last update date. Defaults to null.
          type: string
        embed:
          description: Comma-separated list of embedded properties to fetch. Nested fetches can be specified using dot notation (e.g., "client.clientPhones"). Defaults to null.
          type: string
        excludeIds:
          description: Comma-separated list of IDs representing entities that you wish to exclude from your search. Defaults to null.
          type: string
        ids:
          description: Comma-separated list of IDs representing entities that you wish to include in your search. Defaults to null.
          type: string
        page:
          format: int32
          description: The page number. Defaults to 1.
          type: integer
        rpp:
          format: int32
          description: The number of items to return per page. The max is 1000. Defaults to 10.
          type: integer
        sort:
          description: Which field to sort by. Needs to be in "field|order" format, where order is either "asc" or "desc". The default sort field depends on the endpoint, typically "id|asc"
          type: string
    OpenApiGroupController.TwilioA2PRegistrationStatus:
      description: TwilioA2PRegistrationStatus REST model
      type: object
      properties:
        abrv:
          description: Short unique identifier for the lookup.
          type: string
        description:
          description: The description of the lookup entry.
          type: string
        name:
          description: The name of the lookup entry.
          type: string
        dateCreated:
          format: date-time
          type: string
        dateUpdated:
          format: date-time
          type: string
        id:
          type: string
    OpenApiGroupController.PetPortalSetting:
      description: PetPortalSetting REST model.
      type: object
      properties:
        clinicId:
          format: uuid
          description: Unique identifier representing the related Clinic entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        directBookingEnableRegister:
          description: 'Flag which indicates whether the direct booking registration feature is enabled.

            Clients can use the pet portal to register new clients at the clinic.'
          type: boolean
        directBookingEnabled:
          description: 'Flag which indicates whether direct booking through the pet portal is enabled.

            Clients can request appointments with the clinic via the pet portal.

            If the DirectBookingWithoutApprovalEnabled flag is set to true, clients do not

            need to wait for the clinic''s response to approve their requests.'
          type: boolean
        directBookingMaxDaysInAdvance:
          format: int32
          description: Number of maximum days in advance for direct booking.
          type: integer
        directBookingMinDaysInAdvance:
          format: int32
          description: Number of mimimum days in advance for direct booking.
          type: integer
        directBookingScheduleInterval:
          format: int32
          description: The interval period displayed for available slots on the pet portal.
          type: integer
        directBookingWithoutApprovalEnabled:
          description: 'Flag indicating whether pet portal direct booking without approval is enabled.

            Clients can create appointments with the clinic without approval via the pet portal.'
          type: boolean
        petPortalAppointmentsEnabled:
          description: Flag which indicates whether appointments through the pet portal are enabled.
          type: boolean
        petPortalColorSchemeId:
          format: uuid
          description: Unique identifier representing the related PetPortalColorScheme entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        petPortalEnabled:
          description: Flag indicating whether pet portal is enabled.
          type: boolean
        petPortalHeroId:
          format: uuid
          description: Unique identifier representing the related PetPortalHero entity.
          type: string
          example: 00000000-0000-0000-0000-000000000000
        petPortalOnlinePaymentsEnabled:
          description: Flag indicating whether pet portal online payments is enabled.
          type: boolean
        petPortalPrescriptionsEnabled:
          description: Flag indicating whether pet portal prescriptions is enabled.
          type: boolean
        petPortalUrl:
          description: The pet portal URL.
          type: string
        dateCreated:
          format: date-time
          type: string
        dateUpdated:
          format: date-time
          type: string
        id:
          type: string