> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stardex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Set job pack retainer split

> Replaces the job's pack retainer split with the list you send. Percentages must total 100; send an empty list to remove the split so claimed retainers use the pack default. Retainers already claimed by a placement keep the split they were given; only later claims use the new one. Returns `422 SPLITS_MUST_TOTAL_100`, `422 INVALID_SPLIT_PERCENTAGE`, `422 DUPLICATE_TEAM_MEMBER` or `422 TEAM_MEMBER_NOT_FOUND` when the split is invalid. Session and OAuth callers need the admin role or the "Edit jobs" permission. Needs `fees:write` for API keys.



## OpenAPI

````yaml /api-reference/openapi-v1.json put /v1/jobs/{id}/pack-retainer-split
openapi: 3.1.0
info:
  title: Stardex API (v1)
  version: 1.0.0
  description: >-
    Stardex ATS API — manage candidates, jobs, companies, and recruiting
    workflows.
servers:
  - url: https://api.stardex.ai
    description: Production API server
security:
  - bearerAuth: []
tags:
  - name: Persons
    description: Manage person records — contacts, work history, and custom fields.
  - name: Jobs
    description: Manage job postings — pipeline stages, team members, and custom fields.
  - name: Candidates
    description: Manage candidate records and pipeline stage transitions.
  - name: Companies
    description: Browse and retrieve company records.
  - name: Lists
    description: Create, search, and retrieve saved person and company lists.
  - name: Person Activities
    description: Create and manage activity records (notes, emails, meetings) for persons.
  - name: Team Members
    description: List team members for use in search filters and assignments.
  - name: Custom Fields
    description: Retrieve custom field definitions and tag options for search filters.
  - name: Campaigns
    description: >-
      Create and edit email campaigns, enroll people through enrollment batches,
      and manage who is enrolled.
paths:
  /v1/jobs/{id}/pack-retainer-split:
    put:
      tags:
        - Jobs
      summary: Set job pack retainer split
      description: >-
        Replaces the job's pack retainer split with the list you send.
        Percentages must total 100; send an empty list to remove the split so
        claimed retainers use the pack default. Retainers already claimed by a
        placement keep the split they were given; only later claims use the new
        one. Returns `422 SPLITS_MUST_TOTAL_100`, `422
        INVALID_SPLIT_PERCENTAGE`, `422 DUPLICATE_TEAM_MEMBER` or `422
        TEAM_MEMBER_NOT_FOUND` when the split is invalid. Session and OAuth
        callers need the admin role or the "Edit jobs" permission. Needs
        `fees:write` for API keys.
      operationId: replaceJobPackRetainerSplit
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            description: Job UUID
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceJobPackRetainerSplitRequest'
      responses:
        '200':
          description: Pack retainer split saved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobPackRetainerSplitResponse'
              example:
                success: true
                data:
                  job_id: 123e4567-e89b-12d3-a456-426614174000
                  splits:
                    - team_member_id: 456e7890-a12b-34c5-d678-901234567890
                      team_member_name: Theo Martin
                      role: Sales
                      split_percentage: 30
                    - team_member_id: 234e5678-e90a-12b3-c456-789012345678
                      team_member_name: Jane Smith
                      role: null
                      split_percentage: 35
                    - team_member_id: 345e6789-f01b-23c4-d567-890123456789
                      team_member_name: Bob Johnson
                      role: null
                      split_percentage: 35
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                      details:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Extra facts about the error when they help you fix it,
                          such as a limit and when it resets.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '403':
          description: >-
            Session and OAuth callers need the admin role or the "Edit jobs"
            permission
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                      details:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Extra facts about the error when they help you fix it,
                          such as a limit and when it resets.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                      details:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Extra facts about the error when they help you fix it,
                          such as a limit and when it resets.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '422':
          description: The split is invalid
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                      details:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Extra facts about the error when they help you fix it,
                          such as a limit and when it resets.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                      details:
                        type: object
                        additionalProperties: {}
                        description: >-
                          Extra facts about the error when they help you fix it,
                          such as a limit and when it resets.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
components:
  schemas:
    ReplaceJobPackRetainerSplitRequest:
      type: object
      properties:
        splits:
          type: array
          items:
            type: object
            properties:
              team_member_id:
                type: string
                format: uuid
                description: Team member UUID to credit. Get IDs from GET /v1/team-members.
              role:
                type:
                  - string
                  - 'null'
                maxLength: 100
                description: Optional label for why this person gets credit (e.g. "Sales").
              split_percentage:
                type: number
                description: >-
                  Share of the retainer for this team member: more than 0 and at
                  most 100.
            required:
              - team_member_id
              - split_percentage
          maxItems: 100
          description: >-
            The job's full pack retainer split, replacing the current one.
            Percentages must total 100. Send an empty list to remove it, so
            claimed retainers use the pack default split. Retainers already
            claimed keep the split they were given.
      required:
        - splits
    JobPackRetainerSplitResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          $ref: '#/components/schemas/JobPackRetainerSplit'
      required:
        - success
        - data
    JobPackRetainerSplit:
      type: object
      properties:
        job_id:
          type: string
          format: uuid
          description: Job UUID.
        splits:
          type: array
          items:
            $ref: '#/components/schemas/JobPackRetainerSplitRow'
          description: >-
            Credit split copied onto a retainer pack retainer when a placement
            on this job claims it. Empty means claimed retainers keep the pack
            default split.
      required:
        - job_id
        - splits
    JobPackRetainerSplitRow:
      type: object
      properties:
        team_member_id:
          type: string
          format: uuid
          description: Team member UUID credited. Matches IDs from GET /v1/team-members.
        team_member_name:
          type:
            - string
            - 'null'
          description: Team member's full name. Null when no name is set.
        role:
          type:
            - string
            - 'null'
          description: Optional label for why this person gets credit (e.g. "Sales").
        split_percentage:
          type: number
          description: >-
            Share of the retainer credited to this team member (0-100). All rows
            total 100.
      required:
        - team_member_id
        - team_member_name
        - role
        - split_percentage
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Authenticate with a Bearer token: API key, OAuth token, or session
        token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.