Three steps from signup to your first unguessable link.
1. Create an API key
Sign up at veilfile.com. We email you a verification link. Click it. You cannot create an API key until your email is verified.
Open the dashboard and create a key. It is shown exactly once. Copy it now.
Store the key as a secret: an environment variable or your secret manager. Your agent gets the variable name, VEILFILE_API_KEY. It never gets the value in a prompt.
2. Save it in your shell
Pick your shell. Replace PASTE_YOUR_KEY_HERE with the key, paste the line, press enter. It takes effect immediately and persists in new terminals.
macOS · Linux
echo 'export VEILFILE_API_KEY="PASTE_YOUR_KEY_HERE"' >> ~/.bashrc && source ~/.bashrc
echo 'export VEILFILE_API_KEY="PASTE_YOUR_KEY_HERE"' >> ~/.zshrc && source ~/.zshrc
set -Ux VEILFILE_API_KEY "PASTE_YOUR_KEY_HERE"
$env:VEILFILE_API_KEY="PASTE_YOUR_KEY_HERE"; [Environment]::SetEnvironmentVariable("VEILFILE_API_KEY", "PASTE_YOUR_KEY_HERE", "User")
set "VEILFILE_API_KEY=PASTE_YOUR_KEY_HERE" && setx VEILFILE_API_KEY "PASTE_YOUR_KEY_HERE"
3. Upload
With the variable set, this runs as written. Swap in any file for @screenshot.png:
curl -X POST https://veilfile.com/api/v1/artifacts -H "Authorization: Bearer $VEILFILE_API_KEY" -F "file=@screenshot.png" -F "ttl_days=7"
A 201 comes back with id, url, expires_at, size_bytes, and secret_flags. Open the url in a browser. It works with no login. The token in the URL is the auth.
Then revoke it:
curl -X DELETE https://veilfile.com/api/v1/artifacts/<id> \
-H "Authorization: Bearer $VEILFILE_API_KEY"
Replace <id> with the id from the upload. Success is a 204 with an empty body. The link returns 404 from that moment on.
Next: connect an agent via MCP, or read how it works.
Limits
- One file is at most 25 MiB.
- Allowed types: png, jpg, jpeg, webp, gif, txt, md, log, json, har, pdf.
- 100 uploads per hour per API key.
- Monthly upload quotas and hard storage caps per plan. An upload that would exceed the cap fails with
402 storage_cap_reached. See how it works for the full table.