webcapture Get a free key

Convert HTML to PDF from Bubble

Add the POST call in Bubble's API Connector with a private Authorization header, initialize it, and let a second call fetch the bytes.

Wire it up

The shared request is Authorization: Bearer wc_your_key and {"url": "https://example.com/"}. Bubble changes the wrapper, not those values or the authenticated download.

  1. Install the API Connector plugin, add an API (name it webcapture), and add a call.
  2. Call name: ConvertPage. Use as: Action in page load so the call runs server-side in workflows.
  3. Method: POST. URL: your serving origin plus /v1/convert.
  4. Under Headers, add key Authorization with value Authorization: Bearer wc_your_key and tick Private, which keeps the key off the browser.
  5. Set Body to {"url": "https://example.com/"} with Body type JSON.
  6. Click Initialize call: Bubble stores the response schema, and the receipt's download field becomes a result your workflow actions can read.

The full request

Call name:  ConvertPage
Method:     POST
URL:        https://webcapture.io/v1/convert
Headers:    Authorization = Bearer wc_your_key (Private)
Body:       {"url": "https://example.com/"}
Body type:  JSON
Initialize call

In a workflow, the call's result exposes download as text, and the fetch needs your key: a second API Connector call (Method GET, the same Authorization header) retrieves the bytes for the workflow to store or serve. A bare browser link to the url answers 401, because the download endpoint is key-scoped; it also answers 404 for another key's id.

Limits

The convert endpoint rate limits at 120 requests a minute per client IP, answering 429 with retryAfterSec on a full window. The monthly quota is per account: exhausted, the answer is 429 with used, limit, resetDate, and upgradeUrl, and each receipt's remaining field shows the count after the render. Bubble workflows that would block on a slow page can send ?wait=false and read the 202 ticket's download url from a later action.

Related

Method

Checked 2026-10-05 against Bubble: The call setup labels (Call name, Use as, Method, Headers, Body, Body type, Initialize call) follow Bubble's API Connector documentation, adding-calls page. Source: https://manual.bubble.io/core-resources/api/the-api-connector/adding-calls. Corrections: hello@webcapture.io.

Get a free key or read the API reference to wire Bubble.