Event API
API reference
The public Pongg event API manages subscriptions and setup previews. It does not expose internal integration services.
Base URL & authentication
https://app.pongg.com/api/zapierSend a Pongg key as a Bearer token. The account comes from that key. Limit: 60 requests per key per minute; a rejected request receives 429 and Retry-After in seconds. No other public paths or methods are served by this contract.
POST /subscribe
Register a target URL to start receiving an event. Called once, when a Zap (or any other subscriber) is turned on.
| Request | Response |
|---|---|
| JSON body: {"targetUrl": "<https url Pongg should POST events to>", "event": "lead"} (targetUrl is required; event is optional and defaults to "lead"). | 201 Created. JSON body: {"id": "<subscription id, a UUID>"}. Keep it: it is what you pass to unsubscribe. |
| Field | Type & requirement | Meaning |
|---|---|---|
| targetUrl | string · body · required | Public receiver URL. No reachability test at registration. |
| event | string · body · optional | lead (default), booking or all. Unknown strings do not match fan-out. |
| id | string · response · required | Subscription identifier. Keep it for removal. |
curl --request POST 'https://app.pongg.com/api/zapier/subscribe' \
--header "Authorization: Bearer $PONGG_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"targetUrl":"https://your-receiver.example.com/pongg","event":"all"}'targetUrl is not checked for reachability at subscribe time. An address that is not http or https, or that resolves to a private or loopback range, is accepted here and simply never receives a delivery. See Webhook deliveries below.
Subscription creation is not idempotent. Repeating POST /subscribe can create duplicate subscriptions. If the response was lost, check the account's existing hooks in Integrations before creating another.
DELETE /subscribe/{id}
Remove a subscription. Called once, when a Zap is turned off.
| Request | Response |
|---|---|
| No body. {id} is the id returned by subscribe. | 204 No Content. |
| Field | Type & requirement | Meaning |
|---|---|---|
| id | string · path · required | An existing subscription owned by the authenticated account. |
| Response body | none | 204 on success; an absent or other-account subscription returns 404. |
curl --request DELETE \
"https://app.pongg.com/api/zapier/subscribe/$SUBSCRIPTION_ID" \
--header "Authorization: Bearer $PONGG_API_KEY"An id Pongg does not have (wrong id, already removed, or owned by a different Pongg account) answers 404, not 204.
GET /perform-list
Return a handful of lead-shaped sample records, for the Zap editor's own "test this trigger" step. It is also the cheapest way to check a key still works: a 200 here is the whole proof that it resolves to a live Pongg account.
| Request | Response |
|---|---|
| Query parameter limit (optional): a whole number from 1 to 20. Defaults to 3. Nothing else in the query string is read. | 200 OK. JSON array of up to limit records, each shaped {id, call_id, source, contact, job_type, summary, booked}. |
| Field | Type & requirement | Meaning |
|---|---|---|
| limit | integer · query · optional | 1–20, default 3. The public edge clamps the parsed limit. |
| id | string · each response record | Delivery id or a synthetic sample id. |
| call_id / source / job_type / summary | string · each response record | Job type and summary are empty on real-record previews. |
| contact | object · each response record | Real previews contain only external_id; no captured name/phone/email. |
| booked | boolean · each response record | Whether the sampled delivery has an external appointment id. |
curl --request GET \
'https://app.pongg.com/api/zapier/perform-list?limit=3' \
--header "Authorization: Bearer $PONGG_API_KEY"This is a preview, not a feed: once real calls exist, its samples carry an id, a call, a source and whether it booked, but job_type and summary are empty and contact carries no name, phone or email. Subscribe and wait for a real call to receive full records.
Errors
Errors use {"error":"<sentence>"}. The rate-limit response also contains retryAfterSeconds. A successful DELETE returns no body.
| Status | Meaning | Next step |
|---|---|---|
| 400 | Pongg could not accept that request. | Check the request body; targetUrl is required. |
| 401 | That Pongg key is not valid. Open Integrations in Pongg and create a new one. | Correct or rotate the account key. |
| 404 | That is not a Pongg endpoint. | Use one of the three supported method/path pairs. |
| 404 | Pongg has no record of that. | Check the subscription id and account. |
| 429 | Too many requests to Pongg. Wait a minute and try again. | Wait for Retry-After before another API request. |
| 502 | Pongg could not be reached just now. Try again shortly. | Retry reads later. A POST may have saved a subscription before a response was lost; check existing hooks in Integrations before repeating it. |
Subscription creation is not an idempotent API. Repeating POST /subscribe can create duplicate subscriptions, which can produce duplicate pushes. There is no public subscription-list endpoint; the signed-in Integrations card shows the account’s hooks.
