Signed URLs and access
Public assets are served straight from the delivery host with no authentication. Private assets are different: they only open through a signed URL, a link that carries its own time-limited authorization. This page covers signed URLs and, for bulk imports, scheduled SFTP sync.
Signed URLs
A signed URL lets you hand a private file to someone who isn't signed in, an email recipient, a partner system, a webhook target, without making the file public. The link works until it expires, then stops.
Mint one with a POST to the asset's sign endpoint. Set how long the link should live with ttl_seconds (up to 604800, seven days; the default is one hour).
curl -X POST https://api.revenexx.com/v1/storage/assets/<ASSET_ID>/sign \
-H "X-Revenexx-Api-Key: <API_KEY>" \
-H "X-Revenexx-Tenant: <TENANT_SLUG>" \
-H "Content-Type: application/json" \
-d '{ "ttl_seconds": 3600 }'
The response is a ready-to-use delivery URL with an expiry and signature attached, plus the seconds until it expires:
{
"url": "https://storage.revenexx.com/<TENANT_SLUG>/private/contract.pdf?expires=1750680000&signature=...",
"expires_in": 3600
}
Hand that URL to whoever needs the file. After the expiry time, the link returns a 403 and the file is no longer reachable through it. Mint a fresh URL whenever you need renewed access.
Public vs. private
A public asset needs no signing, link to it directly. Only private assets require a signed URL. Set an asset's visibility at upload or change it later with a metadata update.
SFTP sync
For large or recurring imports, signing and uploading file by file is the wrong tool. Instead, configure a sync rule that pulls files from your own SFTP storage into a Storage folder on a schedule. revenexx fetches the files and creates assets for you; you never wire up an upload pipeline.
A sync rule describes where to pull from, where to put the files, and how often:
curl -X POST https://api.revenexx.com/v1/storage/sftp/rules \
-H "X-Revenexx-Api-Key: <API_KEY>" \
-H "X-Revenexx-Tenant: <TENANT_SLUG>" \
-H "Content-Type: application/json" \
-d '{
"sftp_account_id": "<ACCOUNT_ID>",
"source_path": "/exports/images",
"target_folder_id": "<FOLDER_ID>",
"schedule": "*/5 * * * *",
"enabled": true
}'
| Field | Description |
|---|---|
sftp_account_id | The SFTP source to pull from. |
source_path | The directory on the source to sync. |
target_folder_id | The Storage folder that receives the files. |
schedule | A cron expression. Defaults to every five minutes. |
enabled | Whether the rule runs. |
List your rules, inspect a single rule, and review past runs:
# all rules
curl https://api.revenexx.com/v1/storage/sftp/rules \
-H "X-Revenexx-Api-Key: <API_KEY>" \
-H "X-Revenexx-Tenant: <TENANT_SLUG>"
# sync history
curl https://api.revenexx.com/v1/storage/sftp/sync-history \
-H "X-Revenexx-Api-Key: <API_KEY>" \
-H "X-Revenexx-Tenant: <TENANT_SLUG>"
Each run reports what it transferred, so you can confirm an import landed. Creating, changing, and running rules requires an administrator-level key; reading rules and history works with a standard key.
What's next
- Access control & visibility — how public and private decisions are made.
- Upload & manage files — the direct upload path for one-off files.