API documentation
Two endpoints. Authenticate with your project API key as a Bearer token. Base URL https://push.aiskillhub.info.
POST /api/v1/push
Optimize a push. Counts as one push against your monthly quota.
POST https://push.aiskillhub.info/api/v1/push
Authorization: Bearer ps_live_xxx
Content-Type: application/json
{
"title": "Big sale is live!!!",
"body": "Massive discounts on everything. Shop now before it ends!",
"platform": "IOS", // IOS | ANDROID | WEB
"goal": "drive checkout", // optional
"brand": "Acme", // optional
"scheduledAt": "2025-06-01T10:00:00Z", // optional
"abTest": false // optional — Growth/Scale: split-test 2 variants
}Response
{
"id": "ckxyz...",
"optimized": { "title": "₹300 off ends tonight", "body": "Your cart's waiting — checkout in 1 tap." },
"survivalScore": 84,
"priorityBucket": "time-sensitive",
"rationale": "Front-loaded the offer + deadline; removed spam punctuation.",
"delivery": {
"iosInterruptionLevel": "time-sensitive",
"iosRelevanceScore": 0.8,
"androidImportance": "HIGH",
"sendAsCommunication": false
},
"variants": [ { "label": "A", "title": "...", "body": "..." } ],
"trackUrl": "https://push.aiskillhub.info/api/v1/push/ckxyz.../event",
"quota": { "used": 412, "limit": 1000 }
}A/B test response (abTest: true, Growth/Scale)
{
"abTest": true,
"groupId": "V1StGXR8_Z5j",
"survivalScore": 88,
"variants": [
{ "label": "A", "pushId": "ck_a...", "title": "...", "body": "...", "trackUrl": "https://push.aiskillhub.info/api/v1/push/ck_a.../event" },
{ "label": "B", "pushId": "ck_b...", "title": "...", "body": "...", "trackUrl": "https://push.aiskillhub.info/api/v1/push/ck_b.../event" }
],
"quota": { "used": 414, "limit": 50000 }
}
// Send variant A to half your audience, B to the other half, report events
// per pushId, and the dashboard declares the winner by open rate.POST /api/v1/push/{id}/event
Report lifecycle events so your dashboard shows real delivered-vs-opened rates.
POST https://push.aiskillhub.info/api/v1/push/{id}/event
Authorization: Bearer ps_live_xxx
Content-Type: application/json
{ "event": "opened" } // sent | delivered | opened | suppressed | failedHow to apply the delivery hints
- iOS (APNs): set
aps.interruption-levelandaps.relevance-scorefrom thedeliveryblock. Time-sensitive pushes skip the Scheduled Summary. - Android (FCM): map
androidImportanceto your notification channel’s importance. HIGH pops a heads-up; DEFAULT risks bundling. - Both: send the optimized
title/bodyinstead of your raw copy.