DataSync service limits. Requests that exceed a limit are rejected with a 400 Bad Request unless noted otherwise.
| Limit | Value |
|---|
Page size (limit) | 1 to 100 |
| Default page size | 20 |
| Pagination direction | Forward only |
Identifiers
| Limit | Value |
|---|
id length | 1 to 255 characters |
id forbidden characters | Whitespace, commas, colons, asterisks, forward slashes, backslashes, control characters |
status length | 1 to 100 characters |
Classes
| Limit | Value |
|---|
| Class name length | 1 to 128 characters |
| Class name allowed characters | Must start with a letter; may contain letters, digits, hyphens, underscores |
| Projections per class | 3, including __default__ |
| Projection name length | 1 to 64 characters |
| Projection name allowed characters | ^[a-zA-Z0-9][a-zA-Z0-9_-]*$; __default__ is the only exception |
Filtering
| Limit | Value |
|---|
filter_fast predicate count | 10 by default, configurable per keyset |
filter predicate count | No predicate limit is enforced |
Time-to-live (TTL)
| Limit | Value |
|---|
Minimum TTL (config.ttlSec) | 0 |
Maximum TTL (config.ttlSec) | 315,569,260 seconds (approximately 10 years) |
| Default entity class TTL | 2,678,400 seconds (31 days) |
Global User and Channel class TTL | 2,592,000 seconds (30 days) |
| Never-expire option | Not available |
TTL expiry behavior
expiresAt is computed once, at creation, as creation time plus class TTL, rounded up to the start of the next whole UTC day.
- Updating an instance does not extend or refresh
expiresAt.
- There is no per-instance TTL override.
- A relationship expires at the earlier of its two linked entities' expiry times.
- The
filter (eventually consistent) tier can briefly return objects whose expiresAt has passed. Check expiresAt on results from that tier.
Property definitions
| Limit | Value |
|---|
| Reserved property names | id, createdAt, updatedAt. status is reserved except for the exact declaration {"name": "status", "path": "/status"} |
Partial updates
A PATCH operation can only address these paths:
/status
/entityClassVersion (or /relationshipClassVersion for relationships and memberships)
/payload or anything beneath it
Any other pointer returns a 400 Bad Request. The test operation is the exception and can target any pointer without modifying the document.