Schema Name Normalizer
schema.normalize_schema_names
Overview
You send a JSON Schema or a plain JSON object and pick a convention — camelCase, PascalCase, snake_case, or kebab-case — and we rename the fields to match. You get the rewritten document plus a mapping that lists every field's old and new name, so the rename stays reversible and reviewable. In schema mode we only touch property names, keeping keywords, $ref targets, and definition names exactly as you wrote them. If two different names collapse into one, we tell you rather than quietly losing a field.
A document that mixes user_id, userName, and User-Email breaks code generation and makes mapping layers miserable. Renaming by hand is tedious and easy to get subtly wrong, so we do it by rule and show you every change we made.
Reliability
Deterministic: the same document and options always produce the same names, the same mapping order, and the same collisions. Names are split on underscores, hyphens, spaces, dots, and case boundaries, so HTTPServer becomes two words rather than one. We reject the call, and an unchanged retry will not help, when input is missing, when targetCase, inputKind, or collisionPolicy is not one of the listed values, or when two names collide while collisionPolicy is error — in that last case switch to suffix, or rename one of the fields yourself, and call again.
Context footprint
The document is capped at 1000000 bytes, and the response repeats it once unless you set includeTransformed to false. A successful call costs 1 execution credit.
When to use it
Before you generate code, documentation, or a mapping layer from a schema or a sample payload whose names are inconsistent.
When the original names have to survive as-is, or when the document leans on $ref targets that a rename would leave pointing at the old names.
Scope
Non-goals
- We never rename schema keywords such as type, items, required, $ref, or $defs
- We never rewrite the target of a $ref, so a rename can leave a reference stale
- We never check the document against a schema
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 |
|---|---|---|---|
| input | object | Yes | JSON object to rename; extra keys are schema keywords or payload fields depending on inputKind. — unconstrained RFC 8259 JSON items. |
| inputKind | string | No | json_schema renames property names only; json_object renames every key. Omit it for json_schema. |
| targetCase | string | Yes | Convention to rename into. |
| preserveAcronyms | boolean | No | Whether to keep runs of capitals such as ID; omit it for false. |
| collisionPolicy | string | No | error rejects colliding names; suffix appends _2, _3. Omit it for error. |
| includeTransformed | boolean | No | Whether the rewritten document comes back; omit it for true. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| transformed | object | No | Rewritten document with field names replaced; omit it when includeTransformed is false. — unconstrained RFC 8259 JSON items. |
| mappings | array | Yes | Every field looked at, 0 through 100000 closed {path, original, normalized} objects in document order. |
| collisions | array | Yes | Collapsed names, 0 through 10000 closed objects; empty when every name stayed distinct. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"schema.normalize_schema_names","input":{"input":{"type":"object","properties":{"user_id":{"type":"string"}}},"targetCase":"camelCase"}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("schema.normalize_schema_names", {"input":{"type":"object","properties":{"user_id":{"type":"string"}}},"targetCase":"camelCase"});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 rename schema keywords such as type, items, required, $ref, or $defs
- We never rewrite the target of a $ref, so a rename can leave a reference stale
- We never check the document against a schema
- Renaming schema keywords or the names inside $defs
- Checking data against a schema (schema.validate_json)
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "schema.normalize_schema_names",
"input": {
"input": {
"type": "object",
"properties": {
"user_id": {
"type": "string"
}
}
},
"targetCase": "camelCase"
}
}Examples
snake_case to camelCase
{
"input": {
"type": "object",
"properties": {
"user_id": {
"type": "string"
}
}
},
"targetCase": "camelCase"
}{
"transformed": {
"type": "object",
"properties": {
"userId": {
"type": "string"
}
}
},
"mappings": [
{
"path": "/properties/user_id",
"normalized": "userId",
"original": "user_id"
}
],
"collisions": []
}Mapping report only
{
"targetCase": "PascalCase",
"includeTransformed": false,
"input": {
"type": "object",
"properties": {
"user_name": {
"type": "string"
}
}
}
}{
"collisions": [],
"mappings": [
{
"path": "/properties/user_name",
"normalized": "UserName",
"original": "user_name"
}
]
}Recommended use cases
- Line up payload keys with your language's conventions before you generate code
- Move a schema from snake_case to camelCase without hand-editing every property
- Produce the rename map a mapping or migration layer needs
Avoid for
- Renaming schema keywords or the names inside $defs
- Checking data against a schema (schema.validate_json)
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.