---
title: "Update Bulk Sync Schema"
method: PUT
path: "/api/bulk/syncs/{id}/schemas/{schema_id}"
tags: ["Bulk Sync"]
---

# Update Bulk Sync Schema

`PUT /api/bulk/syncs/{id}/schemas/{schema_id}`

Replaces the configuration of a single schema on a bulk sync.

This is a full replacement: every field in the request body is written to the
schema, and any field you omit is cleared or reset to its default. Fetch the
current configuration with
[`GET /api/bulk/syncs/{id}/schemas/{schema_id}`](../../../../../../api-reference/bulk-sync/schemas/get)
first if you want to preserve existing settings while changing only a subset.

Omitting `fields` enables all available fields on the schema. To control which
fields are enabled, include the `fields` array with explicit `enabled` values.

> 📘 To update multiple schemas in a single request without affecting others,
> use the partial-update endpoint
> [`PATCH /api/bulk/syncs/{id}/schemas`](../../../../../../api-reference/bulk-sync/schemas/patch)
> instead.

## Path parameters

- `id` string, uuid, required — Unique identifier of the bulk sync.
- `schema_id` string, required — Source-side schema identifier.

## Headers

- `X-Polytomic-Version` string

## Request body

- UpdateBulkSchema
  - `data_cutoff_timestamp` string, date-time, nullable — Per-schema cutoff. Records older than this timestamp are excluded from sync runs.
  - `disable_data_cutoff` boolean — When true, the sync ignores any configured data_cutoff_timestamp for this schema.
  - `enabled` boolean — Whether this schema is included in sync runs.
  - `fields` UpdateBulkField[], nullable — Field-level configuration. Supplying an empty list enables every field discovered on the source.
    - `enabled` boolean
    - `id` string
    - `obfuscated` boolean
    - `user_output_name` string
  - `filters` BulkFilter[], nullable — Row-level filters applied when reading from the source.
    - `field_id` string — Schema field ID to filter on.
    - `function` 'Equality' | 'Inequality' | 'IsNull' | 'IsNotNull' | 'True' | 'False' | 'OnOrAfter' | 'OnOrBefore' | 'GreaterThan' | 'GreaterThanEqual' | 'LessThan' | 'LessThanEqual' | 'StringContains' | 'StringStartsWith' | 'StringEndsWith' | 'StringDoesNotContain' | 'StringDoesNotStartWith' | 'StringDoesNotEndWith' | 'StringOneOf' | 'StringNotOneOf' | 'Between' | 'ArrayContains' | 'ArrayDoesNotContain' | 'InTheLast' | 'RelativeOnOrBefore' | 'RelativeOnOrAfter' | 'StringLike' | 'StringNotLike' | 'StringMatchesTrimmed', required
    - `value` string
  - `partition_key` string — Source field used to partition rows when writing to the destination.
  - `tracking_field` string — Source field used to detect changes between incremental sync runs.
  - `user_output_name` string

## Response `200`

OK

- BulkSchemaEnvelope
  - `data` BulkSchema
    - `data_cutoff_timestamp` string, date-time, nullable
    - `disable_data_cutoff` boolean
    - `enabled` boolean
    - `fields` BulkField[] — fields is not populated on the list endpoint and will be removed in a future version; retrieve individual schemas for fields.
      - `enabled` boolean
      - `id` string
      - `obfuscated` boolean
      - `output_name` string
      - `user_output_name` string
    - `filters` BulkFilter[] — filters is not populated on the list endpoint and will be removed in a future version; retrieve individual schemas for filters.
      - `field_id` string — Schema field ID to filter on.
      - `function` 'Equality' | 'Inequality' | 'IsNull' | 'IsNotNull' | 'True' | 'False' | 'OnOrAfter' | 'OnOrBefore' | 'GreaterThan' | 'GreaterThanEqual' | 'LessThan' | 'LessThanEqual' | 'StringContains' | 'StringStartsWith' | 'StringEndsWith' | 'StringDoesNotContain' | 'StringDoesNotStartWith' | 'StringDoesNotEndWith' | 'StringOneOf' | 'StringNotOneOf' | 'Between' | 'ArrayContains' | 'ArrayDoesNotContain' | 'InTheLast' | 'RelativeOnOrBefore' | 'RelativeOnOrAfter' | 'StringLike' | 'StringNotLike' | 'StringMatchesTrimmed', required
      - `value` string
    - `id` string
    - `output_name` string
    - `partition_key` string
    - `tracking_field` string
    - `user_output_name` string

## Other responses

- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error

---

[API](https://skmtc.net/polytomic/apis/polytomic-api.md) · [All operations](https://skmtc.net/polytomic/apis/polytomic-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polytomic/polytomic-api/revisions/b509e00e80aa/schema)
