# Endpoints d'écriture > https://storelift.net/fr/docs/api/actions/ Chaque écriture se déroule en deux étapes : un aperçu qui ne change rien, puis une confirmation avec le jeton qu'il a renvoyé. URL de base `https://storelift.net/v1` · authentification, crédits et paramètres communs : https://storelift.net/fr/docs/api/ ## 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. Scope: aucun · Crédits: 0 - `jobId` (path, string, obligatoire) — jobId from confirm_action ```sh 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. Scope: aucun · Crédits: 0 - `add_app` — PREVIEW ONLY: start tracking an App Store or Google Play app in this workspace. `track:write`, 2 crédits, Free - `add_keywords` — PREVIEW ONLY: add keywords to an app's tracked list. `track:write`, 1 crédits, Free - `remove_keywords` — PREVIEW ONLY: stop tracking keywords for an app. `track:write`, 1 crédits, Free, destructif - `add_rivals` — PREVIEW ONLY: add manual competitors to an app. `track:write`, 1 crédits, Free - `remove_rivals` — PREVIEW ONLY: remove manual competitors from an app. `track:write`, 1 crédits, Free, destructif - `create_share_link` — PREVIEW ONLY: create a public, read-only link to one app's dashboard for one storefront. `reports:write`, 1 crédits, Free - `export_data` — PREVIEW ONLY: export one app's data as a CSV or JSON file — keywords (the latest run's rank, demand and…. `reports:write`, 20 crédits, Pro - `mark_alerts_read` — PREVIEW ONLY: mark alerts as read (or back to unread with read:false) — all of them, one app's, or those…. `track:write`, 0 crédits, Free - `create_alert_rule` — PREVIEW ONLY: turn on an alert rule and choose where it is delivered. `track:write`, 2 crédits, Free - `delete_alert_rule` — PREVIEW ONLY: turn an alert rule off (the same rule names as create_alert_rule). `track:write`, 0 crédits, Free, destructif - `reply_review` — PREVIEW ONLY: reply to one App Store review as the developer. `reviews:write`, 2 crédits, Free, destructif, asynchrone - `update_listing` — PREVIEW ONLY: change App Store listing text (name, subtitle, keywords, description, promotional text,…. `listing:write`, 5 crédits, Studio, destructif, asynchrone - `pause_campaign` — PREVIEW ONLY: pause an Apple Ads campaign. `ads:write`, 2 crédits, Studio, destructif, asynchrone - `resume_campaign` — PREVIEW ONLY: resume a paused Apple Ads campaign. `ads:write`, 2 crédits, Studio, asynchrone - `set_daily_budget` — PREVIEW ONLY: set the daily budget of an Apple Ads campaign. `ads:write`, 2 crédits, Studio, destructif, asynchrone - `set_keyword_bid` — PREVIEW ONLY: set the bid of one Apple Ads keyword. `ads:write`, 2 crédits, Studio, destructif, asynchrone - `pause_keyword` — PREVIEW ONLY: pause one Apple Ads keyword. `ads:write`, 2 crédits, Studio, destructif, asynchrone - `resume_keyword` — PREVIEW ONLY: resume a paused Apple Ads keyword. `ads:write`, 2 crédits, Studio, asynchrone - `add_negative_keyword` — PREVIEW ONLY: add a negative keyword to an Apple Ads campaign, or to one ad group when adGroupId is given…. `ads:write`, 2 crédits, Studio, destructif, asynchrone - `add_exact_keyword` — PREVIEW ONLY: add an exact-match keyword to an Apple Ads ad group, for example a search term that…. `ads:write`, 2 crédits, Studio, asynchrone Nécessite une approbation. Une écriture se fait en deux appels : `POST /actions` renvoie un aperçu et un `confirmToken` à usage unique, sans rien changer ; `POST /actions/confirm` l'applique. N'envoyez la confirmation qu'une fois que la personne a lu l'aperçu et donné son accord. C'est pourquoi il n'y a pas de commande à copier ici. Corps de la requête: ```json {"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. Scope: aucun · Crédits: par action - `confirmToken` (body, string, obligatoire) Nécessite une approbation. Une écriture se fait en deux appels : `POST /actions` renvoie un aperçu et un `confirmToken` à usage unique, sans rien changer ; `POST /actions/confirm` l'applique. N'envoyez la confirmation qu'une fois que la personne a lu l'aperçu et donné son accord. C'est pourquoi il n'y a pas de commande à copier ici. Corps de la requête: ```json {"confirmToken":"cf_…"} ```