Review flow
Hosted Review is where reviewers confirm mappings, fix data, approve output, or cancel before final processing.
Every transformation run gets a signed review_url. Send that URL to the reviewer instead of building your own mapping or validation UI. Review links expire after 24 hours; expired links show a closed state without exposing source data, generated rows, or mapping details.
Steps
Structured file reviews start on Mapping, where reviewers confirm header detection and source-column mappings. Raw text and image reviews skip Mapping because the provider has already generated output rows; they open directly on Validate Data.
Validate Data lets reviewers edit cells and resolve required-field errors before approval. Saved edits are patch records, so an empty string is preserved as an intentional value and can still fail required-field validation.
Approval
Approval is the transition to customer-consumable output. Use all_rows when every row must pass required-field validation. Use valid_rows_only when invalid rows should be skipped and only valid edited rows should be written to the final artifact.
States
activereview_stateThe signed Review URL is usable and the reviewer can complete the current review steps.
approvedreview_stateThe reviewer approved the mapping and/or data edits, and final output processing is allowed to run.
canceledreview_stateThe reviewer explicitly canceled. The review closes and a cancellation webhook is sent when a notify URL exists.
expiredreview_stateThe signed URL is past its expiry and renders an expired state without exposing mapping or data.
Customize each review
File and raw create requests accept optional review customization fields. They are stored on the hosted review and are returned in the run state where relevant.
success_callbackurl | nullOptional callback URL reviewers return to after approving. Production callback URLs must use HTTPS.
cancel_callbackurl | nullOptional callback URL reviewers return to after canceling. Production callback URLs must use HTTPS.
localestring | nullOptional locale hint. Supported values: en, de, fr, nl, es, it, pl, ar.
appearancelight | dark | nullOptional hosted Review appearance persisted for this review interaction.
column_labelsobject | nullOptional target-field label overrides shown as column names in Validate Data.
{
"success_callback": "https://example.com/imports/review-approved",
"cancel_callback": "https://example.com/imports/review-canceled",
"locale": "de",
"appearance": "dark",
"column_labels": {
"employee_id": "Personalnummer",
"work_email": "E-Mail",
"department": "Abteilung"
}
}column_labels keys must match target schema field keys. Blank label values are treated as null, so Review falls back to the schema field label or field key.
After approval or cancellation, callback redirects append transformation_run_id as a query parameter. Store that id and fetch the run if your app needs fresh state after the browser returns.
Customize organization appearance
Organization admins can configure hosted Review branding under Settings → Review appearance. When custom review branding is enabled for the organization, reviewers see the configured brand name, logo, favicon, accent color, and support URL. Otherwise Review falls back to Transmutify branding and keeps the powered-by footer visible.
- Logos support
PNG, JPG, JPEG, WEBPup to 2 MB. - Favicons support
PNG, JPG, JPEG, WEBP, ICOup to 512 KB. - Accent colors must be six-digit hex colors such as
#635bff.
Webhooks and output
Review-stage progress does not send customer processing webhooks. The customer-facing webhook events are final output success (transformation.finished) and explicit review cancellation (transformation.review.canceled). For failures, fetch GET /transformations/{id} and read error.