Sitelet https://urlpipe.dev/docs/quickstart
Skip to main content

Quickstart

This guide gets you from zero to your first response in a couple of minutes. You'll create an account, grab a project API key, and send your first request.

URLpipe is free to start — no credit card. The Free plan includes a monthly allowance of enough credits for both the browser and the AI endpoints, so you can build and test straight away.

1. Create an account and a project

Sign up, then create your first project. Every project has its own API key and its own request history, so it's normal to have one project per app or environment (say, production and staging). The project's API key is shown to you as soon as it is created — copy it then, because it is shown only once. Confirm your email address and the key is live.

2. Keep your API key safe

Treat the key like a password: it authenticates every request. We store only a hash of it, so if you lose it, rotate it from the project's Settings → API key and you are shown the new one. See Authentication for the details.

3. Make your first request

Send a POST to any endpoint with your bearer token and a JSON body containing the url. Here we convert a page to Markdown, with sync: true so the result comes straight back in the response:

POST/markdown
curl -X POST https://urlpipe.dev/markdown \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "sync": true}'

That's it — the response body is the Markdown for the page. Every other endpoint, like /screenshot or /meta, takes the exact same request shape.

Prefer a library? The official client libraries for Python, JavaScript, Ruby and Go make the same call in one line, and add retries that never bill twice, typed errors and webhook verification:

# pip install urlpipe

import urlpipe

client = urlpipe.Client()  # reads URLPIPE_API_KEY

page = client.markdown("https://example.com")
print(page.data)

4. Get the result back: async or sync

By default, requests are async: leave out sync and you get a token back immediately, and the result reaches you either at a report_to webhook URL or from GET /result/:token whenever you ask for it. That is the better fit for slow work like Lighthouse audits and for anything you run in bulk; sync: true suits a quick one-off like the one above. Both are covered in Async & sync modes.

What's next