Events API accepts writes (202) but no events, metrics, or profiles ever appear — even via bulk-create with no Location header
I need help with I wanvt Klaviyo to recognize my metric payment failed and surface it so I can create a flow all effort has failed here is a summary: Every write returns HTTP 202 Accepted with valid Klaviyo response headers — but nothing is ever ingested: no event appears via the API or the UI, no metric is created, and no profile is created. Verified over ~2 hours, across single-event and bulk-create endpoints, multiple metric names (new and pre-existing), multiple profile emails, and two API revisions.
Setup
- Endpoint:
https://a.klaviyo.com/api - Auth:
Authorization: Klaviyo-API-Key pk_…(private key, Full Access, events:write scope) - Revision headers tried:
2024-10-15and2026-07-15— both echoed back inx-klaviyo-api-revision, so accepted - Company id from response header:
cid: Y9LFtc(US endpoint) - Requests originate from a Node.js server (native
fetch)
What we observe
1. Single-event create — POST /api/events
json
Copy
{
"data": {
"type": "event",
"attributes": {
"metric": { "data": { "type": "metric", "attributes": { "name": "Payment Failed - Soft Decline" } } },
"profile": { "data": { "type": "profile", "attributes": { "email": "demo+isolated@example.com" } } },
"unique_id": "test-1234",
"value": 12.34,
"properties": { "decline_type": "soft", "amount": 12.34, "currency": "usd" }
}
}
}Result: 202 Accepted, empty body, real headers (cid, x-klaviyo-req-id, rate limits). Identical result for events against an existing metric (Active on Site) and against new metric names.
2. Bulk-create job — POST /api/event-bulk-create-jobs
Used the structure from the OpenAPI spec and community examples: events-bulk-create.data[].attributes.profile + events.data[], backfill: false, profile first_name/last_name/email, event unique_id/time/value/metric/properties.
Result: 202 Accepted, empty body — but no Location header and no job id anywhere in the response, so the job can't be polled via GET /api/event-bulk-create-jobs/{id} (docs indicate the bulk endpoint returns a Location header).
3. Reads confirm nothing was ingested
GET /api/metrics→ 20 metrics (account catalog); no new metric appearsGET /api/events?filter=equals(metric_id,"TX6mUj")(existing metric we posted to) →"data":[]GET /api/eventswith datetime filters →"data":[]GET /api/profiles?filter=equals(email,"demo+isolated@example.com")→"data":[]for every email used- UI (authoritative): Profiles shows only the account-owner profile; Analytics → Metrics shows nothing new, even 1–2 hours after the 202s
