Saasuluk API (Cloudflare)
One typed v4 contract — projected into CRUD · client · UI · cost · docs.
Rendered natively from the v4 document via a semantic IR — the requests-shape, ⛁ cost, signature collisions, effective (composed) shape, and the View-as access projection shown as-is, not flattened to a 3.1 view.
Category
List Category
curl -X GET "/category"
const res = await fetch("/category", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/category")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
[
{
"id": 0,
"name": "string",
"slug": "string"
}
]Create Category
curl -X POST "/category" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","slug":"string"}'const res = await fetch("/category", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"slug": "string"
})
});
const data = await res.json();import requests
res = requests.post("/category", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"slug": "string"
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
{
"id": 0,
"name": "string",
"slug": "string"
}Get Category by id
curl -X GET "/category/:id"
const res = await fetch("/category/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/category/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
{
"id": 0,
"name": "string",
"slug": "string"
}Update Category
curl -X PATCH "/category/:id" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","slug":"string"}'const res = await fetch("/category/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"slug": "string"
})
});
const data = await res.json();import requests
res = requests.patch("/category/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"slug": "string"
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 100pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 80pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
{
"id": 0,
"name": "string",
"slug": "string"
}Delete Category
curl -X DELETE "/category/:id"
const res = await fetch("/category/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/category/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Product
List Product
curl -X GET "/product"
const res = await fetch("/product", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/product")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
[
{
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
}
]Create Product
curl -X POST "/product" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","slug":"string","description":"string","priceCents":0,"categoryId":0,"inventory":0,"imageUrl":"string","status":"draft","stripePriceId":"string"}'const res = await fetch("/product", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
})
});
const data = await res.json();import requests
res = requests.post("/product", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
{
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
}Get Product by id
curl -X GET "/product/:id"
const res = await fetch("/product/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/product/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
{
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
}Update Product
curl -X PATCH "/product/:id" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","slug":"string","description":"string","priceCents":0,"categoryId":0,"inventory":0,"imageUrl":"string","status":"draft","stripePriceId":"string"}'const res = await fetch("/product/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
})
});
const data = await res.json();import requests
res = requests.patch("/product/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 100pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| description | anyOf | |
| priceCents | integer | ≥ 0≤ 1000000000 |
| categoryId | anyOf | |
| inventory | integer | ≥ 0≤ 1000000 |
| imageUrl | anyOf | |
| status | string | "draft" "published" |
| stripePriceId | anyOf |
{
"id": 0,
"name": "string",
"slug": "string",
"description": "string",
"priceCents": 0,
"categoryId": 0,
"inventory": 0,
"imageUrl": "string",
"status": "draft",
"stripePriceId": "string"
}Delete Product
curl -X DELETE "/product/:id"
const res = await fetch("/product/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/product/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Variant
List Variant
curl -X GET "/variant"
const res = await fetch("/variant", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/variant")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
[
{
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
}
]Create Variant
curl -X POST "/variant" \
-H "content-type: application/json" \
-d '{"id":0,"productId":0,"title":"string","priceCents":0,"inventory":0}'const res = await fetch("/variant", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
})
});
const data = await res.json();import requests
res = requests.post("/variant", headers={"content-type": "application/json"}, json={
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
{
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
}Get Variant by id
curl -X GET "/variant/:id"
const res = await fetch("/variant/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/variant/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
{
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
}Update Variant
curl -X PATCH "/variant/:id" \
-H "content-type: application/json" \
-d '{"id":0,"productId":0,"title":"string","priceCents":0,"inventory":0}'const res = await fetch("/variant/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
})
});
const data = await res.json();import requests
res = requests.patch("/variant/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| priceCents | integer | ≥ 0≤ 1000000000 |
| inventory | integer | ≥ 0≤ 1000000 |
{
"id": 0,
"productId": 0,
"title": "string",
"priceCents": 0,
"inventory": 0
}Delete Variant
curl -X DELETE "/variant/:id"
const res = await fetch("/variant/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/variant/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
DiscountCode
List DiscountCode
curl -X GET "/discountCode"
const res = await fetch("/discountCode", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/discountCode")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
[
{
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
}
]Create DiscountCode
curl -X POST "/discountCode" \
-H "content-type: application/json" \
-d '{"id":0,"code":"string","discountType":"percent","discountValue":0,"isActive":false,"currentUses":0,"maxUses":0,"expiresAt":0}'const res = await fetch("/discountCode", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/discountCode", headers={"content-type": "application/json"}, json={
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": False,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
{
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
}Get DiscountCode by id
curl -X GET "/discountCode/:id"
const res = await fetch("/discountCode/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/discountCode/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
{
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
}Update DiscountCode
curl -X PATCH "/discountCode/:id" \
-H "content-type: application/json" \
-d '{"id":0,"code":"string","discountType":"percent","discountValue":0,"isActive":false,"currentUses":0,"maxUses":0,"expiresAt":0}'const res = await fetch("/discountCode/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/discountCode/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": False,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| discountType | string | "percent" "fixed" |
| discountValue | integer | ≥ 0≤ 1000000000 |
| isActive | boolean | |
| currentUses | integer | ≥ 0≤ 1000000000 |
| maxUses | anyOf | |
| expiresAt | anyOf |
{
"id": 0,
"code": "string",
"discountType": "percent",
"discountValue": 0,
"isActive": false,
"currentUses": 0,
"maxUses": 0,
"expiresAt": 0
}Delete DiscountCode
curl -X DELETE "/discountCode/:id"
const res = await fetch("/discountCode/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/discountCode/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Cart
List Cart
curl -X GET "/cart"
const res = await fetch("/cart", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/cart")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
[
{
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
}
]Create Cart
curl -X POST "/cart" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","items":"string","discountCode":"string","status":"active"}'const res = await fetch("/cart", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
})
});
const data = await res.json();import requests
res = requests.post("/cart", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
{
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
}Get Cart by id
curl -X GET "/cart/:id"
const res = await fetch("/cart/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/cart/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
{
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
}Update Cart
curl -X PATCH "/cart/:id" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","items":"string","discountCode":"string","status":"active"}'const res = await fetch("/cart/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
})
});
const data = await res.json();import requests
res = requests.patch("/cart/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| discountCode | anyOf | |
| status | string | "active" "converted" "abandoned" |
{
"id": 0,
"customerId": "string",
"items": "string",
"discountCode": "string",
"status": "active"
}Delete Cart
curl -X DELETE "/cart/:id"
const res = await fetch("/cart/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/cart/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Order
List Order
curl -X GET "/order"
const res = await fetch("/order", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/order")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
[
{
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
}
]Create Order
curl -X POST "/order" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","items":"string","totalCents":0,"status":"pending","discountCode":"string","stripePaymentIntentId":"string","createdAt":0}'const res = await fetch("/order", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/order", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
}Get Order by id
curl -X GET "/order/:id"
const res = await fetch("/order/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/order/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
}Update Order
curl -X PATCH "/order/:id" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","items":"string","totalCents":0,"status":"pending","discountCode":"string","stripePaymentIntentId":"string","createdAt":0}'const res = await fetch("/order/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/order/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| items | string | max len 100000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| totalCents | integer | ≥ 0≤ 100000000000 |
| status | string | "pending" "paid" "shipped" "cancelled" |
| discountCode | anyOf | |
| stripePaymentIntentId | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"customerId": "string",
"items": "string",
"totalCents": 0,
"status": "pending",
"discountCode": "string",
"stripePaymentIntentId": "string",
"createdAt": 0
}Delete Order
curl -X DELETE "/order/:id"
const res = await fetch("/order/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/order/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Review
List Review
curl -X GET "/review"
const res = await fetch("/review", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/review")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
[
{
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
}
]Create Review
curl -X POST "/review" \
-H "content-type: application/json" \
-d '{"id":0,"productId":0,"customerId":"string","rating":0,"title":"string","body":"string","status":"pending","helpfulCount":0,"createdAt":0}'const res = await fetch("/review", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/review", headers={"content-type": "application/json"}, json={
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
{
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
}Get Review by id
curl -X GET "/review/:id"
const res = await fetch("/review/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/review/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
{
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
}Update Review
curl -X PATCH "/review/:id" \
-H "content-type: application/json" \
-d '{"id":0,"productId":0,"customerId":"string","rating":0,"title":"string","body":"string","status":"pending","helpfulCount":0,"createdAt":0}'const res = await fetch("/review/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/review/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| productId* | integer | ≥ 1≤ 1000000000000 |
| customerId | anyOf | |
| rating | integer | ≥ 1≤ 5 |
| title* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| body | anyOf | |
| status | string | "pending" "published" |
| helpfulCount | integer | ≥ 0≤ 1000000000 |
| createdAt | anyOf |
{
"id": 0,
"productId": 0,
"customerId": "string",
"rating": 0,
"title": "string",
"body": "string",
"status": "pending",
"helpfulCount": 0,
"createdAt": 0
}Delete Review
curl -X DELETE "/review/:id"
const res = await fetch("/review/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/review/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
WishlistItem
List WishlistItem
curl -X GET "/wishlistItem"
const res = await fetch("/wishlistItem", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/wishlistItem")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
[
{
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
}
]Create WishlistItem
curl -X POST "/wishlistItem" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","productId":0,"variantId":0,"addedAt":0}'const res = await fetch("/wishlistItem", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/wishlistItem", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
{
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
}Get WishlistItem by id
curl -X GET "/wishlistItem/:id"
const res = await fetch("/wishlistItem/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/wishlistItem/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
{
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
}Update WishlistItem
curl -X PATCH "/wishlistItem/:id" \
-H "content-type: application/json" \
-d '{"id":0,"customerId":"string","productId":0,"variantId":0,"addedAt":0}'const res = await fetch("/wishlistItem/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/wishlistItem/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| customerId | anyOf | |
| productId* | integer | ≥ 1≤ 1000000000000 |
| variantId | anyOf | |
| addedAt | anyOf |
{
"id": 0,
"customerId": "string",
"productId": 0,
"variantId": 0,
"addedAt": 0
}Delete WishlistItem
curl -X DELETE "/wishlistItem/:id"
const res = await fetch("/wishlistItem/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/wishlistItem/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Post
List Post
curl -X GET "/post"
const res = await fetch("/post", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/post")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
[
{
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
}
]Create Post
curl -X POST "/post" \
-H "content-type: application/json" \
-d '{"id":0,"title":"string","slug":"string","excerpt":"string","body":"string","status":"draft","publishedAt":0,"authorId":"string","coverImageUrl":"string"}'const res = await fetch("/post", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
})
});
const data = await res.json();import requests
res = requests.post("/post", headers={"content-type": "application/json"}, json={
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
{
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
}Get Post by id
curl -X GET "/post/:id"
const res = await fetch("/post/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/post/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
{
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
}Update Post
curl -X PATCH "/post/:id" \
-H "content-type: application/json" \
-d '{"id":0,"title":"string","slug":"string","excerpt":"string","body":"string","status":"draft","publishedAt":0,"authorId":"string","coverImageUrl":"string"}'const res = await fetch("/post/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
})
});
const data = await res.json();import requests
res = requests.patch("/post/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| title* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| slug* | string | max len 120pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| excerpt | anyOf | |
| body | anyOf | |
| status | string | "draft" "published" |
| publishedAt | anyOf | |
| authorId | anyOf | |
| coverImageUrl | anyOf |
{
"id": 0,
"title": "string",
"slug": "string",
"excerpt": "string",
"body": "string",
"status": "draft",
"publishedAt": 0,
"authorId": "string",
"coverImageUrl": "string"
}Delete Post
curl -X DELETE "/post/:id"
const res = await fetch("/post/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/post/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Faq
List Faq
curl -X GET "/faq"
const res = await fetch("/faq", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/faq")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
[
{
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
}
]Create Faq
curl -X POST "/faq" \
-H "content-type: application/json" \
-d '{"id":0,"question":"string","answer":"string","sortOrder":0,"isActive":false}'const res = await fetch("/faq", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
})
});
const data = await res.json();import requests
res = requests.post("/faq", headers={"content-type": "application/json"}, json={
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": False
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
{
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
}Get Faq by id
curl -X GET "/faq/:id"
const res = await fetch("/faq/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/faq/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
{
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
}Update Faq
curl -X PATCH "/faq/:id" \
-H "content-type: application/json" \
-d '{"id":0,"question":"string","answer":"string","sortOrder":0,"isActive":false}'const res = await fetch("/faq/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
})
});
const data = await res.json();import requests
res = requests.patch("/faq/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": False
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| question* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| answer* | string | max len 2000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| sortOrder | integer | ≥ 0≤ 100000 |
| isActive | boolean |
{
"id": 0,
"question": "string",
"answer": "string",
"sortOrder": 0,
"isActive": false
}Delete Faq
curl -X DELETE "/faq/:id"
const res = await fetch("/faq/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/faq/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
NewsletterSubscriber
List NewsletterSubscriber
curl -X GET "/newsletterSubscriber"
const res = await fetch("/newsletterSubscriber", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/newsletterSubscriber")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
[
{
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
}
]Create NewsletterSubscriber
curl -X POST "/newsletterSubscriber" \
-H "content-type: application/json" \
-d '{"id":0,"email":"user@example.com","subscribedAt":0}'const res = await fetch("/newsletterSubscriber", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/newsletterSubscriber", headers={"content-type": "application/json"}, json={
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
{
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
}Get NewsletterSubscriber by id
curl -X GET "/newsletterSubscriber/:id"
const res = await fetch("/newsletterSubscriber/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/newsletterSubscriber/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
{
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
}Update NewsletterSubscriber
curl -X PATCH "/newsletterSubscriber/:id" \
-H "content-type: application/json" \
-d '{"id":0,"email":"user@example.com","subscribedAt":0}'const res = await fetch("/newsletterSubscriber/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/newsletterSubscriber/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subscribedAt | anyOf |
{
"id": 0,
"email": "user@example.com",
"subscribedAt": 0
}Delete NewsletterSubscriber
curl -X DELETE "/newsletterSubscriber/:id"
const res = await fetch("/newsletterSubscriber/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/newsletterSubscriber/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
ContactSubmission
List ContactSubmission
curl -X GET "/contactSubmission"
const res = await fetch("/contactSubmission", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/contactSubmission")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
[
{
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
}
]Create ContactSubmission
curl -X POST "/contactSubmission" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","email":"user@example.com","subject":"string","message":"string","createdAt":0}'const res = await fetch("/contactSubmission", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/contactSubmission", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
{
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
}Get ContactSubmission by id
curl -X GET "/contactSubmission/:id"
const res = await fetch("/contactSubmission/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/contactSubmission/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
{
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
}Update ContactSubmission
curl -X PATCH "/contactSubmission/:id" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","email":"user@example.com","subject":"string","message":"string","createdAt":0}'const res = await fetch("/contactSubmission/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/contactSubmission/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| email* | string<email> | pattern ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ |
| subject* | string | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
| message* | string | max len 5000pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]*$ |
| createdAt | anyOf |
{
"id": 0,
"name": "string",
"email": "user@example.com",
"subject": "string",
"message": "string",
"createdAt": 0
}Delete ContactSubmission
curl -X DELETE "/contactSubmission/:id"
const res = await fetch("/contactSubmission/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/contactSubmission/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Media
List Media
curl -X GET "/media"
const res = await fetch("/media", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/media")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
[
{
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
}
]Create Media
curl -X POST "/media" \
-H "content-type: application/json" \
-d '{"id":0,"url":"string","alt":"string","width":0,"height":0}'const res = await fetch("/media", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
})
});
const data = await res.json();import requests
res = requests.post("/media", headers={"content-type": "application/json"}, json={
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
{
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
}Get Media by id
curl -X GET "/media/:id"
const res = await fetch("/media/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/media/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
{
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
}Update Media
curl -X PATCH "/media/:id" \
-H "content-type: application/json" \
-d '{"id":0,"url":"string","alt":"string","width":0,"height":0}'const res = await fetch("/media/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
})
});
const data = await res.json();import requests
res = requests.patch("/media/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| url* | string<uri> | |
| alt* | string | max len 300pattern ^[^<>\u0000-\u001f\u007f]*$ |
| width | anyOf | |
| height | anyOf |
{
"id": 0,
"url": "string",
"alt": "string",
"width": 0,
"height": 0
}Delete Media
curl -X DELETE "/media/:id"
const res = await fetch("/media/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/media/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
ApiToken
List ApiToken
curl -X GET "/apiToken"
const res = await fetch("/apiToken", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/apiToken")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
[
{
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
}
]Create ApiToken
curl -X POST "/apiToken" \
-H "content-type: application/json" \
-d '{"id":0,"userId":"string","name":"string","prefix":"string","hashedKey":"string","createdAt":0,"lastUsedAt":0,"revokedAt":0}'const res = await fetch("/apiToken", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/apiToken", headers={"content-type": "application/json"}, json={
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
{
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
}Get ApiToken by id
curl -X GET "/apiToken/:id"
const res = await fetch("/apiToken/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/apiToken/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
{
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
}Update ApiToken
curl -X PATCH "/apiToken/:id" \
-H "content-type: application/json" \
-d '{"id":0,"userId":"string","name":"string","prefix":"string","hashedKey":"string","createdAt":0,"lastUsedAt":0,"revokedAt":0}'const res = await fetch("/apiToken/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/apiToken/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| userId | anyOf | |
| name* | string | max len 120pattern ^[^<>\u0000-\u001f\u007f]*$ |
| prefix* | string | max len 20pattern ^[^<>\u0000-\u001f\u007f]*$ |
| hashedKey* | string | max len 128pattern ^[a-f0-9]+$ |
| createdAt | anyOf | |
| lastUsedAt | anyOf | |
| revokedAt | anyOf |
{
"id": 0,
"userId": "string",
"name": "string",
"prefix": "string",
"hashedKey": "string",
"createdAt": 0,
"lastUsedAt": 0,
"revokedAt": 0
}Delete ApiToken
curl -X DELETE "/apiToken/:id"
const res = await fetch("/apiToken/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/apiToken/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
BillingAccount
List BillingAccount
curl -X GET "/billingAccount"
const res = await fetch("/billingAccount", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/billingAccount")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
[
{
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
}
]Create BillingAccount
curl -X POST "/billingAccount" \
-H "content-type: application/json" \
-d '{"id":0,"principal":"string","stripeCustomerId":"string","subscriptionId":"string","lastReportedMicroUsd":0,"lastReportedAt":0,"createdAt":0}'const res = await fetch("/billingAccount", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.post("/billingAccount", headers={"content-type": "application/json"}, json={
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
}Get BillingAccount by id
curl -X GET "/billingAccount/:id"
const res = await fetch("/billingAccount/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/billingAccount/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
}Update BillingAccount
curl -X PATCH "/billingAccount/:id" \
-H "content-type: application/json" \
-d '{"id":0,"principal":"string","stripeCustomerId":"string","subscriptionId":"string","lastReportedMicroUsd":0,"lastReportedAt":0,"createdAt":0}'const res = await fetch("/billingAccount/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
})
});
const data = await res.json();import requests
res = requests.patch("/billingAccount/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| principal* | string | max len 128pattern ^[^<>\u0000-\u001f\u007f]*$ |
| stripeCustomerId | anyOf | |
| subscriptionId | anyOf | |
| lastReportedMicroUsd | anyOf | |
| lastReportedAt | anyOf | |
| createdAt | anyOf |
{
"id": 0,
"principal": "string",
"stripeCustomerId": "string",
"subscriptionId": "string",
"lastReportedMicroUsd": 0,
"lastReportedAt": 0,
"createdAt": 0
}Delete BillingAccount
curl -X DELETE "/billingAccount/:id"
const res = await fetch("/billingAccount/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/billingAccount/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Project
List Project
curl -X GET "/project"
const res = await fetch("/project", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/project")
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
[
{
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
}
]Create Project
curl -X POST "/project" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","ownerId":"string","status":"active"}'const res = await fetch("/project", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
})
});
const data = await res.json();import requests
res = requests.post("/project", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
})
data = res.json()| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
{
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
}Get Project by id
curl -X GET "/project/:id"
const res = await fetch("/project/:id", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/project/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
{
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
}Update Project
curl -X PATCH "/project/:id" \
-H "content-type: application/json" \
-d '{"id":0,"name":"string","ownerId":"string","status":"active"}'const res = await fetch("/project/:id", {
method: "PATCH",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
})
});
const data = await res.json();import requests
res = requests.patch("/project/:id", headers={"content-type": "application/json"}, json={
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
})
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
| field | type | notes |
|---|---|---|
| id | integer | ≥ -9007199254740991≤ 9007199254740991 |
| name* | string | max len 160pattern ^[^<>\u0000-\u001f\u007f]*$ |
| ownerId | anyOf | |
| status | string | "active" "archived" |
{
"id": 0,
"name": "string",
"ownerId": "string",
"status": "active"
}Delete Project
curl -X DELETE "/project/:id"
const res = await fetch("/project/:id", {
method: "DELETE"
});
const data = await res.json();import requests
res = requests.delete("/project/:id")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
Operations
Create an order from a cart (apply discount, total)
curl -X POST "/checkout/order" \
-H "content-type: application/json" \
-d '{"cartId":0,"items":[{"productId":0,"qty":0,"priceCents":0}],"discountCode":"string"}'const res = await fetch("/checkout/order", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"cartId": 0,
"items": [
{
"productId": 0,
"qty": 0,
"priceCents": 0
}
],
"discountCode": "string"
})
});
const data = await res.json();import requests
res = requests.post("/checkout/order", headers={"content-type": "application/json"}, json={
"cartId": 0,
"items": [
{
"productId": 0,
"qty": 0,
"priceCents": 0
}
],
"discountCode": "string"
})
data = res.json()| field | type | notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cartId | integer | ≥ 1≤ 1000000000000 | ||||||||||||
| items | array | max items 200 array of
| ||||||||||||
| discountCode | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
{}Validate a discount code
curl -X POST "/discount/validate" \
-H "content-type: application/json" \
-d '{"code":"string","subtotalCents":0}'const res = await fetch("/discount/validate", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"code": "string",
"subtotalCents": 0
})
});
const data = await res.json();import requests
res = requests.post("/discount/validate", headers={"content-type": "application/json"}, json={
"code": "string",
"subtotalCents": 0
})
data = res.json()| field | type | notes |
|---|---|---|
| code* | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
| subtotalCents | integer | ≥ 0≤ 100000000000 |
{}Search products + blog posts
curl -X GET "/search?q="
const res = await fetch("/search?q=", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/search?q=")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| q | string max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ | max len 200pattern ^[^<>\u0000-\u001f\u007f]*$ |
{}Mark a review helpful (+1)
curl -X POST "/review/:id/helpful"
const res = await fetch("/review/:id/helpful", {
method: "POST"
});
const data = await res.json();import requests
res = requests.post("/review/:id/helpful")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
{}Store summary (orders, revenue, customers)
curl -X GET "/analytics/summary"
const res = await fetch("/analytics/summary", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/analytics/summary")
data = res.json(){}Revenue per day (last 30d)
curl -X GET "/analytics/revenue"
const res = await fetch("/analytics/revenue", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/analytics/revenue")
data = res.json(){}Best-selling products
curl -X GET "/analytics/top-products"
const res = await fetch("/analytics/top-products", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/analytics/top-products")
data = res.json(){}Related products
curl -X GET "/recommendations/:productId"
const res = await fetch("/recommendations/:productId", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/recommendations/:productId")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| productId* | string max len 16pattern ^[0-9]+$ | max len 16pattern ^[0-9]+$ |
{}Subscribe to the newsletter (idempotent)
curl -X POST "/newsletter/subscribe" \
-H "content-type: application/json" \
-d '{"email":"user@example.com"}'const res = await fetch("/newsletter/subscribe", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"email": "user@example.com"
})
});
const data = await res.json();import requests
res = requests.post("/newsletter/subscribe", headers={"content-type": "application/json"}, json={
"email": "user@example.com"
})
data = res.json()| field | type | notes |
|---|---|---|
| email* | string<email> | max len 254 |
{}Deterministic identicon SVG
curl -X GET "/avatar?seed="
const res = await fetch("/avatar?seed=", {
method: "GET"
});
const data = await res.json();import requests
res = requests.get("/avatar?seed=")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| seed | string max len 100pattern ^[\w .@-]{0,100}$ | max len 100pattern ^[\w .@-]{0,100}$ |
"string"
Create an API token (returns the secret ONCE)
curl -X POST "/tokens/create" \
-H "content-type: application/json" \
-d '{"name":"string"}'const res = await fetch("/tokens/create", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"name": "string"
})
});
const data = await res.json();import requests
res = requests.post("/tokens/create", headers={"content-type": "application/json"}, json={
"name": "string"
})
data = res.json()| field | type | notes |
|---|---|---|
| name* | string | max len 80pattern ^[^<>\u0000-\u001f\u007f]*$ |
{}Revoke an API token
curl -X POST "/tokens/:id/revoke"
const res = await fetch("/tokens/:id/revoke", {
method: "POST"
});
const data = await res.json();import requests
res = requests.post("/tokens/:id/revoke")
data = res.json()| name | type | notes | value |
|---|---|---|---|
| id* | string max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ | max len 1024pattern ^[^\u0000-\u0008\u000b\u000c\u000e-\u001f]*$ |
{}Create a pending order + a Stripe Checkout Session (returns the hosted URL)
curl -X POST "/checkout/pay" \
-H "content-type: application/json" \
-d '{"items":[{"productId":0,"qty":0}],"discountCode":"string"}'const res = await fetch("/checkout/pay", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"items": [
{
"productId": 0,
"qty": 0
}
],
"discountCode": "string"
})
});
const data = await res.json();import requests
res = requests.post("/checkout/pay", headers={"content-type": "application/json"}, json={
"items": [
{
"productId": 0,
"qty": 0
}
],
"discountCode": "string"
})
data = res.json()| field | type | notes | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| items | array | max items 200 array of
| |||||||||
| discountCode | string | max len 40pattern ^[A-Z0-9][A-Z0-9_-]*$ |
{}Confirm payment by retrieving the Stripe session; mark the order paid
curl -X POST "/checkout/confirm" \
-H "content-type: application/json" \
-d '{"orderId":0,"sessionId":"string"}'const res = await fetch("/checkout/confirm", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"orderId": 0,
"sessionId": "string"
})
});
const data = await res.json();import requests
res = requests.post("/checkout/confirm", headers={"content-type": "application/json"}, json={
"orderId": 0,
"sessionId": "string"
})
data = res.json()| field | type | notes |
|---|---|---|
| orderId* | integer | ≥ 1≤ 1000000000000 |
| sessionId* | string | max len 255pattern ^[A-Za-z0-9_]+$ |
{}Start usage-based billing: a Stripe customer + a metered subscription
curl -X POST "/billing/connect" \
-H "content-type: application/json" \
-d '{"email":"user@example.com"}'const res = await fetch("/billing/connect", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({
"email": "user@example.com"
})
});
const data = await res.json();import requests
res = requests.post("/billing/connect", headers={"content-type": "application/json"}, json={
"email": "user@example.com"
})
data = res.json()| field | type | notes |
|---|---|---|
| string<email> | max len 254 |
{}Report your accrued @suluk/cost usage to the Stripe Billing Meter
curl -X POST "/billing/report" \
-H "content-type: application/json" \
-d '{}'const res = await fetch("/billing/report", {
method: "POST",
headers: {
"content-type": "application/json"
},
body: JSON.stringify({})
});
const data = await res.json();import requests
res = requests.post("/billing/report", headers={"content-type": "application/json"}, json={})
data = res.json(){}One contract → every layer
The same v4 contract is not a document but a function — it projects into each layer below. Change the contract, and all of them change.
Hardening — input-validation grade 🛡 A 100/100
Untrusted input is the attack surface. Every string wants a maxLength + a pattern (a character allowlist), every number a maximum, every array a maxItems, every object closed (additionalProperties:false) + typed, and no any/unknown — so malformed or oversized input can't break the system. 0 high · 0 medium · 0 low findings.
✓ every input is fully bounded — grade A.
Cost Explorer + Workflow Calculator
Every operation by declared cost + source (a contract fact, not telemetry). Tick a sequence of operations to build a WORKFLOW — see its cumulative cost + per-source breakdown + a monthly projection. Budget a user journey before you build it. No 3.x tool models cost at all.
| operation | cost ⇅ | compute | db-read | db-write | |
|---|---|---|---|---|---|
| payCheckout | $0.00019 190µ$ | 100µ$ | 90µ$ | ||
| checkout | $0.00018 180µ$ | 100µ$ | 80µ$ | ||
| createOrder | $0.00016 160µ$ | 100µ$ | 60µ$ | ||
| updateOrder | $0.00016 160µ$ | 100µ$ | 60µ$ | ||
| connectBilling | $0.00016 160µ$ | 100µ$ | 60µ$ | ||
| createProduct | $0.000145 145µ$ | 100µ$ | 45µ$ | ||
| updateProduct | $0.000145 145µ$ | 100µ$ | 45µ$ | ||
| createPost | $0.000145 145µ$ | 100µ$ | 45µ$ | ||
| updatePost | $0.000145 145µ$ | 100µ$ | 45µ$ | ||
| createReview | $0.00014 140µ$ | 100µ$ | 40µ$ | ||
| updateReview | $0.00014 140µ$ | 100µ$ | 40µ$ | ||
| createProject | $0.00014 140µ$ | 100µ$ | 40µ$ | ||
| updateProject | $0.00014 140µ$ | 100µ$ | 40µ$ | ||
| reportUsage | $0.00014 140µ$ | 100µ$ | 40µ$ | ||
| deleteOrder | $0.000136 136µ$ | 100µ$ | 36µ$ | ||
| createCart | $0.000135 135µ$ | 100µ$ | 35µ$ | ||
| updateCart | $0.000135 135µ$ | 100µ$ | 35µ$ | ||
| createCategory | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| updateCategory | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| createVariant | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| updateVariant | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| createDiscountCode | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| updateDiscountCode | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| createApiToken | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| updateApiToken | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| createBillingAccount | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| updateBillingAccount | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| createToken | $0.00013 130µ$ | 100µ$ | 30µ$ | ||
| deleteProduct | $0.000127 127µ$ | 100µ$ | 27µ$ | ||
| deletePost | $0.000127 127µ$ | 100µ$ | 27µ$ | ||
| createWishlistItem | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| updateWishlistItem | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| createFaq | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| updateFaq | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| createMedia | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| updateMedia | $0.000125 125µ$ | 100µ$ | 25µ$ | ||
| deleteReview | $0.000124 124µ$ | 100µ$ | 24µ$ | ||
| deleteProject | $0.000124 124µ$ | 100µ$ | 24µ$ | ||
| deleteCart | $0.000121 121µ$ | 100µ$ | 21µ$ | ||
| createNewsletterSubscriber | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| updateNewsletterSubscriber | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| createContactSubmission | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| updateContactSubmission | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| markReviewHelpful | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| subscribeNewsletter | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| revokeToken | $0.00012 120µ$ | 100µ$ | 20µ$ | ||
| deleteCategory | $0.000118 118µ$ | 100µ$ | 18µ$ | ||
| deleteVariant | $0.000118 118µ$ | 100µ$ | 18µ$ | ||
| deleteDiscountCode | $0.000118 118µ$ | 100µ$ | 18µ$ | ||
| deleteApiToken | $0.000118 118µ$ | 100µ$ | 18µ$ | ||
| deleteBillingAccount | $0.000118 118µ$ | 100µ$ | 18µ$ | ||
| deleteWishlistItem | $0.000115 115µ$ | 100µ$ | 15µ$ | ||
| deleteFaq | $0.000115 115µ$ | 100µ$ | 15µ$ | ||
| deleteNewsletterSubscriber | $0.000115 115µ$ | 100µ$ | 15µ$ | ||
| deleteContactSubmission | $0.000115 115µ$ | 100µ$ | 15µ$ | ||
| deleteMedia | $0.000115 115µ$ | 100µ$ | 15µ$ | ||
| confirmCheckout | 30 µ$ 30µ$ | 30µ$ | |||
| analyticsTopProducts | 24 µ$ 24µ$ | 24µ$ | |||
| analyticsSummary | 20 µ$ 20µ$ | 20µ$ | |||
| analyticsRevenue | 20 µ$ 20µ$ | 20µ$ | |||
| recommendRelated | 16 µ$ 16µ$ | 16µ$ | |||
| search | 14 µ$ 14µ$ | 14µ$ | |||
| listOrder | 12 µ$ 12µ$ | 12µ$ | |||
| getOrder | 12 µ$ 12µ$ | 12µ$ | |||
| listProject | 12 µ$ 12µ$ | 12µ$ | |||
| getProject | 12 µ$ 12µ$ | 12µ$ | |||
| listProduct | 10 µ$ 10µ$ | 10µ$ | |||
| getProduct | 10 µ$ 10µ$ | 10µ$ | |||
| listCart | 10 µ$ 10µ$ | 10µ$ | |||
| getCart | 10 µ$ 10µ$ | 10µ$ | |||
| validateDiscount | 10 µ$ 10µ$ | 10µ$ | |||
| listCategory | 8 µ$ 8µ$ | 8µ$ | |||
| getCategory | 8 µ$ 8µ$ | 8µ$ | |||
| listVariant | 8 µ$ 8µ$ | 8µ$ | |||
| getVariant | 8 µ$ 8µ$ | 8µ$ | |||
| listDiscountCode | 8 µ$ 8µ$ | 8µ$ | |||
| getDiscountCode | 8 µ$ 8µ$ | 8µ$ | |||
| listReview | 8 µ$ 8µ$ | 8µ$ | |||
| getReview | 8 µ$ 8µ$ | 8µ$ | |||
| listWishlistItem | 8 µ$ 8µ$ | 8µ$ | |||
| getWishlistItem | 8 µ$ 8µ$ | 8µ$ | |||
| listPost | 8 µ$ 8µ$ | 8µ$ | |||
| getPost | 8 µ$ 8µ$ | 8µ$ | |||
| listApiToken | 8 µ$ 8µ$ | 8µ$ | |||
| getApiToken | 8 µ$ 8µ$ | 8µ$ | |||
| listBillingAccount | 8 µ$ 8µ$ | 8µ$ | |||
| getBillingAccount | 8 µ$ 8µ$ | 8µ$ | |||
| listFaq | 6 µ$ 6µ$ | 6µ$ | |||
| getFaq | 6 µ$ 6µ$ | 6µ$ | |||
| listNewsletterSubscriber | 6 µ$ 6µ$ | 6µ$ | |||
| getNewsletterSubscriber | 6 µ$ 6µ$ | 6µ$ | |||
| listContactSubmission | 6 µ$ 6µ$ | 6µ$ | |||
| getContactSubmission | 6 µ$ 6µ$ | 6µ$ | |||
| listMedia | 6 µ$ 6µ$ | 6µ$ | |||
| getMedia | 6 µ$ 6µ$ | 6µ$ | |||
| generateAvatar | 2 µ$ 2µ$ | 2µ$ |
ADA Resolution Playground
v4 dispatches a request to a NAMED operation by its computed signature, not by method+path (which need not be unique). Enter a request and watch it resolve — uniquely, to a collision, or to a runtime-dependent set. A question 3.x never had to ask.
Reachability — the contract refracted per viewer
Access is a contract facet (x-suluk-access). ● full · ◐ own rows only · · not reachable. The View as lens recomputes the visible operation set from this.
| operation | requires | Anonymous | Signed-in user | Admin |
|---|---|---|---|---|
| listCategory | anyone | ● | ● | ● |
| createCategory | admin | · | · | ● |
| getCategory | anyone | ● | ● | ● |
| updateCategory | admin | · | · | ● |
| deleteCategory | admin | · | · | ● |
| listProduct | anyone | ● | ● | ● |
| createProduct | admin | · | · | ● |
| getProduct | anyone | ● | ● | ● |
| updateProduct | admin | · | · | ● |
| deleteProduct | admin | · | · | ● |
| listVariant | anyone | ● | ● | ● |
| createVariant | admin | · | · | ● |
| getVariant | anyone | ● | ● | ● |
| updateVariant | admin | · | · | ● |
| deleteVariant | admin | · | · | ● |
| listDiscountCode | admin | · | · | ● |
| createDiscountCode | admin | · | · | ● |
| getDiscountCode | admin | · | · | ● |
| updateDiscountCode | admin | · | · | ● |
| deleteDiscountCode | admin | · | · | ● |
| listCart | authenticated · own | · | ◐ | ● |
| createCart | authenticated · own | · | ◐ | ● |
| getCart | authenticated · own | · | ◐ | ● |
| updateCart | authenticated · own | · | ◐ | ● |
| deleteCart | authenticated · own | · | ◐ | ● |
| listOrder | authenticated · own | · | ◐ | ● |
| createOrder | authenticated · own | · | ◐ | ● |
| getOrder | authenticated · own | · | ◐ | ● |
| updateOrder | admin | · | · | ● |
| deleteOrder | admin | · | · | ● |
| listReview | anyone | ● | ● | ● |
| createReview | authenticated · own | · | ◐ | ● |
| getReview | anyone | ● | ● | ● |
| updateReview | authenticated · own | · | ◐ | ● |
| deleteReview | authenticated · own | · | ◐ | ● |
| listWishlistItem | authenticated · own | · | ◐ | ● |
| createWishlistItem | authenticated · own | · | ◐ | ● |
| getWishlistItem | authenticated · own | · | ◐ | ● |
| updateWishlistItem | authenticated · own | · | ◐ | ● |
| deleteWishlistItem | authenticated · own | · | ◐ | ● |
| listPost | anyone | ● | ● | ● |
| createPost | admin | · | · | ● |
| getPost | anyone | ● | ● | ● |
| updatePost | admin | · | · | ● |
| deletePost | admin | · | · | ● |
| listFaq | anyone | ● | ● | ● |
| createFaq | admin | · | · | ● |
| getFaq | anyone | ● | ● | ● |
| updateFaq | admin | · | · | ● |
| deleteFaq | admin | · | · | ● |
| listNewsletterSubscriber | admin | · | · | ● |
| createNewsletterSubscriber | anyone | ● | ● | ● |
| getNewsletterSubscriber | admin | · | · | ● |
| updateNewsletterSubscriber | admin | · | · | ● |
| deleteNewsletterSubscriber | admin | · | · | ● |
| listContactSubmission | admin | · | · | ● |
| createContactSubmission | anyone | ● | ● | ● |
| getContactSubmission | admin | · | · | ● |
| updateContactSubmission | admin | · | · | ● |
| deleteContactSubmission | admin | · | · | ● |
| listMedia | anyone | ● | ● | ● |
| createMedia | admin | · | · | ● |
| getMedia | anyone | ● | ● | ● |
| updateMedia | admin | · | · | ● |
| deleteMedia | admin | · | · | ● |
| listApiToken | authenticated · own | · | ◐ | ● |
| createApiToken | authenticated · own | · | ◐ | ● |
| getApiToken | authenticated · own | · | ◐ | ● |
| updateApiToken | authenticated · own | · | ◐ | ● |
| deleteApiToken | authenticated · own | · | ◐ | ● |
| listBillingAccount | authenticated · own | · | ◐ | ● |
| createBillingAccount | admin | · | · | ● |
| getBillingAccount | authenticated · own | · | ◐ | ● |
| updateBillingAccount | admin | · | · | ● |
| deleteBillingAccount | admin | · | · | ● |
| listProject | authenticated · own | · | ◐ | ● |
| createProject | authenticated · own | · | ◐ | ● |
| getProject | authenticated · own | · | ◐ | ● |
| updateProject | authenticated · own | · | ◐ | ● |
| deleteProject | authenticated · own | · | ◐ | ● |
| checkout | anyone | ● | ● | ● |
| validateDiscount | anyone | ● | ● | ● |
| search | anyone | ● | ● | ● |
| markReviewHelpful | authenticated | · | ● | ● |
| analyticsSummary | admin | · | · | ● |
| analyticsRevenue | admin | · | · | ● |
| analyticsTopProducts | admin | · | · | ● |
| recommendRelated | anyone | ● | ● | ● |
| subscribeNewsletter | anyone | ● | ● | ● |
| generateAvatar | anyone | ● | ● | ● |
| createToken | anyone | ● | ● | ● |
| revokeToken | authenticated · own | · | ◐ | ● |
| payCheckout | anyone | ● | ● | ● |
| confirmCheckout | anyone | ● | ● | ● |
| connectBilling | authenticated | · | ● | ● |
| reportUsage | authenticated · own | · | ◐ | ● |