Dicey Table

Stay in control

How URL imports are fetched safely

DiceyTable's server fetches a web file for your agent through a guarded proxy. It checks the address and file type, streams the file and keeps no copy.

On this page7 sections

Your agent never downloads a web file by itself. When it asks for one, DiceyTable's server fetches it through a guarded proxy, checks it, and streams it to your tab without keeping a copy.

This page is for anyone who lets an agent import files with the url argument of asset_import. The import itself is covered in Import models, images and sounds with an agent.

The URL import path A file goes from the website to DiceyTable's server proxy, which checks the address, the redirects and the file type, keeps no copy and logs each try. It then streams through the bridge to your tab, which imports it into your project. Websitehttps:// address DiceyTable server proxyfetches the file for you Bridgestreams it on Your tabchecks the bytes Importinto your project The proxy checks: ✓ https only, no user name or password ✓ public addresses only (no rebinding) ✓ at most 5 redirects, never to http ✓ type read from the bytes; no scripts • keeps no copy • logs each try, refused ones too
The only road in. The server fetches and checks the file; your tab imports it.

Who fetches the file?#

Only DiceyTable's server does. Your tab can't fetch random websites, because its security rules forbid it. The bridge doesn't fetch them either. So the agent asks the server, using your key. The server downloads the file and streams it back through the bridge to your tab.

There is no general "fetch a web page" tool, for agents or for mods. A URL import is the only thing that fetches, and it only brings in game assets.

What you'll need. The key needs the Import from URLs permission, as well as Edit projects. You pick them when you create an API key.

What the proxy checks#

Before the proxy lets a file in, it checks all of this:

  • The address. It must start with https://. It can't hold a user name or a password, and it can't be longer than 2,048 characters.
  • The host name. Local and special names are refused, such as localhost, *.local, *.internal, *.home.arpa and one-word names. So are DiceyTable's own hosts.
  • Where the name points. The proxy looks the name up first. If any address it gets back is private, local or not on the public internet, the fetch stops. Then it connects to the exact address it checked. That way, nobody can swap in a private address between the check and the download. (This trick is called DNS rebinding.)
  • Redirects. It follows at most 5. It checks each one from scratch, and it never drops from https to http.
  • The file type. It reads the first 4 KB of the file and decides the type from the bytes. What the website claims doesn't count. Models, images, HDR environments, KTX2 textures, sounds and data files are allowed. Scripts, code and markup are always refused, such as .js, .ts, .lua, .wasm, .html, .svg and .xml. So is anything that looks like a web page.

The proxy names itself DiceyTableAssetFetch/1 when it asks for a file. Some sites put a bot check in front of their files and turn it away. When that happens, download the file yourself and let the agent import it from your computer. Which local files an agent can read explains the folders it can use.

Does DiceyTable keep the file?#

No. The file streams straight through. The proxy holds only the first 4 KB in memory, to check the type. Nothing is written to disk, a database, a cache or a log.

What is kept is a short record of each try, refused ones included. It holds the address, where the file ended up after redirects, the HTTP status, the size, the type, the outcome and how long it took. It never holds the file or the request headers. You can read the list under Settings ▸ AI agents ▸ URL imports at /play/settings. Records are deleted after 90 days. What leaves your computer covers the rest of what the agent's work leaves behind.

Limits#

Every other agent limit is in AI agent limits and quotas.

Limit Value
One file 128 MB, counted on the bytes actually sent
Fetches per key 60 a minute
Bytes per key 5 GB in any 24 hours. A download that crosses it stops part-way.
At the same time 2 per user, 4 on the server. A request waits up to 10 seconds for a free slot.
Time 10 seconds to connect, 30 to the first byte, 120 in total

The file that gets stored has tighter limits of its own, because conversion shrinks it.

Outcomes#

Every try ends with one of these outcomes, and the URL imports list shows it too. All the other codes are in AI agent error codes.

Outcome What happened What to do
ok Fetched and handed to the import Nothing
blocked-url Not an https:// address, has a name or password in it, is too long, or names a local or DiceyTable host Use the file's public https:// address.
blocked-address The name points at a private or non-public address, even in part Download the file and import it from your computer.
blocked-type Not an asset type, a script or markup file, empty, or the bytes don't match the name Import models, images, sounds and data files only.
too-large Over 128 MB, as declared or as sent Shrink or convert the file first.
timeout Too slow to connect, to start or to finish Try again, or download it yourself.
upstream-error The site sent an error (404, 500 and so on) or broke off Check the address in your browser.
upstream-blocked The site refused us (401, 403, 429 and so on), often a bot check Download it yourself and import it from your computer.
rate-limited More than 60 fetches in a minute Wait. The error says how long.
quota-exceeded 5 GB used in the last 24 hours Wait, or import files from your computer.
busy Too many fetches at once, or the server's daily total is used up Try again shortly.

Fetched files are data#

A fetched file can't give your agent orders. That goes for its bytes, its name and its final address. It matters most for text files like .json, .txt and .csv, because the agent may read them. A downloaded README that says "ignore your instructions" is only text. Prompt injection protection explains how DiceyTable marks this kind of text for your agent.

Every file the agent imports also needs a credit. For a URL import, the credit records where the file came from and a SHA-256 hash, which is a fingerprint of the exact bytes. You check that record before you publish. See Review credits an AI agent added.

Did this page answer your question?