Uploads a CSV file (multipart field file, at most 500 KiB) describing columns, one per row. The import runs in the background: poll GET /bulk-import/{importId}/status.

  • replace: the template ends up with exactly the columns of the file; columns missing from it are deleted.
  • merge: columns are matched by name; existing ones are updated, new ones are added, and the others are kept.

Columns beyond your plan's column limit are skipped and reported as violations. A file where no row is valid fails without changing anything.

One import runs at a time per template and kind: while one is still running, it is returned unchanged and this file is ignored.

POST https://api.wetransform.com/bulk-import/columns/{templateHandle}/{method}
URL Parameters
Parameter Description Pattern
{method}

replace: delete the columns missing from the file; merge: add or update columns, keep the others.

replace|merge
{templateHandle}

The template handle, e.g. employees, unique within your organisation.

File Upload
BulkImportPublicBulkImportUpload

File uploads must use the regular HTTP multipart/form-data body encoding.

Field name Description Constraints
file

The CSV file (text/csv or text/plain, at most 500 KiB), sent as the multipart field file.

Not Blank
File
binaryFormat "true"
mimeTypes "[\n \"text\\\/plain\",\n \"text\\\/csv\"\n]"
maxSize "512000"
Responses
Response 200
ResponseSuccess BulkImportPublicBulkImportResponse
success boolean

Always true on successful responses.

Sample: true
payload object

Payload of the requested resource.

payload.import_id string nullable

UUID to poll with GET /bulk-import/{importId}/status. Reused by later imports of the same kind into the same template.

Sample: "cb171a75-0268-40d5-9147-c7118ccb161b"
payload.type string nullable

What is imported: column or value_list for these endpoints.

Possible values: column, value_list, customer

Sample: "column"
payload.method string nullable

The strategy of the import: replace removes what the file does not contain, merge keeps it.

Possible values: replace, merge

Sample: "replace"
payload.status string nullable

pending or processing: running; completed: done (see number_of_violations); failed: see error.

Possible values: idle, pending, processing, completed, failed

Sample: "processing"
payload.progress integer nullable

Progress, from 0 to 100.

Sample: 50
payload.source_url string nullable

URL of the imported CSV file.

Sample: "https:\/\/example.com\/temp\/import.123451234512.csv"
payload.report_url string nullable

URL of a CSV file listing each rejected row and why, when the file had violations.

Sample: "https:\/\/example.com\/temp\/report.123451234512.csv"
payload.number_of_valid_rows integer nullable

Number of rows of the file that passed validation and were applied.

Sample: 123
payload.number_of_violations integer nullable

Number of violations found in the file (rows rejected, or skipped because of your plan's column limit).

Sample: 1
payload.error string nullable

Why the import failed, e.g. when no row of the file is valid.

payload.template_handle string nullable

Handle of the template the import targets.

Sample: "my-template"
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

Sample: "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.

Sample: "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.

Properties suffixed with * are nullable.
{
    "success": true,
    "payload": {
        "import_id": "cb171a75-0268-40d5-9147-c7118ccb161b",
        "type": "column",
        "method": "replace",
        "status": "processing",
        "progress": 50,
        "source_url": "https:\/\/example.com\/temp\/import.123451234512.csv",
        "report_url": "https:\/\/example.com\/temp\/report.123451234512.csv",
        "number_of_valid_rows": 123,
        "number_of_violations": 1,
        "error": null,
        "template_handle": "my-template"
    },
    "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
Response 404 Unknown template handle.
ResponseError HttpNotFound
success boolean

Always false on error responses.

Sample: 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

Sample: "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.

Sample: "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.

Properties suffixed with * 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
Response 401 Authentication required.
ResponseError HttpUnauthorized

User must be authenticated to access the resource.

This response is received when the authorization header does not contain a valid authentication token.

It mostly happens because the current access_token has expired, and it needs to be renewed using a refresh_token.

success boolean

Always false on error responses.

Sample: 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

Sample: "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.

Sample: "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.

Properties suffixed with * 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
Response 403 Access denied.
ResponseError HttpForbidden

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.

Sample: 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

Sample: "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.

Sample: "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.

Properties suffixed with * 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
Back to API Reference

Interactive Console

Please login in order to access the console.

© 2026