Set App Data
curl --request POST \
--url https://api.launchmystore.io/api/v1/app-data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>",
"value": "<any>",
"storeId": "<string>",
"ttlSeconds": 123
}
'import requests
url = "https://api.launchmystore.io/api/v1/app-data"
payload = {
"key": "<string>",
"value": "<any>",
"storeId": "<string>",
"ttlSeconds": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({key: '<string>', value: '<any>', storeId: '<string>', ttlSeconds: 123})
};
fetch('https://api.launchmystore.io/api/v1/app-data', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.launchmystore.io/api/v1/app-data",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'key' => '<string>',
'value' => '<any>',
'storeId' => '<string>',
'ttlSeconds' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/api/v1/app-data"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.launchmystore.io/api/v1/app-data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/app-data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}"
response = http.request(request)
puts response.read_body{
"key": "<string>",
"storeId": "<string>",
"value": "<any>",
"expiresAt": "<string>",
"updatedAt": "<string>"
}App Data
Set App Data
Store a JSON value under a key for your app
POST
/
api
/
v1
/
app-data
Set App Data
curl --request POST \
--url https://api.launchmystore.io/api/v1/app-data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>",
"value": "<any>",
"storeId": "<string>",
"ttlSeconds": 123
}
'import requests
url = "https://api.launchmystore.io/api/v1/app-data"
payload = {
"key": "<string>",
"value": "<any>",
"storeId": "<string>",
"ttlSeconds": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({key: '<string>', value: '<any>', storeId: '<string>', ttlSeconds: 123})
};
fetch('https://api.launchmystore.io/api/v1/app-data', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.launchmystore.io/api/v1/app-data",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'key' => '<string>',
'value' => '<any>',
'storeId' => '<string>',
'ttlSeconds' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/api/v1/app-data"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.launchmystore.io/api/v1/app-data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/app-data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\",\n \"value\": \"<any>\",\n \"storeId\": \"<string>\",\n \"ttlSeconds\": 123\n}"
response = http.request(request)
puts response.read_body{
"key": "<string>",
"storeId": "<string>",
"value": "<any>",
"expiresAt": "<string>",
"updatedAt": "<string>"
}Creates or replaces one record of your app’s key/value storage. Use it for
small app state — per-store settings, OAuth state, idempotency markers —
when you don’t want to run your own database.
App data is authenticated with your app’s client credentials, not a
store’s access token — so your app can read what it stored (for example a
store’s access token) before it has a token to use:Records are private to your app.
Authorization: Basic base64(<client_id>:<client_secret>)
storeId is a partition you choose: pass
the store’s id to keep a record per store, or omit it for app-wide records.Request
curl -X POST "https://api.launchmystore.io/api/v1/app-data" \
-H "Authorization: Basic $(printf '%s:%s' "$CLIENT_ID" "$CLIENT_SECRET" | base64)" \
-H "Content-Type: application/json" \
-d '{
"storeId": "ef10744c-5c4a-4f47-85fc-062ba44afb5f",
"key": "settings",
"value": { "threshold": 50, "enabled": true }
}'
Body Parameters
string
required
The record’s key, up to 512 characters. Writing an existing key (in the
same
storeId partition) replaces its value.any
required
Any JSON value, up to 512 KB. To remove a record, use
Delete App Data.
string
The store the record belongs to. Omit for an app-wide record.
integer
Expire the record after this many seconds. Expired records are no longer
returned; without
ttlSeconds the record never expires.Response
The record underdata.record.
string
The record’s key
string
The store partition, or
null for an app-wide recordany
The stored JSON value
string
When the record expires (ISO 8601), or
nullstring
Last write (ISO 8601)
{
"status": 200,
"state": "success",
"message": null,
"data": {
"record": {
"key": "settings",
"storeId": "ef10744c-5c4a-4f47-85fc-062ba44afb5f",
"value": { "threshold": 50, "enabled": true },
"expiresAt": null,
"updatedAt": "2026-09-27T10:00:00.000Z"
}
}
}
Errors
| Status | Description |
|---|---|
400 | key or value missing, or key longer than 512 characters |
413 | value larger than 512 KB |
401 | Missing, malformed or wrong client credentials |