List deleted transformations
Lists the calling customer's transformations currently in the trash, paginated, with the
same filters as the transformation list. A deleted transformation stays in the trash for
one month, then is erased permanently along with its data. Restore one with
PUT /transformation/{transformationId}.
https://api.wetransform.com/transformations/trash
template_handles
array
Optional. Handles of the templates whose transformations to keep; omit it to list the
transformations of every template. In the query string, repeat the parameter:
template_handles[]=furniture&template_handles[]=new-hires. A handle you cannot access is
rejected with a 409.
page
integer
Page number to request, starting at 1. Defaults to 1.
1
per_page
integer
Number of entries per page, from 1 to 200. Defaults to 25.
25
{
"template_handles": [],
"page": 1,
"per_page": 25
}
Copy
success
boolean
Always true on successful responses.
true
payload
object
Payload of the requested resource.
payload.total_pages
integer
Total number of available pages.
5
payload.current_page
integer
Current page requested.
5
payload.total_items
integer
Total number of items.
103
payload.items_per_page
integer
Number of items per page.
25
payload.entries
array
An array of the requested resources.
payload.entries[].connector
object
nullable
The connector behind this transformation (itself if it is a connector, else the connector it was made from), for showing its name and logo. Null when neither applies.
payload.entries[].connector.is_connector
boolean
Whether the transformation is itself a connector (vs. made from one).
false
payload.entries[].connector.changed
boolean
Whether the connector was edited after this transformation was made from it, i.e. an update is available. Always false when the transformation is itself a connector.
true
payload.entries[].connector.connector_id
string
nullable
UUID of the connector (a connector is itself a transformation).
"38d1d06f-3f5c-443b-8396-d2fd2dba5719"
payload.entries[].connector.name
string
nullable
The connector's display name (e.g. "Sage").
"Sage"
payload.entries[].connector.picture_url
string
nullable
Public URL of the connector's logo thumbnail, if any.
"https:\/\/example.com\/connector.thumbnail.png"
payload.entries[].customer_id
string
nullable
UUID of the customer who owns this transformation (not the customer's external ID).
"082dddc1-8d63-4250-8c04-bff9ef973c51"
payload.entries[].source_id
string
UUID of the source this transformation reads. Pass it to the source feed endpoints
(/sender/source/{sourceId}).
"14c1e086-4de5-4c2c-88ee-c571f784d9fb"
payload.entries[].source_name
string
nullable
Display name of the source, usually its file name.
"my-employees.csv"
payload.entries[].source_file_url
string
nullable
Signed link to the current source file, valid 30 days, usable without authentication.
Null when no file was imported yet.
"https:\/\/api.wetransform.com\/download\/eyJ0eXAiOiJKV1QifQ.eyJwIjoic291cmNlIn0.c..."
(truncated)
payload.entries[].imported_at
datetime
When the current source file was imported. Null when no file was imported yet.
payload.entries[].template_name
string
Display name of the template.
"Employee Leaves (RE)"
payload.entries[].template_picture_url
string
nullable
Public URL of the template's picture thumbnail. Null when the template has no picture.
"https:\/\/api.wetransform.com\/icon.png"
payload.entries[].transformation_id
string
UUID of this transformation. Pass it as {transformationId} to the transformation, data,
run and submission endpoints.
"a2befb66-eae3-4167-b0bd-66a9d390b6dd"
payload.entries[].has_schedule
boolean
Whether the transformation's schedule is enabled. Pause or resume it with the source feed schedule endpoints; the timing itself is configured in the app.
true
payload.entries[].column_names
array
Template column names, each prefixed with t/ (e.g. t/price). Use them as attributes
and as data keys in the transformation data endpoints.
payload.entries[].custom_field_names
array
Custom field names, each prefixed with f/ (e.g. f/margin). They appear as data keys
in the transformation data endpoints.
payload.entries[].deleted_at
datetime
nullable
When the transformation was moved to the trash. Null unless it is in the trash; it is erased permanently one month after this date.
payload.entries[].download_url
string
nullable
Link to the latest transformed file. Null until the transformation has been submitted at least once. When the template exposes files, this is a permanent link that always serves the latest submitted file; otherwise it is a signed link to the latest submission's file, valid 30 days.
"https:\/\/api.wetransform.com\/file\/unamhj7ewon4c2izf3efojacmjbkvrw6\/furniture.csv"
payload.entries[].template_handle
string
Handle of the template this transformation produces, as used in /template/{templateHandle}
and in the template_handles filter.
"furniture"
product
object
nullable
A product needed.
Not null if user requires to buy a specific product (permission or limitation) in order to access a feature.
product.requirement
string
nullable
Whether the user requested a features s/he doesn't have access to,
or the user needs greater limits.
Possible values: permission, limitation
"permission"
product.permission
object
nullable
The required permission.
You will need to know which permission is needed in order to fill up search filters in the shop.
product.permission.description
string
nullable
A human-understandable name for the permission.
product.permission.name
string
A technical permission name (ex: ORGANISATION_UPDATE_SETTINGS).
Possible values depend on the context, check the domain's metadata endpoint.
"X_SOURCE_FORMAT_XML"
product.limitation_type
string
nullable
The limitation that needs to be increased (ex: number of columns).
product.limitation_needed_value
integer
nullable
The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).
product.limitation_current_value
integer
nullable
The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).
product.limitation_object
object
nullable
The limitation type in a readable format, for example, "lines per file".
product.ai_feature
string
nullable
The AI feature that could not run, when an AI feature is what hit the limitation
(null for any other product).
Possible values: rule_transformation, rule_template, rule_function, rule_constraint, column_constraints, normalizer, chat_db, doc_assistant, api_doc_assistant, autocorrect, autocorrect_fill, invoice_reader, column_match, value_match, power_populate_with_ai, power_extract_from_pdf, power_extract_from_spreadsheet, agent, column_enrichment, column_constraints_batch, agent_compression, agent_workflow_scaffold, agent_phase_fill, push_json_column_match, value_match_embedding, normalizer_debugger, power_extract_from_text, template_format_custom, power_describe_image, power_background_erase, hosted_image_view, value_match_context
product.message
object
nullable
What stopped, on what, and what it would take — translated and ready to display,
with one wording per AI feature: "Matching the values of column «Couleur» with AI
needs 12 AI credits, and 10 are left."
Null whenever ai_feature is, and on the rare AI exposure that has no subject to
name (the template collection's json_column_match_product covers no single
template). Fall back to the generic call-to-action then.
product.is_cta
boolean
nullable
Whether a Call To Action should be displayed.
It may not be displayed if:
- the limitation is on the membership role
- the limitation is on the customer role
- the user is a sender
debug
array
Debug information.
Contains logs about business logic explaining state of the response payload.
Provided in development & admin modes only.
* are nullable.
{
"success": true,
"payload": {
"total_pages": 5,
"current_page": 5,
"total_items": 103,
"items_per_page": 25,
"entries": [
{
"connector": {
"is_connector": false,
"changed": true,
"connector_id": "38d1d06f-3f5c-443b-8396-d2fd2dba5719",
"name": "Sage",
"picture_url": "https:\/\/example.com\/connector.thumbnail.png"
},
"customer_id": "082dddc1-8d63-4250-8c04-bff9ef973c51",
"source_id": "14c1e086-4de5-4c2c-88ee-c571f784d9fb",
"source_name": "my-employees.csv",
"source_file_url": "https:\/\/api.wetransform.com\/download\/eyJ0eXAiOiJKV1QifQ.eyJwIjoic291cmNlIn0.c2lnbmF0dXJl",
"imported_at": "2026-10-26T09:59:22+00:00",
"template_name": "Employee Leaves (RE)",
"template_picture_url": "https:\/\/api.wetransform.com\/icon.png",
"transformation_id": "a2befb66-eae3-4167-b0bd-66a9d390b6dd",
"has_schedule": true,
"column_names": [
"t\/name",
"t\/price"
],
"custom_field_names": [
"f\/margin"
],
"deleted_at": null,
"download_url": "https:\/\/api.wetransform.com\/file\/unamhj7ewon4c2izf3efojacmjbkvrw6\/furniture.csv",
"template_handle": "furniture"
},
{
"connector": {
"is_connector": false,
"changed": true,
"connector_id": "10ed5031-1d62-4efd-9faa-1e1a4389251b",
"name": "Sage",
"picture_url": "https:\/\/example.com\/connector.thumbnail.png"
},
"customer_id": "0ac19f02-bdd2-4f6c-b999-636d38c172e7",
"source_id": "0b44547d-375a-4af8-9f9d-0560f5666a9a",
"source_name": "my-employees.csv",
"source_file_url": "https:\/\/api.wetransform.com\/download\/eyJ0eXAiOiJKV1QifQ.eyJwIjoic291cmNlIn0.c2lnbmF0dXJl",
"imported_at": "2026-10-26T09:59:22+00:00",
"template_name": "Employee Leaves (RE)",
"template_picture_url": "https:\/\/api.wetransform.com\/icon.png",
"transformation_id": "d3e4dd1f-eb77-4369-abab-0b9c5260588d",
"has_schedule": true,
"column_names": [
"t\/name",
"t\/price"
],
"custom_field_names": [
"f\/margin"
],
"deleted_at": null,
"download_url": "https:\/\/api.wetransform.com\/file\/zysp4gptjbn3idvrnswmj9r1lk6jfpcv\/furniture.csv",
"template_handle": "furniture"
},
{
"connector": {
"is_connector": false,
"changed": true,
"connector_id": "c9f1af01-b34e-4c1a-ab09-76826d57fe50",
"name": "Sage",
"picture_url": "https:\/\/example.com\/connector.thumbnail.png"
},
"customer_id": "d4692451-8719-46bf-a2de-5c31fbafb27a",
"source_id": "81dbca8a-a48e-4987-8467-77dec80fdd72",
"source_name": "my-employees.csv",
"source_file_url": "https:\/\/api.wetransform.com\/download\/eyJ0eXAiOiJKV1QifQ.eyJwIjoic291cmNlIn0.c2lnbmF0dXJl",
"imported_at": "2026-10-26T09:59:22+00:00",
"template_name": "Employee Leaves (RE)",
"template_picture_url": "https:\/\/api.wetransform.com\/icon.png",
"transformation_id": "7a70c047-63b0-4cf0-a284-47bb3b6cf683",
"has_schedule": true,
"column_names": [
"t\/name",
"t\/price"
],
"custom_field_names": [
"f\/margin"
],
"deleted_at": null,
"download_url": "https:\/\/api.wetransform.com\/file\/48sdzc33o3qzryzpvqftiy3nmkhj8bar\/furniture.csv",
"template_handle": "furniture"
}
]
},
"product": {
"requirement": "permission",
"permission": {
"name": "X_SOURCE_FORMAT_XML",
"description": "Can import XML files"
},
"limitation_type": null,
"limitation_needed_value": null,
"limitation_current_value": null,
"limitation_object": null,
"is_cta": false,
"ai_feature": null,
"message": null
},
"debug": []
}
Copy
The client sent an unexpected request.
It happens if the client sent an invalid JSON payload, or if the JSON payload cannot be mapped to the expected request object.
success
boolean
Always false on error responses.
false
payload
object
Context about the error, if any.
product
object
nullable
A product needed.
Not null if user requires to buy a specific product (permission or limitation) in order to access a feature.
product.requirement
string
nullable
Whether the user requested a features s/he doesn't have access to,
or the user needs greater limits.
Possible values: permission, limitation
"permission"
product.permission
object
nullable
The required permission.
You will need to know which permission is needed in order to fill up search filters in the shop.
product.permission.description
string
nullable
A human-understandable name for the permission.
product.permission.name
string
A technical permission name (ex: ORGANISATION_UPDATE_SETTINGS).
Possible values depend on the context, check the domain's metadata endpoint.
"X_SOURCE_FORMAT_XML"
product.limitation_type
string
nullable
The limitation that needs to be increased (ex: number of columns).
product.limitation_needed_value
integer
nullable
The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).
product.limitation_current_value
integer
nullable
The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).
product.limitation_object
object
nullable
The limitation type in a readable format, for example, "lines per file".
product.ai_feature
string
nullable
The AI feature that could not run, when an AI feature is what hit the limitation
(null for any other product).
Possible values: rule_transformation, rule_template, rule_function, rule_constraint, column_constraints, normalizer, chat_db, doc_assistant, api_doc_assistant, autocorrect, autocorrect_fill, invoice_reader, column_match, value_match, power_populate_with_ai, power_extract_from_pdf, power_extract_from_spreadsheet, agent, column_enrichment, column_constraints_batch, agent_compression, agent_workflow_scaffold, agent_phase_fill, push_json_column_match, value_match_embedding, normalizer_debugger, power_extract_from_text, template_format_custom, power_describe_image, power_background_erase, hosted_image_view, value_match_context
product.message
object
nullable
What stopped, on what, and what it would take — translated and ready to display,
with one wording per AI feature: "Matching the values of column «Couleur» with AI
needs 12 AI credits, and 10 are left."
Null whenever ai_feature is, and on the rare AI exposure that has no subject to
name (the template collection's json_column_match_product covers no single
template). Fall back to the generic call-to-action then.
product.is_cta
boolean
nullable
Whether a Call To Action should be displayed.
It may not be displayed if:
- the limitation is on the membership role
- the limitation is on the customer role
- the user is a sender
debug
array
Debug information.
Contains logs about business logic explaining state of the response payload.
Provided in development & admin modes only.
* are nullable.
{
"success": false,
"payload": [],
"product": {
"requirement": "permission",
"permission": {
"name": "X_SOURCE_FORMAT_XML",
"description": "Can import XML files"
},
"limitation_type": null,
"limitation_needed_value": null,
"limitation_current_value": null,
"limitation_object": null,
"is_cta": false,
"ai_feature": null,
"message": null
},
"debug": []
}
Copy
User is well authenticated, but not authorized to access the resource.
It can happen if user is trying to use a feature that s/he didn't pay for, access someone else's resource, etc.
These issues are normally fixed by the frontend, which should render features and resources user has access to.
success
boolean
Always false on error responses.
false
payload
object
Context about the error, if any.
product
object
nullable
A product needed.
Not null if user requires to buy a specific product (permission or limitation) in order to access a feature.
product.requirement
string
nullable
Whether the user requested a features s/he doesn't have access to,
or the user needs greater limits.
Possible values: permission, limitation
"permission"
product.permission
object
nullable
The required permission.
You will need to know which permission is needed in order to fill up search filters in the shop.
product.permission.description
string
nullable
A human-understandable name for the permission.
product.permission.name
string
A technical permission name (ex: ORGANISATION_UPDATE_SETTINGS).
Possible values depend on the context, check the domain's metadata endpoint.
"X_SOURCE_FORMAT_XML"
product.limitation_type
string
nullable
The limitation that needs to be increased (ex: number of columns).
product.limitation_needed_value
integer
nullable
The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).
product.limitation_current_value
integer
nullable
The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).
product.limitation_object
object
nullable
The limitation type in a readable format, for example, "lines per file".
product.ai_feature
string
nullable
The AI feature that could not run, when an AI feature is what hit the limitation
(null for any other product).
Possible values: rule_transformation, rule_template, rule_function, rule_constraint, column_constraints, normalizer, chat_db, doc_assistant, api_doc_assistant, autocorrect, autocorrect_fill, invoice_reader, column_match, value_match, power_populate_with_ai, power_extract_from_pdf, power_extract_from_spreadsheet, agent, column_enrichment, column_constraints_batch, agent_compression, agent_workflow_scaffold, agent_phase_fill, push_json_column_match, value_match_embedding, normalizer_debugger, power_extract_from_text, template_format_custom, power_describe_image, power_background_erase, hosted_image_view, value_match_context
product.message
object
nullable
What stopped, on what, and what it would take — translated and ready to display,
with one wording per AI feature: "Matching the values of column «Couleur» with AI
needs 12 AI credits, and 10 are left."
Null whenever ai_feature is, and on the rare AI exposure that has no subject to
name (the template collection's json_column_match_product covers no single
template). Fall back to the generic call-to-action then.
product.is_cta
boolean
nullable
Whether a Call To Action should be displayed.
It may not be displayed if:
- the limitation is on the membership role
- the limitation is on the customer role
- the user is a sender
debug
array
Debug information.
Contains logs about business logic explaining state of the response payload.
Provided in development & admin modes only.
* are nullable.
{
"success": false,
"payload": [],
"product": {
"requirement": "permission",
"permission": {
"name": "X_SOURCE_FORMAT_XML",
"description": "Can import XML files"
},
"limitation_type": null,
"limitation_needed_value": null,
"limitation_current_value": null,
"limitation_object": null,
"is_cta": false,
"ai_feature": null,
"message": null
},
"debug": []
}
Copy
A violation happens when a property value does not respect the expected constraints.
If a user is making a mistake in a form and frontend is not able to detect it (because of the constraint being tied to some business logic for example), the API will return the invalid properties with the right error messages.
Note: examples are hardcoded in english (no access to the translator in a DTO).
success
boolean
Always false on error responses.
false
payload
object
Context about the error, if any.
payload.error
object
Generic message saying the request contains invalid values, translated in the
request locale. The details are in violations.
payload.error.code
string
A translation key for the given message.
"exception.violation"
payload.error.message
string
object
The translated version of the message.
Click on "Example" to get its translated value.
payload.violations
array
One entry per invalid value: the property path (e.g. format.csv.delimiter) and
the reason. Several entries can target the same property.
payload.violations[].property_path
string
Property having an invalid value.
"title"
payload.violations[].invalid_value
nullable
The invalid value.
""
payload.violations[].message
string
An error message describing the violation.
"This value should not be blank"
product
object
nullable
A product needed.
Not null if user requires to buy a specific product (permission or limitation) in order to access a feature.
product.requirement
string
nullable
Whether the user requested a features s/he doesn't have access to,
or the user needs greater limits.
Possible values: permission, limitation
"permission"
product.permission
object
nullable
The required permission.
You will need to know which permission is needed in order to fill up search filters in the shop.
product.permission.description
string
nullable
A human-understandable name for the permission.
product.permission.name
string
A technical permission name (ex: ORGANISATION_UPDATE_SETTINGS).
Possible values depend on the context, check the domain's metadata endpoint.
"X_SOURCE_FORMAT_XML"
product.limitation_type
string
nullable
The limitation that needs to be increased (ex: number of columns).
product.limitation_needed_value
integer
nullable
The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).
product.limitation_current_value
integer
nullable
The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).
product.limitation_object
object
nullable
The limitation type in a readable format, for example, "lines per file".
product.ai_feature
string
nullable
The AI feature that could not run, when an AI feature is what hit the limitation
(null for any other product).
Possible values: rule_transformation, rule_template, rule_function, rule_constraint, column_constraints, normalizer, chat_db, doc_assistant, api_doc_assistant, autocorrect, autocorrect_fill, invoice_reader, column_match, value_match, power_populate_with_ai, power_extract_from_pdf, power_extract_from_spreadsheet, agent, column_enrichment, column_constraints_batch, agent_compression, agent_workflow_scaffold, agent_phase_fill, push_json_column_match, value_match_embedding, normalizer_debugger, power_extract_from_text, template_format_custom, power_describe_image, power_background_erase, hosted_image_view, value_match_context
product.message
object
nullable
What stopped, on what, and what it would take — translated and ready to display,
with one wording per AI feature: "Matching the values of column «Couleur» with AI
needs 12 AI credits, and 10 are left."
Null whenever ai_feature is, and on the rare AI exposure that has no subject to
name (the template collection's json_column_match_product covers no single
template). Fall back to the generic call-to-action then.
product.is_cta
boolean
nullable
Whether a Call To Action should be displayed.
It may not be displayed if:
- the limitation is on the membership role
- the limitation is on the customer role
- the user is a sender
debug
array
Debug information.
Contains logs about business logic explaining state of the response payload.
Provided in development & admin modes only.
* are nullable.
{
"success": false,
"payload": {
"error": {
"code": "exception.violation",
"message": "The provided payload contains property violations."
},
"violations": [
{
"property_path": "title",
"invalid_value": "",
"message": "This value should not be blank"
},
{
"property_path": "price",
"invalid_value": -5,
"message": "The amount should be greater than 1"
}
]
},
"product": {
"requirement": "permission",
"permission": {
"name": "X_SOURCE_FORMAT_XML",
"description": "Can import XML files"
},
"limitation_type": null,
"limitation_needed_value": null,
"limitation_current_value": null,
"limitation_object": null,
"is_cta": false,
"ai_feature": null,
"message": null
},
"debug": []
}
Copy