---
title: "replace many customAttributes which exists or not"
method: PUT
path: "/api/serviceworkforce/customAttributes"
tags: ["customAttributes"]
---

# replace many customAttributes which exists or not

`PUT /api/serviceworkforce/customAttributes`

## Request

- Base URL: `https://services.fountain.com`
- URL: `https://services.fountain.com/api/serviceworkforce/customAttributes`
- Auth: HTTP bearer

Replace many customAttributes which exists or not

## Request body

- CustomAttribute[]
  - `uuid` string, uuid
  - `createdAt` string, date-time: Creation timestamp
  - `createdBy` string, uuid: Creator UUID
  - `lastUpdatedAt` string, date-time: Last update timestamp
  - `lastUpdatedBy` string, uuid: Last updater UUID
  - `lastUpdatedByAudience` string: Audience of last updater
  - `lastUpdatedByAudienceUuid` string, uuid: Audience UUID of last updater
  - `lastUpdatedByImpersonatedBy` string, uuid: Impersonator UUID
  - `lastUpdatedByCompanyUuid` string, uuid: Company UUID of last updater
  - `lastUpdatedByEnterpriseUuid` string, uuid: Enterprise UUID of last updater
  - `companyUuid` string, uuid: Company UUID
  - `label` string, required
  - `key` string
  - `dataType` 'string' | 'number' | 'date' | 'boolean' | 'select' | 'address' | 'media' | 'signature' | 'complianceDocument', required
  - `description` string
  - `options` object[]
    - `value` string, required
    - `label` string
    - `archived` boolean: If true, this option is unavailable for new worker selections.
    - `hireValue` unknown
  - `resource` string
  - `resourceIdentifier` string, uuid
  - `readOnly` boolean: If true, this attribute cannot be modified. Can only be set by system.
  - `hidden` boolean: If true, this attribute won't be shown. Can only be set by system.
  - `protected` boolean: If true, this attribute can only be accessed by users with certain rights.
  - `hireDataKeyId` integer: The ID of the hire data key
  - `origin` 'wx' | 'hire': Which system authored this attribute definition
  - `attributeSectionUuid` string, uuid, nullable: UUID of the attributeSection this attribute is grouped under on the worker profile Attributes tab. Null, absent or a deleted section means unassigned: the UI renders an unassigned applicant-origin attribute (hireDataKeyId set) under the virtual "Applicant Attributes" section, otherwise under a trailing "Other" group. A hidden attribute never renders, even inside a company section.
  - `validation` union: Optional format rule enforced on this attribute. Absent means no rule: exactly the pre-validation behavior. Send null to remove a rule — over JSON that is the only way to say "clear it", since an absent key is a partial patch that leaves the stored rule alone.
    - object
      - `rule` 'regex', required
      - `config` object, required
        - `pattern` string, required
        - `flags` string
      - `message` string
    - object
      - `rule` 'email', required
      - `config` object
      - `message` string
    - object
      - `rule` 'phone', required
      - `config` object
        - `locale` string
      - `message` string
    - object
      - `rule` 'bankAccountNumber', required
      - `config` object
      - `message` string
    - object
      - `rule` 'bankRoutingNumber', required
      - `config` object
      - `message` string
    - object
      - `rule` 'iban', required
      - `config` object
      - `message` string
    - object
      - `rule` 'postalCode', required
      - `config` object
        - `locale` string
      - `message` string
    - object
      - `rule` 'taxId', required
      - `config` object, required
        - `locale` string, required
      - `message` string
    - object
      - `rule` 'passport', required
      - `config` object, required
        - `locale` string, required
      - `message` string
    - object
      - `rule` 'restrictedCharacters', required
      - `config` object, required
        - `characters` string, required
      - `message` string
    - object
      - `rule` 'minLength', required
      - `config` object, required
        - `value` integer, required
      - `message` string
    - object
      - `rule` 'maxLength', required
      - `config` object, required
        - `value` integer, required
      - `message` string
    - object
      - `rule` 'minValue', required
      - `config` object, required
        - `value` number, required
      - `message` string
    - object
      - `rule` 'maxValue', required
      - `config` object, required
        - `value` number, required
      - `message` string
    - object
      - `rule` 'pastDate', required
      - `config` object
      - `message` string
    - object
      - `rule` 'futureDate', required
      - `config` object
      - `message` string
    - unknown
  - `generation` integer: Monotonically increasing definition generation. Increments only when the validation rule changes. A value is current against the rule only when its lastCheckedGeneration equals this. Read-only.

## Response `202`

customAttributes replaced. Wrapped in a JsonAPI root response.

- object
  - `data` CustomAttribute[]
    - `uuid` string, uuid
    - `createdAt` string, date-time: Creation timestamp
    - `createdBy` string, uuid: Creator UUID
    - `lastUpdatedAt` string, date-time: Last update timestamp
    - `lastUpdatedBy` string, uuid: Last updater UUID
    - `lastUpdatedByAudience` string: Audience of last updater
    - `lastUpdatedByAudienceUuid` string, uuid: Audience UUID of last updater
    - `lastUpdatedByImpersonatedBy` string, uuid: Impersonator UUID
    - `lastUpdatedByCompanyUuid` string, uuid: Company UUID of last updater
    - `lastUpdatedByEnterpriseUuid` string, uuid: Enterprise UUID of last updater
    - `companyUuid` string, uuid: Company UUID
    - `label` string, required
    - `key` string
    - `dataType` 'string' | 'number' | 'date' | 'boolean' | 'select' | 'address' | 'media' | 'signature' | 'complianceDocument', required
    - `description` string
    - `options` object[]
      - `value` string, required
      - `label` string
      - `archived` boolean: If true, this option is unavailable for new worker selections.
      - `hireValue` unknown
    - `resource` string
    - `resourceIdentifier` string, uuid
    - `readOnly` boolean: If true, this attribute cannot be modified. Can only be set by system.
    - `hidden` boolean: If true, this attribute won't be shown. Can only be set by system.
    - `protected` boolean: If true, this attribute can only be accessed by users with certain rights.
    - `hireDataKeyId` integer: The ID of the hire data key
    - `origin` 'wx' | 'hire': Which system authored this attribute definition
    - `attributeSectionUuid` string, uuid, nullable: UUID of the attributeSection this attribute is grouped under on the worker profile Attributes tab. Null, absent or a deleted section means unassigned: the UI renders an unassigned applicant-origin attribute (hireDataKeyId set) under the virtual "Applicant Attributes" section, otherwise under a trailing "Other" group. A hidden attribute never renders, even inside a company section.
    - `validation` union: Optional format rule enforced on this attribute. Absent means no rule: exactly the pre-validation behavior. Send null to remove a rule — over JSON that is the only way to say "clear it", since an absent key is a partial patch that leaves the stored rule alone.
      - object
        - `rule` 'regex', required
        - `config` object, required
          - `pattern` string, required
          - `flags` string
        - `message` string
      - object
        - `rule` 'email', required
        - `config` object
        - `message` string
      - object
        - `rule` 'phone', required
        - `config` object
          - `locale` string
        - `message` string
      - object
        - `rule` 'bankAccountNumber', required
        - `config` object
        - `message` string
      - object
        - `rule` 'bankRoutingNumber', required
        - `config` object
        - `message` string
      - object
        - `rule` 'iban', required
        - `config` object
        - `message` string
      - object
        - `rule` 'postalCode', required
        - `config` object
          - `locale` string
        - `message` string
      - object
        - `rule` 'taxId', required
        - `config` object, required
          - `locale` string, required
        - `message` string
      - object
        - `rule` 'passport', required
        - `config` object, required
          - `locale` string, required
        - `message` string
      - object
        - `rule` 'restrictedCharacters', required
        - `config` object, required
          - `characters` string, required
        - `message` string
      - object
        - `rule` 'minLength', required
        - `config` object, required
          - `value` integer, required
        - `message` string
      - object
        - `rule` 'maxLength', required
        - `config` object, required
          - `value` integer, required
        - `message` string
      - object
        - `rule` 'minValue', required
        - `config` object, required
          - `value` number, required
        - `message` string
      - object
        - `rule` 'maxValue', required
        - `config` object, required
          - `value` number, required
        - `message` string
      - object
        - `rule` 'pastDate', required
        - `config` object
        - `message` string
      - object
        - `rule` 'futureDate', required
        - `config` object
        - `message` string
      - unknown
    - `generation` integer: Monotonically increasing definition generation. Increments only when the validation rule changes. A value is current against the rule only when its lastCheckedGeneration equals this. Read-only.
  - `meta` ResponsesPartMeta
    - `timestamp` string, date-time, required
    - `verb` 'OPTION' | 'GET' | 'PUT' | 'POST' | 'PATCH' | 'DELETE'
    - `path` string
    - `jti` string
    - `rid` string
    - `count` number
    - `capped` boolean: The server lowered filter[limit] to its ceiling. Page with filter[skip] to read past it.
    - `status` string
    - `duration` number
    - `size` number

## Other responses

- `500`: default error response

---

[API](https://skmtc.dev/fountain/apis/worker-experience-public-api.md) - [All operations](https://skmtc.dev/fountain/apis/worker-experience-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fountain/apis/worker-experience-public-api/revisions/6b9a31f79e22?raw)
