Skip to content

Quick start

Last updated 9 Nov 2026

This guide signs an upload URL on your server, uploads a file from the command line and loads it back through a signed download URL.

When your account is opened, we give you:

  • a space name, eight lower-case letters and digits, such as k3x9q2m7;
  • the hostnames for that space: <space>.edge.binedge.net for public files, <space>.vault.binedge.net for private files and <space>.upload.binedge.net for uploads;
  • a production signing key and a development signing key. Keep them on your servers only.

Your server decides where the file goes, how large it may be, which types are accepted and when the URL expires. With the Laravel disk:

$upload = Storage::disk('binedge')->temporaryUploadUrl(
'avatars/42.png',
now()->addMinutes(10),
['ContentType' => 'image/png', 'ContentLength' => 5 * 1024 * 1024],
);

$upload['url'] is the signed URL and $upload['headers'] holds the Content-Type the upload must use. Without Laravel, build the URL as described in Signed URLs: role upload, with the parameters exp, max_bytes and types.

Send the file with PUT and the same Content-Type:

Terminal window
curl -X PUT \
-H 'Content-Type: image/png' \
--data-binary @avatar.png \
'https://k3x9q2m7.upload.binedge.net/production/avatars/42.png?exp=...&max_bytes=5242880&types=image%2Fpng&sig=...'

A 200 with an empty body means the file is stored. Browsers and apps send the same request directly; your server only signs the URL. For large files or unreliable networks, use resumable uploads.

Private files need a signed download URL:

$url = Storage::disk('binedge')->temporaryUrl('avatars/42.png', now()->addMinutes(10));

Files in a public bucket need no signature and are cached at the edge:

https://k3x9q2m7.edge.binedge.net/production/avatars/42.png