Skip to main content
Profiles are the schema contracts that govern resources under a source. They specify which properties exist, which data types they use, and which validation rules or vocabularies apply. Every resource instance references a profile key, so profiles are the backbone of data quality in the registry.

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.

Properties and validation

Each property declares:
  • A type (symbol, integer, address, custom objects, arrays…)
  • Optional rules for validation (required, min/max, enum, pattern, vocabulary bindings)
  • Whether it can repeat (array) or embed structured objects (object)
Profiles integrate tightly with field validation so that ingestion rejects records that violate the contract.

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 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.
In those cases, create a different profile and connect records with relationships instead.

Example profile

This profile:
  • Uses the Clinia address complex 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.