APIAWS

Create a Simple FTP Service via the API

A worked example of PUT /service/sfs - create an S3-backed service with its first user in one call.
Updated August 27, 2026

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_typeBackendCredential fields
aws/s3Amazon S3aws_access_key_id, aws_secret_access_key
compat/s3S3-compatibles3_compat_access_key_id, s3_compat_key_secret, s3_compat_endpoint_url, s3_compat_region
azure/blobAzure Blobazure_storage_account, azure_storage_access_key, azure_storage_container
azure/fileAzure Filesazure_storage_account, azure_storage_access_key, azure_storage_share
azure/datalakeAzure Data Lake Gen2azure_storage_account, azure_storage_access_key, azure_storage_container
google/gcsGoogle Cloud Storagegoogle_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 buckets
  • user - create the first user in the same call (optional; you can also add users later with PUT /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.