Instructors in the professional directory
Teaching is a mode of a profession, not a profession of its own. A grooming instructor is a GROOMER row that teaches. Every specialization on a profile therefore carries a practice mode and, when it teaches, the audiences it teaches.
| Field | Type | Meaning |
|---|---|---|
practiceModeCode | PRACTICES | TEACHES | BOTH | PRACTICES: does the work (every row before 2026-10-06). TEACHES: teaches it and no longer does the work. BOTH: does both. |
teachingAudienceCodes | string[] | Whom a teaching row teaches. Any of PROFESSIONALS (the trade: students, apprentices, other pros), PET_OWNERS (classes, workshops) and PUBLIC (schools, kids, community). Empty for PRACTICES, at least one otherwise. |
instructorVerified | boolean | The profile holds an instructor credential that an administrator reviewed. Only true on a teaching row. A self-declared teacher is false. |
The fields appear on directory rows (GET /api/profile/v1/{locale}/Profile/professionals) and on
a profile’s specializations (GET …/Profile/profiles/{id}/specializations, PascalCase there). A
response from an older host omits them, so read a missing practiceModeCode as PRACTICES.
Listing instructors
Section titled “Listing instructors”| Query | Lists |
|---|---|
?kind=GROOMER | Groomers who do the work: PRACTICES and BOTH rows. A teach-only row is not listed. This changed on 2026-10-06. |
?kind=GROOMER&teaches=true | Grooming instructors: TEACHES and BOTH rows. |
?kind=GROOMER&teaches=true&audience=PET_OWNERS | Grooming instructors who teach pet owners. An unknown audience returns no rows. |
?teaches=true (no kind) | Instructors of every profession; each row’s professionalKindCode is the profession it teaches. |
teaches accepts true or 1. Without teaches, kind stays required and audience is
ignored. Species, breed, location and q filters combine as before, and
GET …/Profile/professionals/locations accepts the same teaches and audience parameters, so
its counts match the list.
{ "id": "0199b2c4-…", "handle": "mariesgroomingacademy", "displayName": "Marie's Grooming Academy", "city": "Laval", "countryCode": "CA", "subdivisionCode": "QC", "speciesId": 1, "speciesName": "Dog", "professionalKindCode": "GROOMER", "practiceModeCode": "BOTH", "teachingAudienceCodes": ["PROFESSIONALS", "PET_OWNERS"], "instructorVerified": true}Setting it (the profile’s own app)
Section titled “Setting it (the profile’s own app)”POST …/Profile/profiles/{profileId}/specializations accepts optional practiceModeCode and
teachingAudienceCodes. PUT …/Profile/profiles/{profileId}/specializations/{specializationId}/teaching
with { "practiceModeCode": "BOTH", "teachingAudienceCodes": ["PUBLIC"] } changes them on an
active row. To change the animals or the primary flag at the same time, use
PUT …/Profile/profiles/{profileId}/specializations/{specializationId} with the row’s full new state
(speciesId, breedId, isPrimary, practiceModeCode, teachingAudienceCodes). A new species or
breed replaces the row, so read Id from the response: it is the id of the row now active. Both are acting-profile writes: 401 without a signed-in caller, 403 for a caller who
may not act for {profileId}, and Write.Failed for a teaching mode without an audience or a
PRACTICES row with one.