🧩 Developers

The Burnpedia API

Schedule and publish Pins, manage boards, and pull Pinterest analytics straight from your own apps — everything the dashboard does, over a clean REST API. Free on every plan, including the free one: create an account, create a key, make your first call. No card, no upgrade.

curl https://burnpedia.app/api/v1/me \
  -H "Authorization: Bearer bp_live_YOUR_API_KEY"

Authentication

Every request is authenticated with an API key sent as a bearer token. Create keys from your dashboard → API tab — on any plan, free included. Keep them secret — a key carries full access to your account. The base URL for all requests is:

https://burnpedia.app/api/v1

Quick start

List the boards on your active Pinterest account — your first successful call:

curl https://burnpedia.app/api/v1/boards \
  -H "Authorization: Bearer bp_live_YOUR_API_KEY"

Endpoints

Everything you need to fully integrate Burnpedia — accounts, boards, the whole pin lifecycle, and analytics.

GET/v1/me

Returns the authenticated account: plan, connected Pinterest accounts, and your current rate-limit status. Also returns `pins_today` (used / limit / remaining / unlimited — `limit` is null when unlimited), `plan_name`, a ready-to-print `plan_summary` sentence, and `upgrade_url` (null when you are already on the top plan). Render `plan_summary` rather than composing your own — it is built from the live plan table and honours an active trial. `pins_today.resets_at` is when the daily allowance comes back, as a UTC instant — format it in your reader's own timezone rather than saying "tomorrow". It is null on an unlimited plan. While a Pro trial is running you also get a `trial` object (active, plan, days_left, ends_at, upgrade_url); it is ABSENT when no trial is running, so its presence is the check. `trial.upgrade_url` is a short-lived link that lands on checkout with the plan already chosen. Treat it as opaque: do not construct one, do not modify it, and do not store it — it expires within a day.

GET/v1/accounts

Every Pinterest account connected to your Burnpedia workspace, with the id you pass as `account` to scope other calls.

GET/v1/boards

Boards on a connected Pinterest account. Pass `?account=<id>` to choose which one; defaults to your active account.

POST/v1/boards

Creates a public board on the selected Pinterest account.

GET/v1/pins

Your scheduled, publishing, published, and failed pins. Filter with `status`, narrow to one website with `site` or `link_prefix`, and paginate with `limit` + `offset`.

POST/v1/pins

Schedules a pin (or publishes immediately with `publish_now: true`). Provide `board_id` or a `board_name` (auto-created). Counts against your plan’s daily pin limit and the write rate limit. No image? Set `cover: true` and we design one from the `title` — free, no AI points, and the same design every time for the same `link`. `image_url` wins when both are sent, so you can pass `cover: true` on every call and let the presence of a photo decide. Pass a `cover` object instead of `true` to force a look — it takes `palette` and `layout` (band, stack, frame, edge). `cover: {"ai": true}` sets the title over a photograph generated for it — that one costs AI points, and if it cannot be made you get the free cover instead and are not charged.

GET/v1/pins/{id}

Retrieve a single pin you own by its Burnpedia id.

PATCH/v1/pins/{id}

Edit the title, description, link, board, or scheduled time of a pin that has not published yet.

DELETE/v1/pins/{id}

Deletes a pin from your Burnpedia queue.

POST/v1/pins/{id}/publish

Immediately publishes a scheduled pin to Pinterest.

POST/v1/images

Generates a Pinterest-shaped background photograph from a text prompt and returns a public `image_url` you pass straight to `POST /v1/pins`. Costs AI points (the response tells you how many, and how many you have left); nothing is charged if generation fails. ⚠️ This returns a PHOTOGRAPH with no text on it — titles, logos and the template library are composed in the Burnpedia dashboard, not here. `aspect` is optional and must be one of the vertical pin shapes 2:3, 9:16 or 1:2; omit it and one is chosen for you.

POST/v1/copy

Writes a Pin title, description and keyword list from whatever you know about the post — send any of `topic`, `title`, `link` or `board_name`. Costs AI points (the response tells you how many, and how many you have left); nothing is charged if the request fails. ⚠️ This returns TEXT only — it does not draw anything. Setting that text on a photograph is the designer’s canvas work, which is free.

GET/v1/analytics

Impressions, saves, pin clicks, outbound clicks, and derived rates for the connected account. Pinterest returns at most the last 90 days.

GET/v1/analytics/site

Impressions, saves, pin clicks and outbound clicks for the pins linking to one website, from our cached copy of Pinterest's per-pin analytics — so it costs none of your Pinterest rate limit and is safe to call on every page render. The window **ends two days ago** (`through_date`), because Pinterest reports about that late; treat anything after it as not-yet-reported rather than zero. Per-post rows (`pins`) are included on paid plans; every plan gets the site `totals`. `totals` covers **every** Pin matching the filter, while `pins` carries at most `pins_list_max` of them, newest first — compare `pins_listed` with `pins_total`, or read `pins_truncated`, to know whether the table is showing all of them.

POST/v1/events/save-clicks

Records how many times readers pressed a save button on your own website, per day, so the numbers can sit beside what your Pins for those pages earned. Send a host and a map of `YYYY-MM-DD` to a whole number, at most 90 dates per call. Each report REPLACES the stored count for the days it names, so re-sending a rolling window is safe and is how a gap heals — never send deltas. It carries no information about any visitor, and there is no field for one.

GET/v1/analytics/top-pins

YOUR best-performing pins, ranked by engagement — the same list the Winning Pins gallery in the dashboard is built from. Each row carries the Pinterest pin id, the title, the destination link, an absolute image URL, and the impressions, saves, pin clicks and outbound clicks Pinterest reported for it. The window is the last 30 days and the list is the top 12 — both fixed, because Pinterest clamps this endpoint to a 90-day window and rate-limits it hard (60 analytics requests a minute per connected account, shared across every analytics call), so an open `limit` would let one integration exhaust the same budget its own dashboard needs. Titles and images are merged from pins you scheduled with us, so a pin Pinterest reports on but has no title for still renders. These are YOUR pins: there is no way to read another account’s analytics, here or anywhere in the Pinterest API.

GET/v1/brand-kit

The colours, font and logo saved on your account, as `{ panel, accent, text, font, logo_url, logo_position }`. `has_kit` is false until you have saved one — an all-blank kit and no kit at all mean different things.

PUT/v1/brand-kit

Stores a brand kit on the account so the same colours are available on every site you run. Send `{ "brand_kit": { "panel": "#ffffff", "accent": "#e11d48", "text": "#111111" } }`. A kit whose title colour does not reach 4.5:1 against its background is refused — an unreadable kit here would be handed to every other site you connect. Send a kit with no colours to clear it.

Schedule a Pin

Create a scheduled Pin (or publish immediately with publish_now: true). Pick your language:

curl -X POST https://burnpedia.app/api/v1/pins \
  -H "Authorization: Bearer bp_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/image.jpg",
    "title": "How to grow on Pinterest",
    "description": "Fresh pins, scheduled automatically.",
    "link": "https://yoursite.com/post",
    "board_name": "Pinterest Tips",
    "scheduled_at": "2026-08-01T15:00:00Z"
  }'

Generate a Pin image with AI

No image for a post? POST /v1/images generates a Pinterest-shaped background photograph from a prompt and hands back an image_url you pass straight to POST /v1/pins. It costs AI points — the response tells you how many it took and how many you have left — and nothing is charged if generation fails.

It returns a photograph with no text on it. Titles, logos and the template library are composed in the Burnpedia dashboard, not through the API. aspect is optional and must be one of the vertical pin shapes 2:3, 9:16 or 1:2.

# 1. generate a background (costs AI points)
curl -X POST https://burnpedia.app/api/v1/images   -H "Authorization: Bearer bp_live_YOUR_API_KEY"   -H "Content-Type: application/json"   -d '{"prompt": "a bowl of ripe strawberries on a linen cloth, morning light", "aspect": "2:3"}'
# -> { "image_url": "https://burnpedia.app/api/uploads/api-....png", ... }

# 2. pin it
curl -X POST https://burnpedia.app/api/v1/pins   -H "Authorization: Bearer bp_live_YOUR_API_KEY"   -H "Content-Type: application/json"   -d '{"image_url": "<image_url from step 1>", "title": "Strawberry season", "board_name": "Recipes", "publish_now": true}'

Rate limits

Calls are capped per key so your integration always stays within Pinterest’s own API limits — you can never accidentally get your account throttled. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and (on a 429) Retry-After.

The API is the same on every plan — the ceilings differ. Requests per minute, by plan:

CategoryStarter (free)BasicProAgency
Reads (GET)
boards, pins, me, accounts
30/min
5,000/day
60/min
10,000/day
120/min
20,000/day
240/min
40,000/day
Writes (POST/PATCH/DELETE)
each maps to a Pinterest write — kept Pinterest-safe
5/min
250/day
10/min
500/day
20/min
1,000/day
40/min
2,000/day
Analytics
Pinterest analytics is rate-limited hard
8/min
500/day
15/min
1,000/day
30/min
2,000/day
60/min
4,000/day
Events
reports from your own site — nothing reaches Pinterest, so this bucket is cheap
8/min
50/day
15/min
100/day
30/min
200/day
60/min
400/day

Separately, every plan has a daily pin allowance — 3 a day on the free plan, 15 on Basic, unlimited on Pro and Agency. Creating a pin past it returns limit_reached with the number and your reset, never a silent drop.

Prefer not to write code? Use the WordPress plugin

Burnpedia Pin Scheduler for Pinterest is our official, free, open-source WordPress plugin — a client for this exact API. Install it, paste an API key, and every post you publish becomes a scheduled Pin with its featured image, title, and link. It is the fastest way to see what the API does before you build on it, and its source is a working reference implementation in PHP.

There are three of them — the Scheduler, an Image Maker that designs the Pin inside wp-admin, and a save-to-Pinterest button with click analytics. See all three WordPress plugins →

Errors

Errors return a consistent JSON body: { "error": { "code", "message" } }. Switch on error.code:

CodeHTTPMeaning
unauthorized401No API key was provided.
invalid_api_key401The key is malformed, unknown, revoked, or expired.
api_disabled403API access is switched off for this login (a managed team seat).
validation_failed400One or more fields failed validation (see `fields`).
not_found404The requested resource does not exist or is not yours.
limit_reached402Your plan’s daily pin limit was reached.
rate_limited429Too many requests this minute — slow down.
daily_limit429The per-day rate limit for this key was reached.
no_pinterest_account400No Pinterest account is connected.
pinterest_error502Pinterest returned an error for the call.
seat_denied403The account owner switched this capability off for this login (a managed team seat).
no_points402Out of AI points. `cost`, `points` and `upgrade_url` are on the error.
image_failed502AI image generation failed — no points were charged. Safe to retry.
not_configured503A required integration is not set up on the server right now.

Ready to build?

The API is free on every plan. Create an account, generate a key, and make your first call in minutes — no credit card, and nothing expires.

Create a free API key →