Package photos on the API are not base64 in the JSON.
You send HTTPS URLs. Kilo:
- Checks the hostname is on your allowlist.
- Resolves DNS and blocks private IPs (SSRF protection).
- Downloads the image (size + content-type limits).
- Stores it on the delivery like the public form would.
Configure
Dashboard → Settings → API & Webhooks → Allowed image hosts.
One hostname per line, for example:
cdn.yourbot.com media.yourcompany.com public.blob.vercel-storage.com
cdn.yourbot.com
media.yourcompany.com
public.blob.vercel-storage.comHow matching works
- Exact host match, or
- Any subdomain of an allowlisted host (
shop.cdn.yourbot.commatchescdn.yourbot.com)
Do not use wildcards like *.public.blob.vercel-storage.com. The * is treated as a literal character and will not match.
For Vercel Blob, allowlist the base host:
public.blob.vercel-storage.com
public.blob.vercel-storage.comThat covers store URLs such as https://xxxxx.public.blob.vercel-storage.com/....
Localhost and private IPs are always rejected.
Checklist for AI / WhatsApp bots
- Host media on a domain you control (or a known CDN / Blob store).
- Add that hostname to the allowlist before creating deliveries (parent domain is enough for subdomains — no
*). - Use
https://only. - Keep each image under 5MB.