PUT https://api.wetransform.com/sender/source/{sourceId}
URL Parameters
Parameter Description Pattern
{sourceId}

The source UUID to update

[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}
Request Payload
Request
SourcePublicSourceUpdateRequest
name * string

The name of the source.

length
data_extractor * string

The selected data extractor.

Possible values: upload, url, ftp, sftp, custom, email, api_fetcher

Sample: "url"
enum value
url * object

Describes the URL data extractor.

valid
url.url string

The URL to which the request is sent.

Sample: "https:\/\/example.com"
not blank length url
url.method string

The HTTP method to use for the request.

Possible values: GET, POST, PUT, DELETE, PATCH

Sample: "GET"
not blank enum value
url.headers array

Headers to send along with the request.

Should be an array of hashes, where the key is the header name and the value is the header value.

{
   "headers": {
     "Authorization": "Bearer 1234567890"
   }
}

Can be useful if an Authorization header is required.

valid headers count
url.cookies array

Cookies to send along with the request.

Should be an array of hashes, where the key is the cookie name and the value is the cookie value.

 {
    "cookies": {
      "session_id": "0987654321"
    }
 }

Please note that cookies are stateless, we won't change their value based on the response.

valid cookies count
url.content_type * string

The content type of the body.

Possible values: application/json, application/xml, text/plain, application/x-www-form-urlencoded, multipart/form-data

Sample: "application\/json"
enum value
url.body * string

The body of the request, encoded in the right format.

Sample: "{\"foo\":\"bar\"}"
length
ftp * object

Describes the FTP data extractor.

valid
ftp.host string

The FTP host.

Sample: "ftp.example.com"
not blank length
ftp.port * integer

The FTP port.

Sample: 21
range
ftp.username string

The FTP username.

Sample: "username"
not blank length
ftp.password string

The FTP password.

Sample: "password"
not blank length
ftp.path string

The FTP path.

It can contain wildcards, we will take the first matching file.

Sample: "*.csv"
not blank length
ftp.is_ssl * boolean

Whether to use SSL or not.

Sample: false
sftp * object

Describes the SFTP data extractor.

valid
sftp.host string

The SFTP host to connect to.

Sample: "example.com"
not blank length
sftp.port integer

The SFTP port to connect to.

Sample: 22
not blank range
sftp.username string

The username to use for the SFTP connection.

Sample: "username"
not blank length
sftp.password * string

The password to use for the SFTP connection.

Sample: "password"
length
sftp.path string

The path to the file or directory to send.

The path can contain wildcards, e.g. /path/to/files/*.csv, we will take the first file that matches the pattern.

Sample: "\/path\/to\/files\/file.csv"
length
sftp.private_key * string

The key to use for the SFTP connection.

not blank
custom * object

Describes the custom data extractor.

valid
custom.custom_data_extractor_id * string

The custom data extractor's ID.

This or handle must be set.

Sample: "13ba0ac2-e6bb-4b07-8bd9-7a16e9017acc"
sequentially
custom.handle * string

The custom data extractor's handle.

This or customDataExtractorId must be set.

Sample: "my-export"
is granted
custom.metadata array

Metadata attached to the custom data extractor.

valid
custom.metadata[].name string
Sample: "date"
not blank length
custom.metadata[].value * string
Sample: "2023-01-01"
length
Properties suffixed with * are nullable.
{
    "name": null,
    "data_extractor": "url",
    "url": {
        "url": "https:\/\/example.com",
        "method": "GET",
        "headers": {
            "Authorization": "Bearer 1234567890"
        },
        "cookies": {
            "secret": "0987654321"
        },
        "content_type": "application\/json",
        "body": "{\"foo\":\"bar\"}"
    },
    "ftp": {
        "host": "ftp.example.com",
        "port": 21,
        "username": "username",
        "password": "password",
        "path": "*.csv",
        "is_ssl": false
    },
    "sftp": {
        "host": "example.com",
        "port": 22,
        "username": "username",
        "password": "password",
        "path": "\/path\/to\/files\/file.csv",
        "private_key": null
    },
    "custom": null
}
Copy
Responses
Response 200
ResponseSuccess SourcePublicSourceResponse
success boolean

Always true on successful responses.

Sample: true
payload object

Payload of the requested resource.

payload.source_id * string

The source ID.

payload.name * string

The name of the source.

payload.data_extractor * string

The selected data extractor.

Possible values: upload, url, ftp, sftp, custom, email, api_fetcher

Sample: "url"
payload.url * object

Describes the URL data extractor.

payload.url.url string

The URL to which the request is sent.

Sample: "https:\/\/example.com"
payload.url.method string

The HTTP method to use for the request.

Possible values: GET, POST, PUT, DELETE, PATCH

Sample: "GET"
payload.url.headers array

Headers to send along with the request.

Should be an array of hashes, where the key is the header name and the value is the header value.

{
   "headers": {
     "Authorization": "Bearer 1234567890"
   }
}

Can be useful if an Authorization header is required.

payload.url.cookies array

Cookies to send along with the request.

Should be an array of hashes, where the key is the cookie name and the value is the cookie value.

 {
    "cookies": {
      "session_id": "0987654321"
    }
 }

Please note that cookies are stateless, we won't change their value based on the response.

payload.url.content_type * string

The content type of the body.

Possible values: application/json, application/xml, text/plain, application/x-www-form-urlencoded, multipart/form-data

Sample: "application\/json"
payload.url.body * string

The body of the request, encoded in the right format.

Sample: "{\"foo\":\"bar\"}"
payload.ftp * object

Describes the FTP data extractor.

payload.ftp.host string

The FTP host.

Sample: "ftp.example.com"
payload.ftp.port * integer

The FTP port.

Sample: 21
payload.ftp.username string

The FTP username.

Sample: "username"
payload.ftp.password string

The FTP password.

Sample: "password"
payload.ftp.path string

The FTP path.

It can contain wildcards, we will take the first matching file.

Sample: "*.csv"
payload.ftp.is_ssl * boolean

Whether to use SSL or not.

Sample: false
payload.sftp * object

Describes the SFTP data extractor.

payload.sftp.host string

The SFTP host to connect to.

Sample: "example.com"
payload.sftp.port integer

The SFTP port to connect to.

Sample: 22
payload.sftp.username string

The username to use for the SFTP connection.

Sample: "username"
payload.sftp.password * string

The password to use for the SFTP connection.

Sample: "password"
payload.sftp.path string

The path to the file or directory to send.

The path can contain wildcards, e.g. /path/to/files/*.csv, we will take the first file that matches the pattern.

Sample: "\/path\/to\/files\/file.csv"
payload.sftp.private_key * string

The key to use for the SFTP connection.

payload.custom * object

Describes the custom data extractor.

payload.custom.custom_data_extractor_id * string

The custom data extractor's ID.

This or handle must be set.

Sample: "c32fef5b-6ace-46fe-a987-0eb733fd0814"
payload.custom.handle * string

The custom data extractor's handle.

This or customDataExtractorId must be set.

Sample: "my-export"
payload.custom.metadata array

Metadata attached to the custom data extractor.

payload.custom.metadata[].name string
Sample: "date"
payload.custom.metadata[].value * string
Sample: "2023-01-01"
product * object

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

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

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

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

The limitation that needs to be increased (ex: number of columns).

product.limitation_needed_value * integer

The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).

product.limitation_current_value * integer

The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).

product.limitation_object * object

The limitation type in a readable format, for example, "lines per file".

product.is_cta * boolean

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
template_handle * string

Handle of the template currently in context, if any.

Many endpoints (and frontend components) require a template_handle. It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "new-hires"
source_id * string

UUID of the source currently in context, if any.

Many endpoints (and frontend components) require a source_id (the source UUID, not its database id). It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "9e7060d4-9314-4783-883a-8702471ccd39"
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": {
        "source_id": null,
        "name": null,
        "data_extractor": "url",
        "url": {
            "url": "https:\/\/example.com",
            "method": "GET",
            "headers": {
                "Authorization": "Bearer 1234567890"
            },
            "cookies": {
                "secret": "0987654321"
            },
            "content_type": "application\/json",
            "body": "{\"foo\":\"bar\"}"
        },
        "ftp": {
            "host": "ftp.example.com",
            "port": 21,
            "username": "username",
            "password": "password",
            "path": "*.csv",
            "is_ssl": false
        },
        "sftp": {
            "host": "example.com",
            "port": 22,
            "username": "username",
            "password": "password",
            "path": "\/path\/to\/files\/file.csv",
            "private_key": null
        },
        "custom": null
    },
    "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
    },
    "template_handle": "new-hires",
    "source_id": "9e7060d4-9314-4783-883a-8702471ccd39",
    "debug": []
}
Copy
Response 400 Bad request.
ResponseError HttpBadRequest

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.

Sample: false
payload object

Context about the error, if any.

product * object

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

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

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

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

The limitation that needs to be increased (ex: number of columns).

product.limitation_needed_value * integer

The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).

product.limitation_current_value * integer

The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).

product.limitation_object * object

The limitation type in a readable format, for example, "lines per file".

product.is_cta * boolean

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
template_handle * string

Handle of the template currently in context, if any.

Many endpoints (and frontend components) require a template_handle. It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "new-hires"
source_id * string

UUID of the source currently in context, if any.

Many endpoints (and frontend components) require a source_id (the source UUID, not its database id). It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "9e7060d4-9314-4783-883a-8702471ccd39"
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
    },
    "template_handle": "new-hires",
    "source_id": "9e7060d4-9314-4783-883a-8702471ccd39",
    "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

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

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

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

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

The limitation that needs to be increased (ex: number of columns).

product.limitation_needed_value * integer

The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).

product.limitation_current_value * integer

The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).

product.limitation_object * object

The limitation type in a readable format, for example, "lines per file".

product.is_cta * boolean

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
template_handle * string

Handle of the template currently in context, if any.

Many endpoints (and frontend components) require a template_handle. It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "new-hires"
source_id * string

UUID of the source currently in context, if any.

Many endpoints (and frontend components) require a source_id (the source UUID, not its database id). It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "9e7060d4-9314-4783-883a-8702471ccd39"
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
    },
    "template_handle": "new-hires",
    "source_id": "9e7060d4-9314-4783-883a-8702471ccd39",
    "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

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

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

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

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

The limitation that needs to be increased (ex: number of columns).

product.limitation_needed_value * integer

The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).

product.limitation_current_value * integer

The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).

product.limitation_object * object

The limitation type in a readable format, for example, "lines per file".

product.is_cta * boolean

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
template_handle * string

Handle of the template currently in context, if any.

Many endpoints (and frontend components) require a template_handle. It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "new-hires"
source_id * string

UUID of the source currently in context, if any.

Many endpoints (and frontend components) require a source_id (the source UUID, not its database id). It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "9e7060d4-9314-4783-883a-8702471ccd39"
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
    },
    "template_handle": "new-hires",
    "source_id": "9e7060d4-9314-4783-883a-8702471ccd39",
    "debug": []
}
Copy
Response 409 Payload contains invalid values.
ResponseError Violations Violation

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.

Sample: false
payload object

Context about the error, if any.

payload.error object
payload.error.code string

A translation key for the given message.

Sample: "exception.violation"
payload.error.message string

The translated version of the message.

Click on "Example" to get its translated value.

payload.violations array
payload.violations[].property_path string

Property having an invalid value.

Sample: "title"
payload.violations[].invalid_value *

The invalid value.

Sample: ""
payload.violations[].message string

An error message describing the violation.

Sample: "This value should not be blank"
product * object

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

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

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

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

The limitation that needs to be increased (ex: number of columns).

product.limitation_needed_value * integer

The needed resource quantity (if receiver uses 9 columns in a template, this value is 9).

product.limitation_current_value * integer

The current value of the limitation (if receiver is allowed to use 10 columns, this value is 10).

product.limitation_object * object

The limitation type in a readable format, for example, "lines per file".

product.is_cta * boolean

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
template_handle * string

Handle of the template currently in context, if any.

Many endpoints (and frontend components) require a template_handle. It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "new-hires"
source_id * string

UUID of the source currently in context, if any.

Many endpoints (and frontend components) require a source_id (the source UUID, not its database id). It is exposed here so consumers — most notably the AI agent — can reuse it instead of having to ask the user for it again.

Sample: "9e7060d4-9314-4783-883a-8702471ccd39"
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": {
        "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
    },
    "template_handle": "new-hires",
    "source_id": "9e7060d4-9314-4783-883a-8702471ccd39",
    "debug": []
}
Copy
Back to API Reference

Interactive Console

Please login in order to access the console.

© 2026