Scope and keys
- Per-source uniqueness — Profile keys are unique within a source. Two sources can reuse the same key.
- API usage — You reference a profile key when writing resources, defining relationships, configuring partitions, or declaring pipelines.
- Versioning — Updating a profile changes which data future writes must respect. Existing records remain untouched until revalidated through a pipeline or reingested.
Profile types
Profiles come in two flavors:- ROOT — Represents a top-level resource that exists independently. It becomes its own collection inside the source and can be exposed directly through partitions.
- CONTAINED — Represents a component that only lives inside a parent resource. It is written, versioned, and deleted as part of the parent’s lifecycle.
Properties and validation
Each property declares:- A type (
symbol,integer,address, custom objects, arrays…) - Optional
rulesfor validation (required, min/max, enum, pattern, vocabulary bindings) - Whether it can repeat (
array) or embed structured objects (object)
Contained resources
Contained profiles let you model complex data without multiplying top-level resources.When to use contained profiles
- The component depends entirely on a single parent resource.
- You need to update the component independently from other properties of the parent.
- You must allow multiple instances (for example, a clinic with many insurance contracts).
When not to use contained profiles
- The component should be discoverable on its own (queryable partition collection).
- Multiple parent resources must reference the same record.
- You need graph relationships to or from that component.
Example profile
- Uses the Clinia
addresscomplex type while layering custom validation. - Embeds a contained profile to track opening hours without creating an independent resource.
- Keeps ingestion strict by validating enums and required fields.
"type": "CONTAINED" and describe their properties. They become embeddable components that the parent profile references under contained.
For instance, here’s the contained profile for weekly hours of operation. This profile would need to exist before creating the clinic profile above.
The example only shows Monday and Tuesday for brevity.