Skip to main content
POST
Ingest typed JSON into a source

Before you begin

You need the customer-facing source ID and a tenant-level Application bearer token with the write:sources scope. The Application must be granted access to the target source or to all sources. See Application access tokens to request a token for the tenant audience.
A token created by the legacy data-provider credential exchange has the import-datasource permission. This endpoint requires write:sources, so use a tenant-level Application token.

Typed ingest behavior

Every entry is an upsert. This endpoint does not accept a delete flag. Values keep their native JSON types at the API boundary and are serialized before they enter the asynchronous ingest pipeline. Localized properties require language. Non-localized properties reject it. A null value clears a configured property by storing an empty value.
A timestamp string is treated as a timestamp only when the source property is already configured as Timestamp. An unconfigured string is inferred as Text or LocalizedText.

Type inference for new properties

When a property has no configured type, Occtoo infers it from all values for that property in the request. Strings become Text or LocalizedText; string arrays become List or LocalizedList; booleans become Boolean; whole numbers become Integer; and fractional numbers become Decimal. Integer and decimal values in one request are promoted to Decimal. Other incompatible shapes reject the complete request. Occtoo cannot infer a property from only null values. New list properties use , as their delimiter. Existing list properties keep their configured delimiter, and list elements cannot contain it. Property IDs are matched case-insensitively and stored in lowercase. newPropertiesFound reports inferred properties, but the ingestion worker registers them asynchronously, so they may not appear in Configuration immediately.

Processing and errors

Validation is all-or-nothing. A 400 response returns validation messages keyed by request path. A 202 response means the complete batch passed validation and was queued; downstream entry processing and property registration may still be running. Keep correlationId for diagnostics, and do not retry a successful request because data is not visible immediately. Retry 429 and transient 5xx responses with bounded exponential backoff, respecting Retry-After when present.

Authorizations

Authorization
string
header
required

Sign in with the existing Occtoo Studio identity and selected organization.

Path Parameters

sourceId
string
required

Stable customer-facing source id within the authenticated tenant.

Minimum string length: 1
Example:

"products"

Body

application/json
entries
object[]
required

Non-empty collection of source entries.

Minimum array length: 1

Response

The typed entries were validated, serialized, and queued for asynchronous processing.

correlationId
string<uuid>
required

Correlation id assigned to this asynchronous ingest batch. This is distinct from the HTTP trace id.

Example:

"83b538a7-df7c-4cf4-b988-cd3b71c4cd90"

sourceId
string
required

Customer-facing id of the source that accepted the entries.

Example:

"products"

acceptedAt
string<date-time>
required

UTC time at which the ingest batch was accepted and queued.

Example:

"2026-08-13T10:15:30Z"

acceptedEntryCount
integer<int32>
required

Number of entries accepted in this all-or-nothing request.

Required range: x >= 1
Example:

1

newPropertiesFound
object[]
required

Properties absent from the loaded source configuration and inferred by this request. The ingestion worker registers them asynchronously; they may not be visible in Configuration immediately. Empty when no new properties were found.