Skip to main content

Confirm

Are you sure?

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 · 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.

Async, collected by token
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?
To the project's default webhook if it has one; otherwise nowhere, and you collect it with GET /result/:token.
Can my webhook be on localhost or a custom port?
No. Webhook addresses follow the same rules as fetched URLs; use a tunnel for local development.
How long can I collect a result by token?
30 days after it was generated.

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.