Schema Path Flattener
schema.flatten_schema_paths
Overview
You send a JSON Schema and we walk it, handing back one row per field: the path, the declared types, whether it is required, its description and format, its allowed values, and any constraint keywords it sets. Paths come out in dot notation or as JSON Pointers, your choice, and a $ref pointing inside the same document is followed with cycle protection. It is a map of the schema, not a verdict on data: to check a document against the schema, use schema.validate_json.
A deeply nested schema is hard to reason about and harder to diff. A flat row per field gives you something you can search, sort, and hand to a mapping screen.
Reliability
Deterministic: the same schema and the same options always give you the same rows in the same order. Anything we skip — a cycle, an external reference, a depth or count limit — is called out in warnings rather than dropped silently, with the one exception of an internal $ref you told us not to follow. We reject the call, and an unchanged retry will not help, when schema is absent or not an object, when pathFormat is anything other than dot or json_pointer, when maxDepth falls outside 1 to 64, or when maxPaths falls outside 1 to 100000.
Context footprint
The response is bounded by maxDepth and maxPaths, so even a huge schema comes back at a size you chose. A successful call costs 1 execution credit.
When to use it
When you want every field a schema describes as one flat list, with its metadata attached.
When you need a verdict on a document, sample data, or definitions pulled in from another file.
Scope
Non-goals
- We never check data against the schema — that is schema.validate_json
- We never follow a $ref into another document or over the network
- We never invent sample data — that is schema.generate_example_payload
Properties
Capabilities
Cost & billing
Flat rate per invocation
File handling
How we handle your data
What this means
This skill may receive sensitive content, but it does not target sensitive data and returns only a structured non-sensitive result.
Squillify guarantees
- Runs inside Squillify
- This skill runs inside Squillify.
- Payloads are not sent to an external service by this skill.
- Squillify does not permanently store submitted payloads.
- Telemetry records metadata only, not submitted content.
- Submitted payloads are not used for training.
- Submitted payloads are not reviewed by humans.
- This skill does not target sensitive data.
- The response does not contain submitted content.
Your responsibility
Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
| schema | object | Yes | JSON Schema to lay out flat, walked through properties, items and in-document $ref, with at most 4096 keys. — unconstrained RFC 8259 JSON items. |
| pathFormat | string | No | dot yields customer.address.city; json_pointer yields /customer/address/city. Omit it for dot. |
| includeArrays | boolean | No | Whether to descend into array items; omit it for true. |
| resolveInternalRefs | boolean | No | Whether to follow in-document $ref; omit it for true. |
| maxDepth | integer | No | How many levels to walk, 1 through 64; omit it for 32. |
| maxPaths | integer | No | How many rows to emit, 1 through 100000; omit it for 10000. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| paths | array | Yes | Field rows in document order, 0 through 100000 closed objects; the schema root itself is never listed. |
| warnings | array | Yes | Non-fatal advisory notices as 0 through 256 strings, each one sentence long; empty when nothing was worth flagging. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"schema.flatten_schema_paths","input":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}},"required":["customer"]},"pathFormat":"dot","maxDepth":8}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("schema.flatten_schema_paths", {"schema":{"required":["id"],"type":"object","properties":{"id":{"type":"string"}}}});Errors
| Code | HTTP | Retryable | Description |
|---|---|---|---|
| VALIDATION_ERROR | 400 | No | The request payload failed schema validation. |
| UNAUTHORIZED | 401 | No | Missing or invalid API key. |
| SKILL_NOT_ACCESSIBLE | 403 | No | The API key is not granted access to this skill. |
| SKILL_NOT_AVAILABLE_FOR_PLAN | 403 | No | This skill is not included in your current plan. |
| PLAN_ELIGIBILITY_UNAVAILABLE | 503 | Yes | Plan eligibility could not be decided. Retry after backoff. |
| SKILL_NOT_FOUND | 404 | No | The requested skill or version does not exist. |
| TENANT_RATE_LIMITED | 429 | Yes | Request rate limit exceeded. Retry after backoff. |
| QUOTA_EXCEEDED | 429 | Yes | Plan quota exhausted. Retryable once the quota period resets. |
| EXECUTION_TIMEOUT | 504 | Yes | Execution exceeded the allowed time budget. |
Other limits
| Limit | Value |
|---|---|
| Recommended inline bytes | 32 KiB |
Limitations
- We never check data against the schema — that is schema.validate_json
- We never follow a $ref into another document or over the network
- We never invent sample data — that is schema.generate_example_payload
- Checking whether a document satisfies the schema
- Pulling in definitions that live in another file
- Producing a sample payload from the schema
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "schema.flatten_schema_paths",
"input": {
"schema": {
"required": [
"id"
],
"type": "object",
"properties": {
"id": {
"type": "string"
}
}
}
}
}Examples
Dot-notation inventory of a small schema
{
"schema": {
"required": [
"id"
],
"type": "object",
"properties": {
"id": {
"type": "string"
}
}
}
}{
"paths": [
{
"path": "id",
"type": [
"string"
],
"required": true,
"description": null,
"format": null,
"enum": null,
"constraints": {}
}
],
"warnings": []
}JSON Pointer paths with allowed values
{
"schema": {
"type": "object",
"properties": {
"status": {
"enum": [
"active",
"suspended"
],
"type": "string",
"description": "Account state"
}
}
},
"includeArrays": false,
"pathFormat": "json_pointer"
}{
"paths": [
{
"path": "/status",
"type": [
"string"
],
"required": false,
"description": "Account state",
"format": null,
"enum": [
"active",
"suspended"
],
"constraints": {}
}
],
"warnings": []
}Recommended use cases
- Build a field inventory you can search, sort, or paste into a spreadsheet
- Drive a form or a field-mapping screen straight from the schema
- Compare two schemas by lining up their flattened paths
Avoid for
- Checking whether a document satisfies the schema
- Pulling in definitions that live in another file
- Producing a sample payload from the schema
Related skills
Composable with
Safety & privacy
- Runs without calling any external service.
- Your payloads are never stored permanently.
- Telemetry captures metadata only — never your payload contents.
- We never train models on your payloads.
- No human reviews your payloads.