File Server
Each environment can run a Celigo-hosted SFTP file server. Enabling it claims a permanent identifier that becomes part of every partner login (<username>@<identifier>) and exposes the shared endpoint and host-key fingerprints partners need to connect. Partner accounts are created under the server, each with its own password and a Celigo Storage folder that becomes the account's root, so files a partner uploads appear in that folder and files placed there are what the partner can download. The account's license must include the file server add-on (fileserver.enabled), and every call needs a full-access API token.
File server and account schemas
Returns the environment's SFTP file server: whether it is enabled, its permanent identifier, the shared endpoint and host-key fingerprints partners connect with, the loginFormat, and the effective limits. The server is a singleton resolved from the caller's token — there is no id in the URL. An entitled environment whose server was never enabled answers 404; an environment without the file server add-on gets the reduced object (entitled: false, endpoint, limits) with 200. Requires a full-access API token.
The file server, or the reduced object when the add-on is not licensed.
The environment's SFTP file server — one per environment, resolved from the
caller's token (no id in the URL). Partners connect to endpoint, verify the
server against hostKeyFingerprints, and log in as <username>@<identifier>
with a partner account's password. On an entitled environment where the server
has never been enabled, reads answer 404 rather than returning this object; an
environment without the file server add-on gets a reduced object carrying only
entitled: false, endpoint, and limits.
Identifier of the file server record. Absent on the reduced object returned to an environment without the add-on.
6ab1ef197cf630a06d774cf1When true, partners can connect and every enabled account can log in. Setting
it to false on PUT keeps the identifier and all accounts, refuses new
logins, and ends any session currently open; the same body sent again is a
no-op. Absent on the reduced object returned to an environment without the
add-on.
trueThe environment's name inside every partner login (<username>@<identifier>),
unique across the region. Chosen on the PUT that first enables the server,
lowercased on save, and permanent afterwards — a later PUT may echo it but a
different value is rejected with 422 FILESERVER_IDENTIFIER_IMMUTABLE.
Absent on the reduced object returned to an environment without the add-on.
acme-logisticsPattern: ^[a-z0-9](?:[a-z0-9-]{1,28}[a-z0-9])$Template for partner usernames on this server — the account's username, @, then the server identifier. Absent on the reduced object returned to an environment without the add-on.
<username>@acme-logisticsWhen true, the account's license includes the file server add-on
(fileserver.enabled) and the server can be enabled and managed. When false
the object is reduced to endpoint and limits, and every PUT and every
account write answers 403 FILESERVER_NOT_ENTITLED; existing accounts stay
readable.
trueUnauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED).
The environment is entitled but its server has never been enabled (FILESERVER_NOT_FOUND).
GET /v1/mft/fileserver HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"_id": "6ab1ef197cf630a06d774cf1",
"enabled": true,
"identifier": "acme-logistics",
"endpoint": {
"hostname": "sftp.integrator.io",
"port": 22
},
"hostKeyFingerprints": [
{
"algorithm": "ssh-ed25519",
"fingerprint": "SHA256:iYC+28MNea2ebwWmUMdnJRx0StabV53gZBmr6pto9fs"
},
{
"algorithm": "rsa-sha2-512",
"fingerprint": "SHA256:0Qy3l7fJ2Zb1n8VtY4cH6uWkPq9rS2dE5gL7mN1oT3A"
}
],
"loginFormat": "<username>@acme-logistics",
"limits": {
"maxAccounts": 1000,
"maxConcurrentSessionsPerAccount": 20,
"maxFileSizeBytes": 10737418240
},
"entitled": true
}Enables the environment's file server — creating it, and claiming the permanent identifier, on the first call — or disables it. The body must carry enabled as a JSON boolean; anything else is refused rather than interpreted, because a disable ends every open partner session. Enabling also checks the environment's Celigo Storage entitlement (partner uploads land there) and returns the current storageUsage alongside the server. Disabling keeps the identifier and every account, refuses new logins, and ends open sessions; repeating a disable is a no-op. Sandbox environments cannot enable a server (403 FILESERVER_NOT_ENTITLED). Requires a full-access API token.
Body of PUT /v1/mft/fileserver. enabled must be an explicit boolean — an
absent or non-boolean value is rejected (422 FILESERVER_ENABLED_REQUIRED)
rather than read as a disable, because a disable ends every open partner
session.
When true, enables the server (creating it on the first call). When false, disables it: the identifier and all accounts are kept, new logins are refused, and open sessions end.
trueRequired on the PUT that first enables the server; permanent afterwards.
Lowercased on save and unique across the region (409
FILESERVER_IDENTIFIER_TAKEN when another environment holds it). On later
calls omit it or echo the current value — any other value answers 422
FILESERVER_IDENTIFIER_IMMUTABLE, even on a disable.
acme-logisticsPattern: ^[a-z0-9](?:[a-z0-9-]{1,28}[a-z0-9])$The server after the change. Includes storageUsage when the call enabled it.
The environment's SFTP file server — one per environment, resolved from the
caller's token (no id in the URL). Partners connect to endpoint, verify the
server against hostKeyFingerprints, and log in as <username>@<identifier>
with a partner account's password. On an entitled environment where the server
has never been enabled, reads answer 404 rather than returning this object; an
environment without the file server add-on gets a reduced object carrying only
entitled: false, endpoint, and limits.
Identifier of the file server record. Absent on the reduced object returned to an environment without the add-on.
6ab1ef197cf630a06d774cf1When true, partners can connect and every enabled account can log in. Setting
it to false on PUT keeps the identifier and all accounts, refuses new
logins, and ends any session currently open; the same body sent again is a
no-op. Absent on the reduced object returned to an environment without the
add-on.
trueThe environment's name inside every partner login (<username>@<identifier>),
unique across the region. Chosen on the PUT that first enables the server,
lowercased on save, and permanent afterwards — a later PUT may echo it but a
different value is rejected with 422 FILESERVER_IDENTIFIER_IMMUTABLE.
Absent on the reduced object returned to an environment without the add-on.
acme-logisticsPattern: ^[a-z0-9](?:[a-z0-9-]{1,28}[a-z0-9])$Template for partner usernames on this server — the account's username, @, then the server identifier. Absent on the reduced object returned to an environment without the add-on.
<username>@acme-logisticsWhen true, the account's license includes the file server add-on
(fileserver.enabled) and the server can be enabled and managed. When false
the object is reduced to endpoint and limits, and every PUT and every
account write answers 403 FILESERVER_NOT_ENTITLED; existing accounts stay
readable.
trueThe body is not a JSON object sent as application/json (FILESERVER_JSON_BODY_REQUIRED).
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED),
the account's license lacks the file server add-on or the environment is a
sandbox (FILESERVER_NOT_ENTITLED).
A disable was sent for an environment whose server was never enabled (FILESERVER_NOT_FOUND).
The identifier is already held by another environment in the region (FILESERVER_IDENTIFIER_TAKEN).
enabled is missing or not a boolean (FILESERVER_ENABLED_REQUIRED), the
first-enable identifier is missing or malformed (FILESERVER_IDENTIFIER_INVALID),
or the body names an identifier different from the server's permanent one
(FILESERVER_IDENTIFIER_IMMUTABLE).
Enabling requires a live check of the environment's Celigo Storage entitlement;
when that check cannot complete the enable is refused with
FILESERVER_STORAGE_UNAVAILABLE and nothing changes. Retry later.
PUT /v1/mft/fileserver HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 46
{
"enabled": true,
"identifier": "acme-logistics"
}{
"_id": "6ab1ef197cf630a06d774cf1",
"enabled": false,
"identifier": "acme-logistics",
"endpoint": {
"hostname": "sftp.integrator.io",
"port": 22
},
"hostKeyFingerprints": [
{
"algorithm": "ssh-ed25519",
"fingerprint": "SHA256:iYC+28MNea2ebwWmUMdnJRx0StabV53gZBmr6pto9fs"
}
],
"loginFormat": "<username>@acme-logistics",
"limits": {
"maxAccounts": 1000,
"maxConcurrentSessionsPerAccount": 20,
"maxFileSizeBytes": 10737418240
},
"entitled": true
}Returns the environment's partner accounts oldest first, wrapped in an accounts array, with overCap computed for each against the current limits.maxAccounts. Paging is cursor-based: when more accounts follow, the Link header carries a rel="next" URL whose after cursor (and pageSize) fetch the next page, and a page reached through after also offers rel="prev". Cursors are opaque — pass them back exactly as received; anything else answers 400 FILESERVER_INVALID_CURSOR. Accounts stay listable after the add-on is removed from the license; only writes are blocked then. Requires a full-access API token and a server that has been enabled at least once.
Accounts per page. Values outside the range are clamped rather than rejected.
100Example: 100Opaque cursor from the previous page's rel="next" link. Returns the accounts created after it.
Opaque cursor from a page's rel="prev" link. Returns the accounts created before it. Ignored when after is also sent.
One page of accounts.
The after or before cursor is not one this list issued (FILESERVER_INVALID_CURSOR).
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED), or the environment is a sandbox (FILESERVER_NOT_ENTITLED).
The environment's server has never been enabled (FILESERVER_NOT_ENABLED); a disabled server is still manageable.
GET /v1/mft/fileserver/accounts HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"accounts": [
{
"_id": "6ab1f2737cf630a06d774d09",
"username": "northwind-edi",
"login": "northwind-edi@acme-logistics",
"_homeFolderId": "6ab1f25daa3e7ed226ea3f25",
"homeFolderPath": "Partners/Northwind/Inbound",
"enabled": true,
"passwordSet": true,
"overCap": false,
"lastConnectedAt": "2026-09-22T14:35:31.646Z",
"createdAt": "2026-09-22T03:13:56.060Z",
"lastModified": "2026-09-22T14:35:31.648Z"
}
]
}Creates an enabled partner account with the given username, password, and Celigo Storage home folder, and returns it (the password is never returned). Checks run in order and the first failure is answered: username shape, password presence, home-folder presence, the enabled-account cap, then the folder is verified to be an active folder in this environment. Requires a full-access API token, the file server add-on on the license, and a server that has been enabled at least once.
Body of POST /v1/mft/fileserver/accounts. The account is created enabled, so
all three fields are needed for a partner to be able to log in. Checks run in
this order and the first failure is returned: username shape, password
presence, _homeFolderId presence, the enabled-account cap, then the folder's
existence and type in this environment.
Partner's name on this server; the SFTP login becomes <username>@<identifier>.
Lowercased on save. Unique per environment, including against disabled accounts
(409 FILESERVER_USERNAME_TAKEN).
northwind-ediPattern: ^[a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])$Partner's password. Needs upper- and lower-case letters, a digit, and a symbol;
anything weaker is rejected with 422 FILESERVER_WEAK_PASSWORD and the message
names the rule broken. Never returned by any route — rotate or clear it later
through POST /v1/mft/fileserver/accounts/{_id}/password.
Nw-Inbound-2026!xCeligo Storage folder that becomes the root of the partner's sessions. Must be
an active folder in this environment — create one with
POST /v1/storage/items first.
6ab1f25daa3e7ed226ea3f25The new account.
A partner login on the environment's file server. The partner authenticates as
login with the password set through POST /v1/mft/fileserver/accounts/{_id}/password
(never returned — passwordSet only says whether one exists) and sees the
Celigo Storage folder _homeFolderId as the root of the session. Disabling the
account, deleting it, changing its password, or moving its home folder ends any
session it has open.
Identifier of the account. Not derived from the username, so a rename keeps it.
6ab1f2737cf630a06d774d09Partner's name on this server, unique per environment even while the account
is disabled. Lowercased on save; a value outside the pattern is rejected with
422 FILESERVER_USERNAME_INVALID and a name another account already holds
with 409 FILESERVER_USERNAME_TAKEN.
northwind-ediPattern: ^[a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])$The exact SFTP username the partner types — username, @, then the server identifier.
northwind-edi@acme-logisticsCeligo Storage folder that is the root of every session for this account —
the partner can reach nothing outside it. Must be an active folder in the same
environment; otherwise the write answers 422 FILESERVER_HOME_FOLDER_NOT_FOUND
or FILESERVER_HOME_FOLDER_NOT_FOLDER. Moving an account to another folder
ends its open sessions.
6ab1f25daa3e7ed226ea3f25Breadcrumb path of _homeFolderId from the storage root, for display. Null
when the path could not be resolved for this response — the folder id is
still authoritative.
Partners/Northwind/InboundWhen true, the partner can log in. Disabling keeps the account and its password
but refuses logins and ends open sessions; re-enabling counts against
limits.maxAccounts and requires a password to be set (422
FILESERVER_LAST_CREDENTIAL otherwise). New accounts start enabled.
trueWhen true, the account has a password. The password itself is never returned by
any route; change or clear it through POST /v1/mft/fileserver/accounts/{_id}/password.
Clearing is allowed only while the account is disabled.
trueWhen true, this enabled account ranks above the environment's limits.maxAccounts
after the cap was lowered, so its logins are refused until enough other accounts
are disabled or deleted. Computed on every read; always false while the
environment is within its cap.
Timestamp of the partner's most recent successful login. Null until the first one.
2026-09-22T14:35:31.646ZTimestamp when the account was created.
2026-09-22T03:13:56.060ZTimestamp of the last change to the account, including logins updating lastConnectedAt.
2026-09-22T14:35:31.648ZThe body is not a JSON object sent as application/json (FILESERVER_JSON_BODY_REQUIRED).
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED);
the license lacks the add-on or the environment is a sandbox
(FILESERVER_NOT_ENTITLED); or the environment already holds
limits.maxAccounts enabled accounts (FILESERVER_MAX_ACCOUNTS_EXCEEDED).
Another account in this environment already has that username, enabled or not (FILESERVER_USERNAME_TAKEN).
The server has never been enabled (FILESERVER_NOT_ENABLED); username is
missing or malformed (FILESERVER_USERNAME_INVALID); password is missing
(FILESERVER_LAST_CREDENTIAL) or too weak (FILESERVER_WEAK_PASSWORD);
_homeFolderId is missing or does not exist in this environment
(FILESERVER_HOME_FOLDER_NOT_FOUND) or is a file rather than an active folder
(FILESERVER_HOME_FOLDER_NOT_FOLDER).
The home folder is verified against Celigo Storage at create time; when that
check cannot complete the create is refused with FILESERVER_STORAGE_UNAVAILABLE
and no account is made. Retry later.
POST /v1/mft/fileserver/accounts HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 102
{
"username": "northwind-edi",
"password": "Nw-Inbound-2026!x",
"_homeFolderId": "6ab1f25daa3e7ed226ea3f25"
}{
"_id": "6ab1f2737cf630a06d774d09",
"username": "northwind-edi",
"login": "northwind-edi@acme-logistics",
"_homeFolderId": "6ab1f25daa3e7ed226ea3f25",
"homeFolderPath": "Partners/Northwind/Inbound",
"enabled": true,
"passwordSet": true,
"overCap": false,
"lastConnectedAt": null,
"createdAt": "2026-09-22T03:13:56.060Z",
"lastModified": "2026-09-22T03:13:56.060Z"
}Returns one partner account with overCap computed against the current cap. An id that is unknown, belongs to another environment, or is not a valid identifier all answer the same 404. Requires a full-access API token and a server that has been enabled at least once.
The file server account. A malformed value answers 404 like an unknown one.
6ab1f2737cf630a06d774d09The account.
A partner login on the environment's file server. The partner authenticates as
login with the password set through POST /v1/mft/fileserver/accounts/{_id}/password
(never returned — passwordSet only says whether one exists) and sees the
Celigo Storage folder _homeFolderId as the root of the session. Disabling the
account, deleting it, changing its password, or moving its home folder ends any
session it has open.
Identifier of the account. Not derived from the username, so a rename keeps it.
6ab1f2737cf630a06d774d09Partner's name on this server, unique per environment even while the account
is disabled. Lowercased on save; a value outside the pattern is rejected with
422 FILESERVER_USERNAME_INVALID and a name another account already holds
with 409 FILESERVER_USERNAME_TAKEN.
northwind-ediPattern: ^[a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])$The exact SFTP username the partner types — username, @, then the server identifier.
northwind-edi@acme-logisticsCeligo Storage folder that is the root of every session for this account —
the partner can reach nothing outside it. Must be an active folder in the same
environment; otherwise the write answers 422 FILESERVER_HOME_FOLDER_NOT_FOUND
or FILESERVER_HOME_FOLDER_NOT_FOLDER. Moving an account to another folder
ends its open sessions.
6ab1f25daa3e7ed226ea3f25Breadcrumb path of _homeFolderId from the storage root, for display. Null
when the path could not be resolved for this response — the folder id is
still authoritative.
Partners/Northwind/InboundWhen true, the partner can log in. Disabling keeps the account and its password
but refuses logins and ends open sessions; re-enabling counts against
limits.maxAccounts and requires a password to be set (422
FILESERVER_LAST_CREDENTIAL otherwise). New accounts start enabled.
trueWhen true, the account has a password. The password itself is never returned by
any route; change or clear it through POST /v1/mft/fileserver/accounts/{_id}/password.
Clearing is allowed only while the account is disabled.
trueWhen true, this enabled account ranks above the environment's limits.maxAccounts
after the cap was lowered, so its logins are refused until enough other accounts
are disabled or deleted. Computed on every read; always false while the
environment is within its cap.
Timestamp of the partner's most recent successful login. Null until the first one.
2026-09-22T14:35:31.646ZTimestamp when the account was created.
2026-09-22T03:13:56.060ZTimestamp of the last change to the account, including logins updating lastConnectedAt.
2026-09-22T14:35:31.648ZUnauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED), or the license lacks the add-on / the environment is a sandbox (FILESERVER_NOT_ENTITLED).
No account with this id in the caller's environment, or the id is not a valid identifier (FILESERVER_ACCOUNT_NOT_FOUND).
The environment's server has never been enabled (FILESERVER_NOT_ENABLED); a disabled server is still manageable.
GET /v1/mft/fileserver/accounts/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"_id": "6ab1f2737cf630a06d774d09",
"username": "northwind-edi",
"login": "northwind-edi@acme-logistics",
"_homeFolderId": "6ab1f25daa3e7ed226ea3f25",
"homeFolderPath": "Partners/Northwind/Inbound",
"enabled": true,
"passwordSet": true,
"overCap": false,
"lastConnectedAt": "2026-09-22T14:35:31.646Z",
"createdAt": "2026-09-22T03:13:56.060Z",
"lastModified": "2026-09-22T14:35:31.648Z"
}Changes the fields sent and returns the account; fields left out keep their values, and {} returns the account unchanged. Renaming keeps _id and updates login. Moving the home folder is verified against Celigo Storage and ends the account's open sessions, as does disabling it. Re-enabling counts against limits.maxAccounts and requires a password to be set. The password cannot be changed here — use POST /v1/mft/fileserver/accounts/{_id}/password. Requires a full-access API token, the file server add-on on the license, and a server that has been enabled at least once.
The file server account. A malformed value answers 404 like an unknown one.
6ab1f2737cf630a06d774d09Body of PUT /v1/mft/fileserver/accounts/{_id}. Partial: only the fields sent
change, and an empty object is a no-op that returns the current account. The
password is not part of this body — use the dedicated password route.
New name for the partner; login changes with it and _id does not. Same shape and uniqueness rules as on create.
northwind-edi-2Pattern: ^[a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])$Move the account to another active folder in this environment. Ends the account's open sessions, which were rooted in the old folder.
6ab1f25daa3e7ed226ea3f25Must be a JSON boolean when present (422 FILESERVER_ENABLED_REQUIRED for
"false" or other non-booleans). False keeps the account but refuses logins
and ends open sessions. True re-enables it — subject to limits.maxAccounts
(403 FILESERVER_MAX_ACCOUNTS_EXCEEDED) and only if a password is set (422
FILESERVER_LAST_CREDENTIAL).
The account after the change.
A partner login on the environment's file server. The partner authenticates as
login with the password set through POST /v1/mft/fileserver/accounts/{_id}/password
(never returned — passwordSet only says whether one exists) and sees the
Celigo Storage folder _homeFolderId as the root of the session. Disabling the
account, deleting it, changing its password, or moving its home folder ends any
session it has open.
Identifier of the account. Not derived from the username, so a rename keeps it.
6ab1f2737cf630a06d774d09Partner's name on this server, unique per environment even while the account
is disabled. Lowercased on save; a value outside the pattern is rejected with
422 FILESERVER_USERNAME_INVALID and a name another account already holds
with 409 FILESERVER_USERNAME_TAKEN.
northwind-ediPattern: ^[a-z0-9](?:[a-z0-9-]{1,30}[a-z0-9])$The exact SFTP username the partner types — username, @, then the server identifier.
northwind-edi@acme-logisticsCeligo Storage folder that is the root of every session for this account —
the partner can reach nothing outside it. Must be an active folder in the same
environment; otherwise the write answers 422 FILESERVER_HOME_FOLDER_NOT_FOUND
or FILESERVER_HOME_FOLDER_NOT_FOLDER. Moving an account to another folder
ends its open sessions.
6ab1f25daa3e7ed226ea3f25Breadcrumb path of _homeFolderId from the storage root, for display. Null
when the path could not be resolved for this response — the folder id is
still authoritative.
Partners/Northwind/InboundWhen true, the partner can log in. Disabling keeps the account and its password
but refuses logins and ends open sessions; re-enabling counts against
limits.maxAccounts and requires a password to be set (422
FILESERVER_LAST_CREDENTIAL otherwise). New accounts start enabled.
trueWhen true, the account has a password. The password itself is never returned by
any route; change or clear it through POST /v1/mft/fileserver/accounts/{_id}/password.
Clearing is allowed only while the account is disabled.
trueWhen true, this enabled account ranks above the environment's limits.maxAccounts
after the cap was lowered, so its logins are refused until enough other accounts
are disabled or deleted. Computed on every read; always false while the
environment is within its cap.
Timestamp of the partner's most recent successful login. Null until the first one.
2026-09-22T14:35:31.646ZTimestamp when the account was created.
2026-09-22T03:13:56.060ZTimestamp of the last change to the account, including logins updating lastConnectedAt.
2026-09-22T14:35:31.648ZThe body is not a JSON object sent as application/json (FILESERVER_JSON_BODY_REQUIRED).
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED);
the license lacks the add-on or the environment is a sandbox
(FILESERVER_NOT_ENTITLED); or re-enabling would exceed limits.maxAccounts
(FILESERVER_MAX_ACCOUNTS_EXCEEDED).
No account with this id in the caller's environment, or the id is not a valid identifier (FILESERVER_ACCOUNT_NOT_FOUND).
The new username belongs to another account in this environment (FILESERVER_USERNAME_TAKEN).
The server has never been enabled (FILESERVER_NOT_ENABLED); username is
malformed (FILESERVER_USERNAME_INVALID); enabled is present but not a
boolean (FILESERVER_ENABLED_REQUIRED); re-enabling an account with no
password (FILESERVER_LAST_CREDENTIAL); or the new home folder does not exist
or is not an active folder (FILESERVER_HOME_FOLDER_NOT_FOUND,
FILESERVER_HOME_FOLDER_NOT_FOLDER).
The new home folder could not be verified against Celigo Storage (FILESERVER_STORAGE_UNAVAILABLE); nothing changed. Retry later.
PUT /v1/mft/fileserver/accounts/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 17
{
"enabled": false
}{
"_id": "6ab1f2737cf630a06d774d09",
"username": "northwind-edi",
"login": "northwind-edi@acme-logistics",
"_homeFolderId": "6ab1f25daa3e7ed226ea3f25",
"homeFolderPath": "Partners/Northwind/Inbound",
"enabled": false,
"passwordSet": true,
"overCap": false,
"lastConnectedAt": "2026-09-22T14:35:31.646Z",
"createdAt": "2026-09-22T03:13:56.060Z",
"lastModified": "2026-09-25T01:40:12.004Z"
}Permanently removes the account and ends any session it has open. The home folder and its files are untouched. There is no recycle bin for accounts — recreate one to restore access. Requires a full-access API token, the file server add-on on the license, and a server that has been enabled at least once.
The file server account. A malformed value answers 404 like an unknown one.
6ab1f2737cf630a06d774d09Account deleted.
No content
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED), or the license lacks the add-on / the environment is a sandbox (FILESERVER_NOT_ENTITLED).
No account with this id in the caller's environment, or the id is not a valid identifier (FILESERVER_ACCOUNT_NOT_FOUND).
The environment's server has never been enabled (FILESERVER_NOT_ENABLED); a disabled server is still manageable.
DELETE /v1/mft/fileserver/accounts/{_id} HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Sets a new password for the partner account, or clears it when password is null. Clearing is refused while the account is enabled, because an enabled account must keep a credential — disable it first. Either change ends the account's open sessions and stamps the change for session revalidation. The route answers 204 and never echoes a credential; passwordSet on the account reflects the result. Requires a full-access API token, the file server add-on on the license, and a server that has been enabled at least once.
The file server account. A malformed value answers 404 like an unknown one.
6ab1f2737cf630a06d774d09Body of POST /v1/mft/fileserver/accounts/{_id}/password. Sets a new password or,
with null, clears the current one. Either change ends the account's open
sessions. Nothing is echoed back — the route answers 204.
The new password, meeting the same policy as on create (422
FILESERVER_WEAK_PASSWORD otherwise), or null to remove the password —
allowed only while the account is disabled, because an enabled account must
keep a credential (422 FILESERVER_LAST_CREDENTIAL). Any other type answers
422 FILESERVER_WEAK_PASSWORD with the message "Password must be a string (or
null to clear)."
Nw-Inbound-2026!yPassword set or cleared. No body.
No content
The body is not a JSON object sent as application/json (FILESERVER_JSON_BODY_REQUIRED).
Unauthorized. The request lacks a valid bearer token, or the provided token failed to authenticate.
Note: the 401 response is produced by the auth middleware before the
request reaches the endpoint handler, so it does not follow the
standard {errors: [...]} envelope. Instead the body is a bare
{message: string} object with no code, no errors array. Callers
handling 401s should key off the HTTP status and the message string,
not try to destructure an errors[].
The token is not a full-access API token (FILESERVER_FULL_ACCESS_TOKEN_REQUIRED), or the license lacks the add-on / the environment is a sandbox (FILESERVER_NOT_ENTITLED).
No account with this id in the caller's environment, or the id is not a valid identifier (FILESERVER_ACCOUNT_NOT_FOUND).
The server has never been enabled (FILESERVER_NOT_ENABLED); the new password
breaks the policy or password is neither a string nor null
(FILESERVER_WEAK_PASSWORD — the message names the rule); or null was sent
for an enabled account (FILESERVER_LAST_CREDENTIAL).
POST /v1/mft/fileserver/accounts/{_id}/password HTTP/1.1
Host: api.integrator.io
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 32
{
"password": "Nw-Inbound-2026!y"
}No content
Last updated
Was this helpful?