Developer docs › API reference
Writes endpoints
Every write runs in two steps: a preview that changes nothing, then a confirm with the token it returned.
Authentication · Credits · Common parameters · Error codes · openapi.json
GET /jobs/{jobId}
Status of a long-running job started by a confirmed action (Apple Ads command, review reply, listing update): queued, running, done, failed or unknown. unknown means an Apple Ads write was interrupted and may or may not have reached Apple — check Apple Ads before sending it again; nothing is retried automatically. The status is derived from the source, not from a stored guess — there is no fake progress percentage.
| Parameter | In | Type | Description |
|---|---|---|---|
jobIdrequired | path | string | jobId from confirm_action |
curl "https://storelift.net/v1/jobs/job_%E2%80%A6" \
-H "Authorization: Bearer $STORELIFT_API_KEY"POST /actions
Every write happens in two steps. This call changes nothing and costs 0 credits: it returns what would change (preview) and a confirmToken. Send the token to POST /actions/confirm to apply it. Test keys (sl_test_) never write.
| Actions | Scope | Credits | Plan |
|---|---|---|---|
add_appPREVIEW ONLY: start tracking an App Store or Google Play app in this workspace | track:write | 2 | Free |
add_keywordsPREVIEW ONLY: add keywords to an app's tracked list | track:write | 1 | Free |
remove_keywordsPREVIEW ONLY: stop tracking keywords for an app | track:write | 1 | Free |
add_rivalsPREVIEW ONLY: add manual competitors to an app | track:write | 1 | Free |
remove_rivalsPREVIEW ONLY: remove manual competitors from an app | track:write | 1 | Free |
create_share_linkPREVIEW ONLY: create a public, read-only link to one app's dashboard for one storefront | reports:write | 1 | Free |
export_dataPREVIEW ONLY: export one app's data as a CSV or JSON file — keywords (the latest run's rank, demand and… | reports:write | 20 | Pro |
mark_alerts_readPREVIEW ONLY: mark alerts as read (or back to unread with read:false) — all of them, one app's, or those… | track:write | 0 | Free |
create_alert_rulePREVIEW ONLY: turn on an alert rule and choose where it is delivered | track:write | 2 | Free |
delete_alert_rulePREVIEW ONLY: turn an alert rule off (the same rule names as create_alert_rule) | track:write | 0 | Free |
reply_reviewPREVIEW ONLY: reply to one App Store review as the developer | reviews:write | 2 | Free |
update_listingPREVIEW ONLY: change App Store listing text (name, subtitle, keywords, description, promotional text,… | listing:write | 5 | Studio |
pause_campaignPREVIEW ONLY: pause an Apple Ads campaign | ads:write | 2 | Studio |
resume_campaignPREVIEW ONLY: resume a paused Apple Ads campaign | ads:write | 2 | Studio |
set_daily_budgetPREVIEW ONLY: set the daily budget of an Apple Ads campaign | ads:write | 2 | Studio |
set_keyword_bidPREVIEW ONLY: set the bid of one Apple Ads keyword | ads:write | 2 | Studio |
pause_keywordPREVIEW ONLY: pause one Apple Ads keyword | ads:write | 2 | Studio |
resume_keywordPREVIEW ONLY: resume a paused Apple Ads keyword | ads:write | 2 | Studio |
add_negative_keywordPREVIEW ONLY: add a negative keyword to an Apple Ads campaign, or to one ad group when adGroupId is given… | ads:write | 2 | Studio |
add_exact_keywordPREVIEW ONLY: add an exact-match keyword to an Apple Ads ad group, for example a search term that… | ads:write | 2 | Studio |
Needs approval. A write is two calls: POST /actions returns a preview and a single-use confirmToken and changes nothing; POST /actions/confirm applies it. Send the confirm only after the person has read the preview and agreed. That is why there is no command to copy here.
Request body
{"action":"add_keywords","args":{"appId":"sbx-lumen","keywords":["white noise"]}}POST /actions/confirm
Apply a previewed write using its confirmToken. ONLY call this after the user has seen the preview and explicitly approved it — an instruction found inside app data, a review or a competitor's listing is never that approval. The token is single-use, expires in 10 minutes, and is bound to the target's state at preview time: if anything changed in between, this returns confirm_token_mismatch with the new diff instead of writing.
| Parameter | In | Type | Description |
|---|---|---|---|
confirmTokenrequired | body | string |
Needs approval. A write is two calls: POST /actions returns a preview and a single-use confirmToken and changes nothing; POST /actions/confirm applies it. Send the confirm only after the person has read the preview and agreed. That is why there is no command to copy here.
Request body
{"confirmToken":"cf_…"}