Your first API call in 5 minutes
Updated Aug 2026 · API v3The 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.
Get pon on your iPhone
Your account and lists live in the app — grab pon from the App Store and sign up there.
Sign in at my.pon.app
Use your pon account. Your e-mail must be confirmed — enrollment answers
403 EMAIL_UNVERIFIEDotherwise.Enable developer mode
my → For developers. You accept the API terms once.
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.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 → BearerAdd 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
- Authentication — when a token is enough, and when you want OAuth.
- Webhooks — react to list changes without polling.
- Limits & fair use — what’s generous, and what’s a cap.