Changelog · August 30, 2026
Async requests no longer need a webhook
Pull results when it suits you, without inventing an address to throw away.
By Roger Campos · Last updated: August 2026
TL;DR
report_to is no longer required on async requests. The webhook is resolved from the request, then the project's default, and a request that resolves to none is still accepted and processed — you collect its result from GET /result/:token. A Webhooks section in the dashboard shows every delivery and its retries.
Free plan, no credit card. 1,000 credits a month.
Once GET /result/:token existed, a required webhook was a leftover: callers who pull were inventing an address to throw away. Projects gained a default webhook in Settings, used when a request doesn't name one.
Webhook addresses are held to the same rules as the URLs we fetch — no IP addresses, internal hostnames, credentials or custom ports — and checked again at delivery. For local development, use a tunnel.
The request detail in the dashboard became a full page showing the result itself, what it cost, how long it stays fetchable, and the whole webhook delivery with every attempt.
curl -X POST https://urlpipe.dev/markdown \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# later
curl https://urlpipe.dev/result/TOKEN -H "Authorization: Bearer YOUR_API_KEY"FAQ
Frequently asked questions
Where does an async result go if I don't pass report_to?
Can my webhook be on localhost or a custom port?
How long can I collect a result by token?
Try it on the free plan.
Free plan, no card. Confirm your email and your API key is live — you'll be making real requests in minutes.