List Metafields
curl --request GET \
--url https://api.launchmystore.io/api/v1/metafields.json \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.launchmystore.io/api/v1/metafields.json"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.launchmystore.io/api/v1/metafields.json', 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/metafields.json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/api/v1/metafields.json"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.launchmystore.io/api/v1/metafields.json")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/metafields.json")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": 123,
"state": "<string>",
"data.metafields": [
{}
],
"data.total": 123,
"data.page": 123,
"data.limit": 123
}Metafields
List Metafields
List the metafields your app has written
GET
/
api
/
v1
/
metafields.json
List Metafields
curl --request GET \
--url https://api.launchmystore.io/api/v1/metafields.json \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.launchmystore.io/api/v1/metafields.json"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.launchmystore.io/api/v1/metafields.json', 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/metafields.json",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.launchmystore.io/api/v1/metafields.json"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.launchmystore.io/api/v1/metafields.json")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.launchmystore.io/api/v1/metafields.json")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"status": 123,
"state": "<string>",
"data.metafields": [
{}
],
"data.total": 123,
"data.page": 123,
"data.limit": 123
}List Metafields
Returns metafields written by your app (scoped byappId). Filter by
owner type, owner id, namespace, or key.
This endpoint returns only the metafields your app has written. To list
all metafields on a resource (including those written by other apps or
merchants), the merchant must use the Admin API
(
GET /metafields?ownerType=...&ownerId=...).Request
curl -X GET "https://api.launchmystore.io/api/v1/metafields.json?owner_type=product&owner_id=<productId>" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
const url = new URL('https://api.launchmystore.io/api/v1/metafields.json');
url.searchParams.set('owner_type', 'product');
url.searchParams.set('owner_id', productId);
const response = await fetch(url, {
headers: { Authorization: `Bearer ${accessToken}` },
});
const { data } = await response.json();
Required scope
read_metafields
Query parameters
string
Filter by owner type. One of
shop, product, variant,
collection, customer, order, page, blog, article. Lowercase
only. Both casings are accepted: owner_type and ownerType behave identically.string
Filter by the owning resource id. Not enforced by the API, but
strongly recommended for every owner type except
shop — without it
you get all rows of that owner type. Both casings are accepted:
owner_id and ownerId behave identically.string
Filter by namespace.
string
Filter by exact key.
integer
default:"1"
1-indexed page number.
integer
default:"50"
Items per page. The API applies no hard cap; keep requests to 250 or
fewer as a practical limit.
Response
integer
HTTP status code (200 on success).
string
success or error.array
Array of metafield objects.
Show Metafield Object
Show Metafield Object
Raw DB row (camelCase). The value is not decoded — it is returned as
the stored string.
string
UUID
string
e.g.
customstring
e.g.
warranty_yearsstring
the stored string (canonical wire form; scalars stringified, compound types JSON-encoded). Not decoded.
string
the stored type
string
resource kind
string
resource id
string
your app’s id (always your own)
string
ISO timestamp
string
ISO timestamp
integer
Total matching records.
integer
Current page.
integer
Page size.
Example response
{
"status": 200,
"state": "success",
"data": {
"metafields": [
{
"metafieldId": "e607f43e-9251-451e-a45c-38bf28d61154",
"namespace": "custom",
"key": "badge",
"value": "BESTSELLER",
"type": "single_line_text_field",
"ownerType": "product",
"ownerId": "e5f6a7b8-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"appId": "your-app-id",
"createdAt": "2026-05-09T13:32:53.135Z",
"updatedAt": "2026-05-09T13:32:53.135Z"
},
{
"metafieldId": "48b24b31-b1a4-4997-9827-a1668a886ea6",
"namespace": "custom",
"key": "warranty_years",
"value": "5",
"type": "number_integer",
"ownerType": "product",
"ownerId": "e5f6a7b8-9c0d-4e1f-a2b3-c4d5e6f7a8b9",
"appId": "your-app-id",
"createdAt": "2026-05-09T13:32:53.135Z",
"updatedAt": "2026-05-09T13:32:53.135Z"
}
],
"total": 2,
"page": 1,
"limit": 50
}
}
Error codes
| Code | Description |
|---|---|
UNAUTHORIZED | Invalid or missing access token |
FORBIDDEN | App doesn’t have read_metafields scope |
VALIDATION_ERROR | Invalid ownerType value |