About this sample
- What this is A three-part REST API documentation set for Nexus MFT, a fictional managed file transfer platform. It covers the endpoint reference, authentication and security, and webhooks.
- Audience Developers and integration engineers who automate file transfers.
- Tools used Markdown, MkDocs Material, Microsoft Writing Style Guide.
- What it demonstrates Task-based API documentation: every endpoint has parameters, a request and a response, and security steps are written as procedures a developer can follow.
- Note Nexus MFT is a fictional product created for this sample. The structure reflects the kind of managed file transfer documentation I work on professionally.
API reference
Use the Nexus MFT REST API to manage file transfers programmatically. You can create, monitor and cancel transfers across your infrastructure.
Base URL
https://api.nexusmft.io/v1
Before you begin
To use the API, you need an API key with the appropriate permissions. For instructions on how to generate and manage API keys, see Authentication and security.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET |
/transfers |
List all file transfers |
POST |
/transfers |
Create a file transfer |
GET |
/transfers/{transfer_id} |
Get transfer details |
DELETE |
/transfers/{transfer_id} |
Cancel a transfer |
List all file transfers
GET /transfers
Returns a paginated list of file transfers for your account. You can filter results by status, date range and destination.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status |
string | Optional | Filter by transfer status. Accepted values: pending, in_progress, completed, failed. |
from_date |
string | Optional | ISO 8601 date. Returns transfers created on or after this date. |
to_date |
string | Optional | ISO 8601 date. Returns transfers created on or before this date. |
limit |
integer | Optional | Number of results per page. Default: 25. Maximum: 100. |
offset |
integer | Optional | Number of results to skip. Use this for pagination. |
Request example
curl -X GET "https://api.nexusmft.io/v1/transfers?status=completed&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"
Response 200
{
"data": [
{
"id": "txr_8a3b1c2d",
"file_name": "report_Q4_2025.csv",
"size_bytes": 2048576,
"status": "completed",
"source": "sftp://uploads.acme.com/outbox",
"destination": "s3://acme-archive/reports/",
"created_at": "2025-12-15T09:30:00Z",
"completed_at": "2025-12-15T09:30:12Z"
}
],
"pagination": {
"total": 142,
"limit": 10,
"offset": 0,
"has_more": true
}
}
Create a file transfer
POST /transfers
Creates a new file transfer job. The system queues the transfer immediately and processes it based on priority and server availability.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
source_uri |
string | Required | URI of the source file. Supported protocols: sftp://, ftps://, s3://, azure://. |
destination_uri |
string | Required | URI of the destination. You must pre-configure the endpoint in the Admin Console. |
priority |
string | Optional | Transfer priority. Accepted values: low, normal, high. Default: normal. |
notify_on_complete |
boolean | Optional | Set to true to receive a webhook notification when the transfer finishes. Default: false. |
metadata |
object | Optional | Custom key-value pairs. Maximum: 10 keys, 256 characters per value. |
Request example
curl -X POST "https://api.nexusmft.io/v1/transfers" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_uri": "sftp://uploads.acme.com/outbox/report.csv",
"destination_uri": "s3://acme-archive/reports/",
"priority": "high",
"notify_on_complete": true,
"metadata": {
"department": "finance",
"quarter": "Q4-2025"
}
}'
Response 201
{
"id": "txr_9f4e2d1a",
"status": "pending",
"source_uri": "sftp://uploads.acme.com/outbox/report.csv",
"destination_uri": "s3://acme-archive/reports/",
"priority": "high",
"created_at": "2025-12-15T14:22:00Z",
"estimated_start": "2025-12-15T14:22:05Z"
}
Get transfer details
GET /transfers/{transfer_id}
Returns detailed information about a specific file transfer, including progress, transfer speed and error details if the transfer failed.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
transfer_id |
string | Required | The unique identifier of the transfer. This is a path parameter. |
Request example
curl -X GET "https://api.nexusmft.io/v1/transfers/txr_8a3b1c2d" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200
{
"id": "txr_8a3b1c2d",
"file_name": "report_Q4_2025.csv",
"size_bytes": 2048576,
"transferred_bytes": 2048576,
"progress_pct": 100,
"status": "completed",
"speed_bps": 170714,
"source": "sftp://uploads.acme.com/outbox",
"destination": "s3://acme-archive/reports/",
"checksum_sha256": "a3f2c1...e8d9b4",
"created_at": "2025-12-15T09:30:00Z",
"completed_at": "2025-12-15T09:30:12Z",
"retry_count": 0,
"error": null
}
Cancel a transfer
DELETE /transfers/{transfer_id}
Cancels a transfer that has a status of pending or queued. You can't cancel transfers that are already in progress.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
transfer_id |
string | Required | The unique identifier of the transfer to cancel. This is a path parameter. |
Request example
curl -X DELETE "https://api.nexusmft.io/v1/transfers/txr_9f4e2d1a" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200
{
"id": "txr_9f4e2d1a",
"status": "cancelled",
"cancelled_at": "2025-12-15T14:23:00Z"
}
Error codes
When a request fails, the API returns an HTTP status code and a JSON error object. The following table lists the standard error codes.
| Code | Status | Description |
|---|---|---|
400 |
Bad Request | The request body is missing required fields or contains invalid values. |
401 |
Unauthorized | Your API key is missing, invalid or expired. |
403 |
Forbidden | Your API key doesn't have permission for this operation. |
404 |
Not Found | The specified resource doesn't exist. |
409 |
Conflict | The transfer can't be modified in its current state. |
429 |
Rate Limited | You've exceeded the request limit. Wait for the time specified in the Retry-After header. |
500 |
Internal Server Error | An unexpected error occurred. If this persists, contact support. |
Rate limits
The API enforces rate limits to ensure fair usage. You can make up to 100 requests per minute per API key. If you exceed this limit, the API returns a 429 status code with a Retry-After header that indicates how long to wait before you retry.
Rate limit headers
Every response includes the following headers:
X-RateLimit-Limit: maximum requests per minuteX-RateLimit-Remaining: requests remaining in the current windowX-RateLimit-Reset: Unix timestamp when the limit resets