# List Positions (v2) Returns all staff positions for the specified company. Response uses JSON:API format where type: "position" is the resource type. Positions define organizational roles and can be assigned to staff members. Positions are stored at the salon group level but accessed via company. Endpoint: GET /companies/{company_id}/positions Version: 2.0.0 Security: BearerPartnerUser ## Header parameters: - `Accept` (string, required) API version header - `Authorization` (string, required) Bearer {partner_token}, User {user_token} ## Path parameters: - `company_id` (integer, required) Company (location) ID ## Query parameters: - `limit` (integer) Maximum number of results to return - `offset` (integer) Number of results to skip for pagination ## Response 200 fields (application/json): - `data` (array) - `data.type` (string) Example: "position" - `data.id` (string) Example: "42" - `data.attributes` (object) - `data.attributes.chain_id` (integer) Salon group (chain) ID Example: 5 - `data.attributes.title` (string) Position name Example: "Senior Stylist" - `data.attributes.description` (string) Position description Example: "Senior hair stylist with color specialization" - `data.attributes.services_binding_type` (string) Enum: "none", "optional", "required" - `data.attributes.rules_required_fields` (array) Example: ["phone","email"] - `data.attributes.only_chain_appointment` (boolean) - `data.attributes.salon_ids` (array) Example: [1,2,3] - `meta` (object) - `meta.pagination` (object) - `meta.pagination.total` (integer) - `meta.pagination.limit` (integer) - `meta.pagination.offset` (integer) ## Response 401 fields (application/json): - `success` (boolean) - `data` (null) - `meta` (object) - `meta.message` (string) ## Response 403 fields (application/json): - `success` (boolean) - `data` (null) - `meta` (object) - `meta.message` (string) ## Response 404 fields (application/json): - `success` (boolean) - `data` (null) - `meta` (object) - `meta.message` (string)