Skip to main content

Request headers

string
required
The service user’s API token in the Bearer YOUR_TOKEN format. The school owner issues the token in the admin panel: Manage → School → For developers → API keys — see the “Authentication” section for details.
integer
required
The numeric ID of the seller — the account the school belongs to. Copy it on the API keys page, in the Integration data → Identifiers card. The token’s permissions are checked against this ID.
integer
required
The numeric ID of the school, found in the same place as Seller-Id. The value must match the seller’s school — otherwise a 400 error with cause: "ForbiddenSchoolMismatch" is returned.
Requires authentication and the “Forms management” permission (FormManage).

Request parameters

Two formats are available for passing values: by slug (recommended) and by fieldId (advanced).
integer
required
Numeric ID of the Exode user (the id field from user/find) for whom the field values are set. The user must belong to the school from the School-Id header.
integer
required
ID of the form layout the fields belong to — the id field from the form list. All fields from values must belong to this layout (otherwise — FieldNotBelongsToLayout).
Where to get slug and fieldId. Form fields are created in the school’s admin panel (not through the API); the field’s code (slug) is set there as well. fieldId, slug and the field type are also returned by getting values in the nested field object. Which method to choose: set-by-slug is more convenient — the slug is stable and the value type is matched to the field automatically; use set if you already store fieldId on your side.
Endpoint: POST /saas/v2/form/custom-field/value/set-by-slug Simplified format — the value type is determined automatically based on the field type in the layout.
object[]
required
Array of field values. At least 1 element.

Format 2: By fieldId (advanced)

Endpoint: POST /saas/v2/form/custom-field/value/set Typed format — you specify the column for the value yourself.
object[]
required
Array of field values. At least 1 element.
Both methods work in upsert mode — if a field value already exists for this user, it is updated. If it doesn’t exist, it is created. One value is stored per “user + field” pair, so a repeated call is safe and simply overwrites the value. Fields not passed in values are not changed. If at least one field from the request is not found or not writable, the entire request is rejected.
Fields whose RBAC settings have api = false (API access denied) cannot be written through this method — the FieldWritePermissionDenied error is returned. The permission is changed in the field settings in the admin panel.

Permission requirements

Setting custom field values requires the service user to have the “Forms management” permission (FormManage).
The service user must be authenticated with a token and have the appropriate access permissions for the specified school.
The form layout (layoutId) must belong to the current school. The user (userId) must be a member of this school.

Updated: 2026-09-25 14:33 UTC