Skip to Content

Utility Execution API

Run a single utility transformation without building a pipeline.

Endpoint: POST /api/v1/utilities/{utilityId} Required permission: utilities

Request

curl -X POST https://forgejson.com/api/v1/utilities/schema.clean-json \ -H "Authorization: Bearer fje_your_key" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "primary": { "name": "Alice", "email": null, "tags": [], "bio": "" } }, "config": { "removeNulls": true, "removeEmptyStrings": true, "removeEmptyArrays": true } }'

Request body

{ "inputs": { "primary": <any JSON value>, "secondary": <any JSON value> }, "config": { <utility-specific settings> } }
FieldTypeRequiredDescription
inputs.primaryany JSONYesThe primary input passed to the utility
inputs.secondaryany JSONNoSecondary input for multi-input utilities such as deep merge
configobjectNoUtility configuration (merged with defaults)

If config is omitted, the utility runs with its default settings.

Response (200) — Success

{ "success": true, "output": { "name": "Alice" }, "durationMs": 3, "creditsUsed": 1 }
FieldTypeDescription
outputany JSONThe transformed result
durationMsnumberExecution time in milliseconds
creditsUsednumberCredits consumed (1 per successful run)

Available utility IDs

IDNameCategory
convert.csv-to-jsonCSV to JSONconvert
convert.json-to-csvJSON to CSVconvert
convert.add-localizationAdd Localizationlocalization
structure.find-replaceFind & Replaceconvert
merge.deep-mergeDeep Mergemerge
structure.flatten-nestFlatten / Neststructure
structure.restructureRestructurestructure
structure.pick-fieldsPick Fieldsstructure
structure.remove-fieldsRemove Fieldsstructure
structure.copy-moveCopy / Movestructure
schema.normalizeNormalizeschema
schema.clean-jsonClean JSONcleanup
schema.truncateTruncateschema
schema.computeCompute Fieldsschema
analysis.aggregateAggregateanalysis
analysis.summarizeSummarizeanalysis
analysis.diffDiffanalysis
cleanup.format-valuesFormat Valuescleanup
cleanup.redactRedactcleanup
cleanup.map-valuesMap Valuescleanup
generate.generate-mock-dataGenerate Mock Datagenerate
generate.filterFiltergenerate

Browse the Store  for interactive examples and full configuration options for each utility.

Common examples

Clean JSON

Remove nulls, empty strings, and trim whitespace:

curl -X POST https://forgejson.com/api/v1/utilities/schema.clean-json \ -H "Authorization: Bearer fje_your_key" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "primary": {"name": " Alice ", "email": null, "role": ""} }, "config": {"removeNulls": true, "removeEmptyStrings": true, "trimStrings": true} }'

Output: {"name": "Alice"}

Find & Replace

Replace values across the entire document:

curl -X POST https://forgejson.com/api/v1/utilities/structure.find-replace \ -H "Authorization: Bearer fje_your_key" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "primary": {"greeting": "hello world", "message": "hello there"} }, "config": {"search": "hello", "replacement": "hi", "mode": "value"} }'

Output: {"greeting": "hi world", "message": "hi there"}

Pick Fields

Keep only specific fields:

curl -X POST https://forgejson.com/api/v1/utilities/structure.pick-fields \ -H "Authorization: Bearer fje_your_key" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "primary": {"name": "Alice", "age": 25, "email": "a@b.com", "ssn": "123-45-6789"} }, "config": {"paths": ["name", "email"]} }'

Output: {"name": "Alice", "email": "a@b.com"}

Redact sensitive data

Mask emails and phone numbers:

curl -X POST https://forgejson.com/api/v1/utilities/cleanup.redact \ -H "Authorization: Bearer fje_your_key" \ -H "Content-Type: application/json" \ -d '{ "inputs": { "primary": {"email": "alice@example.com", "phone": "555-1234"} }, "config": {"patterns": ["email", "phone"], "maskStyle": "partial"} }'

Output: {"email": "a***@example.com", "phone": "***-1234"}

Size limits

LimitValue
Maximum payload size50 MB
Worker thresholdPayloads > 2 KB run in a worker thread
Worker timeout30 seconds

Error responses

StatusMeaning
400Missing inputs.primary, invalid JSON, or utility execution failed
404Utility not found
401Authentication failed
403Missing utilities permission
408Execution timed out (30s for worker)
413Payload exceeds 50 MB
429Rate limit exceeded
500Internal server error
Last updated on