Create a Simple FTP Service via the API
With a Developer API key you can create a
Simple FTP Service in one request: PUT /service/sfs.
Example: an S3-backed service with a first user
export KEY=your-api-key
curl -X PUT "https://developer-us-east-1.docevent.io/service/sfs" \
-H "x-api-key: $KEY" \
-H "content-type: application/json" \
-d '{
"config": {
"storage_type": "aws/s3",
"name": "TestAPI",
"description": "Created via the Developer API",
"bucket": "my-ftp-bucket",
"aws_access_key_id": "AKIA...",
"aws_secret_access_key": "...",
"user": {
"username": "user-account",
"password": "a-strong-password",
"home": "/"
}
}
}'
The response echoes the created service - note the uuid, which is the
service ID your users log in with (<uuid>/<username>) and the object ID for
every other API call:
{
"uuid": "0gd6oh17",
"created": "2026-08-27T01:07:56Z",
"config": {
"storage_type": "aws/s3",
"bucket": "my-ftp-bucket",
"name": "TestAPI",
"description": "Created via the Developer API",
"enable_cloud": true,
"enable_self_hosted": true,
"enable_ftp": true
}
}
Secrets you send (aws_secret_access_key and friends) are encrypted at rest
and never returned by any API response.
Which fields are required?
It depends on storage_type - each backend has its own credential fields:
storage_type | Backend | Credential fields |
|---|---|---|
aws/s3 | Amazon S3 | aws_access_key_id, aws_secret_access_key |
compat/s3 | S3-compatible | s3_compat_access_key_id, s3_compat_key_secret, s3_compat_endpoint_url, s3_compat_region |
azure/blob | Azure Blob | azure_storage_account, azure_storage_access_key, azure_storage_container |
azure/file | Azure Files | azure_storage_account, azure_storage_access_key, azure_storage_share |
azure/datalake | Azure Data Lake Gen2 | azure_storage_account, azure_storage_access_key, azure_storage_container |
google/gcs | Google Cloud Storage | google_service_account (the service-account JSON) |
name and description are required for every backend; bucket names the
bucket/container where applicable. The interactive API reference
(console Account → API) documents every field with its schema - missing
required fields come back as a config.<field> not provided error.
Useful optional fields:
uuid- choose your own service ID (0-8 lowercase alphanumerics; paid plans only, auto-generated when omitted)test_path- where Verify Access probes, for path-restricted bucketsuser- create the first user in the same call (optional; you can also add users later withPUT /service/sfs/object/{uuid}/user)
After creation
Manage the service with the rest of the API - users, aliases,
firewall rules, logs and deletion are
all under /service/sfs/object/{uuid}/...; see the interactive reference
for the complete list.