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

# Update custom attribute values for a job

> Update one or more custom attribute values for a specific job. Provide an array of attribute definition IDs and their new values.



## OpenAPI

````yaml /api-reference/openapi.json put /custom-attributes/vacancies/{id}/values/_bulk
openapi: 3.1.0
info:
  title: Spott API Reference
  version: '0.1'
servers:
  - url: https://api.gospott.com
security: []
tags: []
paths:
  /custom-attributes/vacancies/{id}/values/_bulk:
    put:
      tags:
        - Custom Attributes
      summary: Update custom attribute values for a job
      description: >-
        Update one or more custom attribute values for a specific job. Provide
        an array of attribute definition IDs and their new values.
      operationId: updateVacancyAttribute
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAttributeValuesDto'
      responses:
        '204':
          description: Custom attribute values updated successfully
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
        '400':
          description: Bad request - invalid parameters or attribute values
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ExceptionBaseDto'
                  - type: object
                    properties:
                      statusCode:
                        type: number
                        example: 400
                      message:
                        type: string
                        example: At least one attribute is required
                      error:
                        type: string
                        example: Bad Request
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
        '401':
          description: Unauthorized - invalid or missing authentication
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionBaseDto'
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
        '404':
          description: Job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionBaseDto'
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlobalConflictApiErrorDto'
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
        '429':
          description: >-
            Too Many Requests. The published limit for this endpoint is 600
            requests per minute per workspace. The limit in force for your
            workspace can differ from it in either direction — a workspace on a
            free trial can be capped lower, and a higher limit can be arranged
            through support — so the headers, not this number, are
            authoritative. Read the RateLimit-Policy response header for the
            quota actually in force and RateLimit for what is left of the
            current window; on a 429, Retry-After gives the seconds to wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExceptionBaseDto'
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            Retry-After:
              $ref: '#/components/headers/Retry-After'
        '500':
          description: Error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorDto'
          headers:
            RateLimit:
              $ref: '#/components/headers/RateLimit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
      security:
        - x-api-key: []
components:
  schemas:
    UpdateAttributeValuesDto:
      type: object
      properties:
        attributes:
          maxItems: 100
          type: array
          items:
            $ref: '#/components/schemas/UpdateAttributeValueDto'
      required:
        - attributes
    ExceptionBaseDto:
      type: object
      properties:
        status:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        category:
          $ref: '#/components/schemas/ApiErrorCategoryDto'
        message:
          type: string
        requestId:
          type: string
      required:
        - status
        - message
        - requestId
    GlobalConflictApiErrorDto:
      anyOf:
        - $ref: '#/components/schemas/ResourceAlreadyExistsApiErrorDto'
        - $ref: '#/components/schemas/ResourceLockTimeoutApiErrorDto'
    InternalServerErrorDto:
      type: object
      properties:
        status:
          type: number
          const: 500
        category:
          type: string
          enum:
            - INTERNAL_ERROR
        message:
          type: string
          enum:
            - Internal server error
        requestId:
          type: string
      required:
        - status
        - category
        - message
        - requestId
    UpdateAttributeValueDto:
      type: object
      properties:
        attributeDefinitionId:
          type: string
          minLength: 1
        value:
          $ref: '#/components/schemas/SharedCustomAttributeTypeRequestDto'
      required:
        - attributeDefinitionId
        - value
    ApiErrorCategoryDto:
      type: string
      enum:
        - MALFORMED_REQUEST
        - SCHEMA_VALIDATION_FAILED
        - DOMAIN_VALIDATION_FAILED
        - OPERATION_LIMIT_EXCEEDED
        - AUTHENTICATION_REQUIRED
        - AUTHENTICATION_FAILED
        - SECURITY_CHALLENGE_REQUIRED
        - SECURITY_CHALLENGE_FAILED
        - PERMISSION_DENIED
        - ENTITLEMENT_REQUIRED
        - PROVIDER_AUTHENTICATION_REQUIRED
        - PROVIDER_AUTHENTICATION_FAILED
        - CONFIGURATION_REQUIRED
        - RESOURCE_NOT_FOUND
        - RESOURCE_ALREADY_EXISTS
        - RESOURCE_EXPIRED
        - RESOURCE_BUSY
        - RESOURCE_STATE_CONFLICT
        - QUOTA_EXCEEDED
        - RATE_LIMITED
        - UNSUPPORTED_OPERATION
        - UPSTREAM_REJECTED
        - TIMEOUT
        - TEMPORARILY_UNAVAILABLE
        - INTERNAL_ERROR
    ResourceAlreadyExistsApiErrorDto:
      type: object
      properties:
        status:
          type: number
          const: 409
        category:
          type: string
          enum:
            - RESOURCE_ALREADY_EXISTS
        message:
          type: string
          enum:
            - Resource already exists
        requestId:
          type: string
      required:
        - status
        - category
        - message
        - requestId
    ResourceLockTimeoutApiErrorDto:
      type: object
      properties:
        status:
          type: number
          const: 409
        category:
          type: string
          enum:
            - RESOURCE_BUSY
        message:
          type: string
          enum:
            - >-
              Lock could not be acquired for this resource, please try again
              later.
        requestId:
          type: string
      required:
        - status
        - category
        - message
        - requestId
    SharedCustomAttributeTypeRequestDto:
      oneOf:
        - $ref: '#/components/schemas/CustomTextTypeDto'
        - $ref: '#/components/schemas/CustomNumberTypeDto'
        - $ref: '#/components/schemas/CustomCheckboxTypeDto'
        - $ref: '#/components/schemas/CustomDateTypeDto'
        - $ref: '#/components/schemas/CustomTimestampTypeDto'
        - $ref: '#/components/schemas/CustomRatingTypeDto'
        - $ref: '#/components/schemas/CustomSelectTypeDto'
        - $ref: '#/components/schemas/CustomMultiSelectTypeRequestDto'
        - $ref: '#/components/schemas/CustomCurrencyTypeDto'
        - $ref: '#/components/schemas/CustomDateRangeTypeDto'
        - $ref: '#/components/schemas/CustomDurationTypeDto'
        - $ref: '#/components/schemas/CustomUrlTypeDto'
        - $ref: '#/components/schemas/CustomEntityTypeDto'
        - $ref: '#/components/schemas/CustomMultiEntityTypeRequestDto'
    CustomTextTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customText
        text:
          type:
            - string
            - 'null'
      required:
        - viewType
        - text
    CustomNumberTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customNumber
        number:
          type:
            - number
            - 'null'
      required:
        - viewType
        - number
    CustomCheckboxTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customCheckbox
        checked:
          type:
            - boolean
            - 'null'
      required:
        - viewType
        - checked
    CustomDateTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customDate
        date:
          anyOf:
            - $ref: '#/components/schemas/DateISO'
            - type: 'null'
      required:
        - viewType
        - date
    CustomTimestampTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customTimestamp
        timestamp:
          anyOf:
            - $ref: '#/components/schemas/DateISO'
            - type: 'null'
      required:
        - viewType
        - timestamp
    CustomRatingTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customRating
        rating:
          type:
            - number
            - 'null'
      required:
        - viewType
        - rating
    CustomSelectTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customSelect
        select:
          type:
            - string
            - 'null'
      required:
        - viewType
        - select
    CustomMultiSelectTypeRequestDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customMultiSelect
        multiSelect:
          maxItems: 100
          type: array
          items:
            type: string
      required:
        - viewType
        - multiSelect
    CustomCurrencyTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customCurrency
        monetaryAmount:
          anyOf:
            - $ref: '#/components/schemas/MonetaryAmountDto'
            - type: 'null'
      required:
        - viewType
        - monetaryAmount
    CustomDateRangeTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customDateRange
        dateRange:
          anyOf:
            - $ref: '#/components/schemas/DateRangeDto'
            - type: 'null'
      required:
        - viewType
        - dateRange
    CustomDurationTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customDuration
        duration:
          type:
            - number
            - 'null'
      required:
        - viewType
        - duration
    CustomUrlTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customUrl
        url:
          type:
            - string
            - 'null'
      required:
        - viewType
        - url
    CustomEntityTypeDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customEntity
        type:
          type: string
          enum:
            - user
        id:
          type:
            - string
            - 'null'
        entity:
          anyOf:
            - $ref: '#/components/schemas/UserBadgeDto'
            - type: 'null'
      required:
        - viewType
        - type
        - id
    CustomMultiEntityTypeRequestDto:
      type: object
      properties:
        viewType:
          type: string
          enum:
            - customMultiEntity
        type:
          type: string
          enum:
            - user
        ids:
          maxItems: 100
          type: array
          items:
            type: string
        entities:
          maxItems: 100
          type: array
          items:
            $ref: '#/components/schemas/UserBadgeDto'
      required:
        - viewType
        - type
        - ids
    DateISO:
      format: date-time
      anyOf:
        - type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
        - type: string
          format: date
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
    MonetaryAmountDto:
      type: object
      properties:
        currency:
          $ref: '#/components/schemas/DmCurrency'
        amount:
          type: number
      required:
        - currency
        - amount
    DateRangeDto:
      type: object
      properties:
        startDate:
          $ref: '#/components/schemas/DateISO'
        endDate:
          anyOf:
            - $ref: '#/components/schemas/DateISO'
            - type: 'null'
      required:
        - startDate
        - endDate
    UserBadgeDto:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        avatarUrl:
          type:
            - string
            - 'null'
        deactivatedAt:
          anyOf:
            - $ref: '#/components/schemas/DateISO'
            - type: 'null'
      required:
        - id
        - name
        - avatarUrl
        - deactivatedAt
    DmCurrency:
      type: string
      enum:
        - AED
        - AFN
        - ALL
        - AMD
        - ANG
        - AOA
        - ARS
        - AUD
        - AWG
        - AZN
        - BAM
        - BBD
        - BDT
        - BGN
        - BHD
        - BIF
        - BMD
        - BND
        - BOB
        - BRL
        - BSD
        - BTC
        - BTN
        - BWP
        - BYN
        - BZD
        - CAD
        - CDF
        - CHF
        - CLF
        - CLP
        - CNH
        - CNY
        - COP
        - CRC
        - CUC
        - CUP
        - CVE
        - CZK
        - DJF
        - DKK
        - DOP
        - DZD
        - EGP
        - ERN
        - ETB
        - EUR
        - FJD
        - FKP
        - GBP
        - GEL
        - GGP
        - GHS
        - GIP
        - GMD
        - GNF
        - GTQ
        - GYD
        - HKD
        - HNL
        - HRK
        - HTG
        - HUF
        - IDR
        - ILS
        - IMP
        - INR
        - IQD
        - IRR
        - ISK
        - JEP
        - JMD
        - JOD
        - JPY
        - KES
        - KGS
        - KHR
        - KMF
        - KPW
        - KRW
        - KWD
        - KYD
        - KZT
        - LAK
        - LBP
        - LKR
        - LRD
        - LSL
        - LYD
        - MAD
        - MDL
        - MGA
        - MKD
        - MMK
        - MNT
        - MOP
        - MRU
        - MUR
        - MVR
        - MWK
        - MXN
        - MYR
        - MZN
        - NAD
        - NGN
        - NIO
        - NOK
        - NPR
        - NZD
        - OMR
        - PAB
        - PEN
        - PGK
        - PHP
        - PKR
        - PLN
        - PYG
        - QAR
        - RON
        - RSD
        - RUB
        - RWF
        - SAR
        - SBD
        - SCR
        - SDG
        - SEK
        - SGD
        - SHP
        - SLE
        - SLL
        - SOS
        - SRD
        - SSP
        - STD
        - STN
        - SVC
        - SYP
        - SZL
        - THB
        - TJS
        - TMT
        - TND
        - TOP
        - TRY
        - TTD
        - TWD
        - TZS
        - UAH
        - UGX
        - USD
        - UYU
        - UZS
        - VEF
        - VES
        - VND
        - VUV
        - WST
        - XAF
        - XAG
        - XAU
        - XCD
        - XCG
        - XDR
        - XOF
        - XPD
        - XPF
        - XPT
        - YER
        - ZAR
        - ZMW
        - ZWG
        - ZWL
  headers:
    RateLimit:
      description: >-
        Quota state for this endpoint, as an RFC 8941 structured field
        (draft-ietf-httpapi-ratelimit-headers). The quoted value names the
        policy — the operationId of the endpoint the counters belong to. `r` is
        how many requests are left in the current window, `t` how many seconds
        remain before it resets.
      schema:
        type: string
      example: '"getCandidates";r=417;t=23'
    RateLimit-Policy:
      description: >-
        The policy the RateLimit header reports against, as an RFC 8941
        structured field. `q` is the quota — the requests allowed per window —
        and `w` the window length in seconds. Limits are per endpoint, so the
        quota differs between operations. This is the quota in force for the
        calling workspace, which can be lower or higher than the default
        published on the operation; treat it as authoritative.
      schema:
        type: string
      example: '"getCandidates";q=600;w=60'
    Retry-After:
      description: >-
        Seconds to wait before retrying. Sent on 429 responses; it matches the
        `t` parameter of the RateLimit header.
      schema:
        type: integer
      example: 23
  securitySchemes:
    x-api-key:
      type: apiKey
      name: x-api-key
      in: header
      description: >-
        API key for authentication. Get your API key from Settings → API Keys in
        your Spott dashboard.

````

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