API Projects
All Projects routes require Authorization: Bearer <user-token>.
Base URL: https://api.pionne.app
Project model
Section titled “Project model”{ "id": "prj_a1b2c3", "name": "Acme iOS", "platform": "ios", "bundle_id": "com.acme.app", "token_preview": "pio_live_abcd...", "notify_on_first_seen": true, "notify_on_regression": true, "notify_on_threshold": 100, "events_count_30d": 1245, "created_at": "2026-04-01T10:00:00Z"}bundle_id can be null until the first event arrives (cf. Bundle ID pinning).
GET /api/projects
Section titled “GET /api/projects”Lists the user’s projects.
Response 200
Section titled “Response 200”{ "data": [ { "id": "prj_a1b2c3", "name": "Acme iOS", "platform": "ios", ... } ]}POST /api/projects
Section titled “POST /api/projects”{ "name": "Acme iOS", "platform": "ios", "notify_on_first_seen": true, "notify_on_regression": true, "notify_on_threshold": 100}Response 201
Section titled “Response 201”{ "id": "prj_a1b2c3", "name": "Acme iOS", "platform": "ios", "bundle_id": null, "token": "pio_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}PATCH /api/projects/\{id\}
Section titled “PATCH /api/projects/\{id\}”Updates configurable fields.
{ "name": "Acme iOS Prod", "bundle_id": "com.acme.app", "notify_on_threshold": 500}Changing or clearing bundle_id — code required
Section titled “Changing or clearing bundle_id — code required”The bundle_id is the anti-token-theft barrier: changing or clearing
this field weakens the project’s security, so the API requires the
account’s deletion code (the 4–8 digit PIN set in Account →
Security). Add it to the body:
{ "bundle_id": "com.acme.app.beta", "deletion_code": "1234"}Possible responses:
200— updated.409deletion_code_not_set— the user hasn’t configured a PIN.422deletion_code_invalid— code missing or wrong.
All other fields (name, notify_*, paused_until…) are
editable without a code.
Response 200
Section titled “Response 200”The updated project.
DELETE /api/projects/\{id\}
Section titled “DELETE /api/projects/\{id\}”Deletes the project and all its events. Irreversible.
{ "deletion_code": "1234" }The deletion code is required (same errors as for the bundle_id
update above).
Response 204
Section titled “Response 204”POST /api/projects/\{id\}/regenerate
Section titled “POST /api/projects/\{id\}/regenerate”Regenerates the token. The old token is invalid instantly — all events arriving with it return 401.
Response 200
Section titled “Response 200”{ "token": "pio_live_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"}GET /api/projects/\{id\}/stats
Section titled “GET /api/projects/\{id\}/stats”Aggregated stats over the last 30 days.
Response 200
Section titled “Response 200”{ "events_total": 1245, "issues_open": 12, "issues_resolved": 4, "events_per_day": [ { "date": "2026-05-04", "count": 42 }, { "date": "2026-05-03", "count": 51 } ], "top_issues": [ { "id": "iss_xxx", "title": "TypeError ...", "events_count": 320 } ]}