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

# Update a member's allowance (deprecated)

> DEPRECATED: Use the new rule-based endpoints instead: POST /allowance-types/{id}/rules to create rules, POST /members/{id}/rule-assignments to assign members, and POST /members/{id}/adjustments for one-off changes. IMPORTANT: for a member who is on the rule-based model, the `allowance` field is an absolute target for the fiscal year and is applied as a single API-owned adjustment holding the difference between it and the member's rule entitlement. That adjustment is overwritten in place on every send, so sending the same value repeatedly changes nothing, and it is removed again as soon as the value matches the rule entitlement. Adjustments an administrator created in absentify are never counted into that difference and are never modified by this endpoint, so both can coexist: the effective allowance is the value you send plus whatever an administrator added on top. The adjustment is visible in the member's allowance history, labelled as set via the API, and an administrator can delete it there to return the member to the plain rule entitlement. For a member who has no allowance rule at all, the effect depends on the workspace: in a workspace that was moved to the rule-based model, `allowance` is still accepted and has no effect; in a workspace that still runs on the flat model, `allowance` keeps its original behaviour and updates the stored value directly. `compensatory_time_off` and `brought_forward` keep working unchanged wherever the request is accepted; a field you omit keeps its stored value. While a workspace is locked — a migration is running, or it was rolled back to the flat model — this endpoint rejects the whole request with a conflict instead of applying part of it. If the member has no allowance for the requested type and year — no allowance rule assigns them that type for that year, or the year lies outside their employment period — the endpoint returns 404 Not Found; this is a permanent condition, so do not retry it. Note: For day-based allowance types, prorated allowances are automatically rounded up to the nearest bookable increment (0.5 days if half-day booking is enabled, otherwise 1.0 days). The `set_as_default` and `disabled` fields still work here, but they are the only reason some integrations still call this endpoint at all — use PUT /members/{member_id}/allowance-type-configurations/{allowance_type_id} instead, which enforces the same invariants as the UI.



## OpenAPI

````yaml https://api.absentify.com/api/v1/openapi.json put /members/{id}/allowance/{allowance_type_id}/{year}
openapi: 3.1.0
info:
  title: absentify CRUD API
  description: OpenAPI compliant REST API
  version: 1.0.0
servers:
  - url: https://api.absentify.com/api/v1
security: []
tags:
  - name: Departments
  - name: Leave types
  - name: Members
  - name: Requests
  - name: Public holidays
  - name: Workspace
  - name: Absences
  - name: Allowance Management
  - name: Out of office
externalDocs:
  url: https://absentify.com/docs/en/api-reference
paths:
  /members/{id}/allowance/{allowance_type_id}/{year}:
    put:
      tags:
        - Members
      summary: Update a member's allowance (deprecated)
      description: >-
        DEPRECATED: Use the new rule-based endpoints instead: POST
        /allowance-types/{id}/rules to create rules, POST
        /members/{id}/rule-assignments to assign members, and POST
        /members/{id}/adjustments for one-off changes. IMPORTANT: for a member
        who is on the rule-based model, the `allowance` field is an absolute
        target for the fiscal year and is applied as a single API-owned
        adjustment holding the difference between it and the member's rule
        entitlement. That adjustment is overwritten in place on every send, so
        sending the same value repeatedly changes nothing, and it is removed
        again as soon as the value matches the rule entitlement. Adjustments an
        administrator created in absentify are never counted into that
        difference and are never modified by this endpoint, so both can coexist:
        the effective allowance is the value you send plus whatever an
        administrator added on top. The adjustment is visible in the member's
        allowance history, labelled as set via the API, and an administrator can
        delete it there to return the member to the plain rule entitlement. For
        a member who has no allowance rule at all, the effect depends on the
        workspace: in a workspace that was moved to the rule-based model,
        `allowance` is still accepted and has no effect; in a workspace that
        still runs on the flat model, `allowance` keeps its original behaviour
        and updates the stored value directly. `compensatory_time_off` and
        `brought_forward` keep working unchanged wherever the request is
        accepted; a field you omit keeps its stored value. While a workspace is
        locked — a migration is running, or it was rolled back to the flat model
        — this endpoint rejects the whole request with a conflict instead of
        applying part of it. If the member has no allowance for the requested
        type and year — no allowance rule assigns them that type for that year,
        or the year lies outside their employment period — the endpoint returns
        404 Not Found; this is a permanent condition, so do not retry it. Note:
        For day-based allowance types, prorated allowances are automatically
        rounded up to the nearest bookable increment (0.5 days if half-day
        booking is enabled, otherwise 1.0 days). The `set_as_default` and
        `disabled` fields still work here, but they are the only reason some
        integrations still call this endpoint at all — use PUT
        /members/{member_id}/allowance-type-configurations/{allowance_type_id}
        instead, which enforces the same invariants as the UI.
      operationId: member-updateMemberAllowance
      parameters:
        - in: path
          name: id
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          required: true
        - in: path
          name: allowance_type_id
          schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
          required: true
        - in: path
          name: year
          schema:
            type: number
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                allowance:
                  type: number
                compensatory_time_off:
                  type: number
                brought_forward:
                  type: number
                reason:
                  type: string
                overwrite_brought_forward:
                  type: boolean
                set_as_default:
                  type: boolean
                disabled:
                  type: boolean
              required:
                - allowance
                - compensatory_time_off
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: string
                format: uuid
                pattern: >-
                  ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$
        '400':
          description: Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.BAD_REQUEST'
        '401':
          description: Authorization not provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.UNAUTHORIZED'
        '403':
          description: Insufficient access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.FORBIDDEN'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR'
      deprecated: true
      security:
        - ApiKey: []
components:
  schemas:
    error.BAD_REQUEST:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Invalid input data
        code:
          type: string
          description: The error code
          example: BAD_REQUEST
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
            additionalProperties: false
      required:
        - message
        - code
      additionalProperties: false
      title: Invalid input data error (400)
      description: The error information
      example:
        code: BAD_REQUEST
        message: Invalid input data
        issues: []
    error.UNAUTHORIZED:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Authorization not provided
        code:
          type: string
          description: The error code
          example: UNAUTHORIZED
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
            additionalProperties: false
      required:
        - message
        - code
      additionalProperties: false
      title: Authorization not provided error (401)
      description: The error information
      example:
        code: UNAUTHORIZED
        message: Authorization not provided
        issues: []
    error.FORBIDDEN:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Insufficient access
        code:
          type: string
          description: The error code
          example: FORBIDDEN
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
            additionalProperties: false
      required:
        - message
        - code
      additionalProperties: false
      title: Insufficient access error (403)
      description: The error information
      example:
        code: FORBIDDEN
        message: Insufficient access
        issues: []
    error.NOT_FOUND:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Not found
        code:
          type: string
          description: The error code
          example: NOT_FOUND
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
            additionalProperties: false
      required:
        - message
        - code
      additionalProperties: false
      title: Not found error (404)
      description: The error information
      example:
        code: NOT_FOUND
        message: Not found
        issues: []
    error.INTERNAL_SERVER_ERROR:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Internal server error
        code:
          type: string
          description: The error code
          example: INTERNAL_SERVER_ERROR
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
            additionalProperties: false
      required:
        - message
        - code
      additionalProperties: false
      title: Internal server error error (500)
      description: The error information
      example:
        code: INTERNAL_SERVER_ERROR
        message: Internal server error
        issues: []
  securitySchemes:
    ApiKey:
      type: apiKey
      name: X-API-KEY
      in: header

````