Circuit follows a schema-driven architecture to enforce structured validation and data protection at every stage of execution.
Using JSON Schema, Circuit defines:
Expected fields and data types
Validation rules and constraints
Input and output structure
Field-level data protection policies
This ensures consistent, secure, and compliant workflow processing.
Schemas can be configured at two levels.
Circuit Input Schema : Validates incoming JSON before execution starts. If validation fails, the circuit does not start.
Each state supports:
State Input Schema : Validates states input JSON before state execution
State Result Schema : Validates state output before passing it to the next state
If validation fails, the state execution fails and the error is recorded in execution logs.
These controls operate at the field level and are enforced automatically during execution.
hide: true
Completely removes the field from the API response
Highest protection priority
Suitable for internal system fields or identifiers
encrypt: true
Encrypts the value before database persistence
Decryption occurs only during Retry or Rerun
Protects sensitive identifiers, tokens, and regulated data
redact: true
Replaces the value with a fixed placeholder (e.g., [REDACTED])
The original value is securely retained
The audit log records the user who performed the unredaction
Suitable for strict PII and confidential data
mask: true
Partially hides the value (e.g., ****)
Allows controlled visibility while protecting sensitive data
If multiple protection rules are applied to the same field, they are enforced in the following order:
Hide → Encrypt → Redact → Mask
This ensures predictable and secure behaviour when multiple rules are configured.
All execution context data is protected using Encryption At Rest.
Fields marked with "encrypt": true are encrypted before storage.
Decryption occurs only during Retry or Rerun.
Data remains protected during idle and normal execution states.
Execution context is isolated per workflow instance.
This architecture ensures sensitive data is never exposed unnecessarily.
Generate Schema from JSON Data (auto-generate)
Click the expand icon next to a property name to configure additional validation settings:
Title and Description
Minimum / Maximum values
Format (e.g., email)
Enum values
Default value
Data Protection Method: hide, encrypt, redact, or mask
If a field is not provided in the input and a default value is defined in the schema, the system automatically assigns the default value to that field before execution proceeds.
This ensures that:
Missing optional fields are populated with predefined values
Workflows continue without interruption due to missing inputs
After adding properties, click Save to apply changes at the client level.
To modify saved properties, make your edits and click Update.
To discard all existing properties and start over, click Reset.
Once finalized, click Save in the circuit to persist the schema to the database.

Clicking Save within the schema properties panel applies changes at the client level only. To permanently save your configuration, you must also click Save in the circuit.
Only properties marked as Required are considered mandatory during validation.
This example shows core employee fields with data protection applied at the top level.
{ "type": "object", "required": ["employeeId", "fullName", "email", "department"], "properties": { "employeeId": { "type": "integer", "title": "Employee ID", "mask": true }, "fullName": { "type": "string", "title": "Full Name" }, "email": { "type": "string", "title": "Work Email", "encrypt": true }, "department": { "type": "string", "title": "Department", "redact": true }, "salary": { "type": "number", "title": "Annual Salary", "redact": true } }}{"employeeId": “100423”,"fullName": "Sarah Mitchell","department": "Engineering","salary": “95000”}
{"employeeId": "######","fullName": "Sarah Mitchell","email": "[ENCRYPTED]","department": "[REDACTED]","salary": "[REDACTED]"}
This example shows personal details configured as a nested object inside the employee record, with data protection applied at both levels.
{"type": "object","properties": {"fullName": { "type": "string", "title": "Full Name" },"email": { "type": "string", "title": "Work Email", "encrypt": true },"personalDetails": {"type": "object","title": "Personal Details","properties": {"phone": { "type": "string", "title": "Phone Number", "hide": true },"address": { "type": "string", "title": "Home Address", "redact": true }}}}}
{"fullName": "Sarah Mitchell","personalDetails": {"phone": "+1-555-987-6543","address": "42 Maple Street, Austin, TX 78701"}}
}
{"fullName": "Sarah Mitchell","email": "[ENCRYPTED]","personalDetails": {"phone": "[HIDDEN]","address": "[REDACTED]"}}
You are currently viewing the help articles of Qntrl 3.0. If you are still using our older version and require guidance with it, Click here.