developers  · docsConta
Obtenha seu token
Docs · Quickstart

Your first API call in 5 minutes

Atualizado Aug 2026 · API v3

The fastest way in is a personal access token — no OAuth, no app registration. It reads and writes your own pon data, which is exactly right for scripts, Home Assistant and homelab things.

  1. Get pon on your iPhone

    Your account and lists live in the app — grab pon from the App Store and sign up there.

    App Store

  2. Sign in at my.pon.app

    Use your pon account. Your e-mail must be confirmed — enrollment answers 403 EMAIL_UNVERIFIED otherwise.

  3. Enable developer mode

    my → For developers. You accept the API terms once.

  4. Create a token

    Pick the scopes you need. The secret pon_pat_… is shown once — store it like a password. Expiry: 90 days by default, up to 365, or never.

  5. Call the API

    That’s it — plain Bearer, no signing dance:

# list your lists
curl https://api.pon.app/v3/lists \
  -H "Authorization: Bearer pon_pat_XXXX"
const res = await fetch("https://api.pon.app/v3/lists", {
  headers: { Authorization: "Bearer pon_pat_XXXX" },
});
const { data } = await res.json();
console.log(data);
import requests

res = requests.get(
    "https://api.pon.app/v3/lists",
    headers={"Authorization": "Bearer pon_pat_XXXX"},
)
print(res.json()["data"])

Want to try before you write code? The API Reference has an Authorize dialog — paste your token and every endpoint becomes clickable.

Reference → Authorize → Bearer

Add an item

POST /v3/lists/{list-id}/items — the write side works the same way:

curl -X POST https://api.pon.app/v3/lists/LIST_ID/items \
  -H "Authorization: Bearer pon_pat_XXXX" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Oat milk" }'
await fetch(`https://api.pon.app/v3/lists/${listId}/items`, {
  method: "POST",
  headers: {
    Authorization: "Bearer pon_pat_XXXX",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Oat milk" }),
});
requests.post(
    f"https://api.pon.app/v3/lists/{list_id}/items",
    headers={"Authorization": "Bearer pon_pat_XXXX"},
    json={"name": "Oat milk"},
)

Every response uses the same envelope: { "data": …, "meta": … } on success, { "errors": [ { "code", "message" } ] } on failure.

Don’t poll for changes.

Register a webhook instead — pon calls you when a list changes. Polling every 5 minutes already reads as heavy use on the fair-use gauge.

Next steps