Content
Pages, blogs, articles, menus, redirects and policies. Every example sets SOOQUNA_TOKEN from the environment; see authentication. Responses are from a test store, cut to two items per list.
| Endpoint | Method | Path |
|---|---|---|
| Create a page | POST | /pages |
| List pages | GET | /pages |
| Get a page | GET | /pages/{id} |
| Update a page | PUT | /pages/{id} |
| Show, hide or delete many pages | POST | /pages/bulk |
| Create a blog | POST | /blogs |
| List blogs | GET | /blogs |
| Update a blog | PUT | /blogs/{id} |
| Create a blog post | POST | /articles |
| List blog posts | GET | /articles |
| Get a blog post | GET | /articles/{id} |
| Update a blog post | PUT | /articles/{id} |
| Delete many blog posts | POST | /articles/bulk |
| Delete a blog and its posts | DELETE | /blogs/{id} |
| Create a navigation menu | POST | /menus |
| List navigation menus | GET | /menus |
| Get a navigation menu | GET | /menus/{id} |
| Update a navigation menu | PUT | /menus/{id} |
| Delete a navigation menu | DELETE | /menus/{id} |
| List store policies | GET | /policies |
| Update a store policy | PUT | /policies/{kind} |
| Create a URL redirect | POST | /redirects |
| List URL redirects | GET | /redirects |
| Update a URL redirect | PUT | /redirects/{id} |
| Delete URL redirects | POST | /redirects/delete |
Create a page
Section titled “Create a page”POST /pages · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/pages" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "visible": true, "seo_description": "Our story."}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/pages", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "visible": true, "seo_description": "Our story." }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/pages", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "visible": True, "seo_description": "Our story.", },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/pages');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'title' => 'About us', 'body_html' => '<p>A family-run abaya house in Doha since 2009.</p>', 'visible' => true, 'seo_description' => 'Our story.', ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "visible": true, "seo_description": "Our story."}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/pages", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/pages");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "visible": true, "seo_description": "Our story."}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "author": "Docs", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "created_at": "2026-10-18T09:30:00Z", "custom_page_name": "", "handle": "about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "Our story.", "seo_title": "", "template_suffix": "", "title": "About us", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true}List pages
Section titled “List pages”GET /pages · Scope: read_content
| Parameter | In | Description |
|---|---|---|
visibility |
query | For example visible. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/pages?visibility=visible");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "author": "Docs", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "created_at": "2026-10-18T09:30:00Z", "custom_page_name": "", "handle": "about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "Our story.", "seo_title": "", "template_suffix": "", "title": "About us", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true } ], "total": 1}Get a page
Section titled “Get a page”GET /pages/{id} · Scope: read_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "author": "Docs", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "created_at": "2026-10-18T09:30:00Z", "custom_page_name": "", "handle": "about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "Our story.", "seo_title": "", "template_suffix": "", "title": "About us", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true}Update a page
Section titled “Update a page”PUT /pages/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "custom_page_name": "", "visible": true, "version": 1}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "custom_page_name": "", "visible": true, "version": 1 }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "custom_page_name": "", "visible": True, "version": 1, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'title' => 'About us', 'body_html' => '<p>A family-run abaya house in Doha since 2009.</p>', 'custom_page_name' => '', 'visible' => true, 'version' => 1, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "custom_page_name": "", "visible": true, "version": 1}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/pages/0193a1b2-c3d4-7e5f-8a6b-000000000029");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "title": "About us", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "custom_page_name": "", "visible": true, "version": 1}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "author": "Docs", "body_html": "<p>A family-run abaya house in Doha since 2009.</p>", "created_at": "2026-10-18T09:30:00Z", "custom_page_name": "", "handle": "about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "", "seo_title": "", "template_suffix": "", "title": "About us", "updated_at": "2026-10-18T09:30:00Z", "version": 2, "visible": true}Show, hide or delete many pages
Section titled “Show, hide or delete many pages”POST /pages/bulk · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/pages/bulk" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"action": "hide", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000029"]}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/pages/bulk", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"action": "hide", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000029"]}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/pages/bulk", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={"action": "hide", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000029"]},)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/pages/bulk');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'action' => 'hide', 'ids' => ['0193a1b2-c3d4-7e5f-8a6b-000000000029'], ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"action": "hide", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000029"]}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/pages/bulk", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/pages/bulk");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"action": "hide", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000029"]}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{"ok": true}Create a blog
Section titled “Create a blog”POST /blogs · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/blogs" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "Journal", "comments": "moderated"}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/blogs", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"title": "Journal", "comments": "moderated"}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/blogs", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={"title": "Journal", "comments": "moderated"},)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/blogs');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode(['title' => 'Journal', 'comments' => 'moderated'], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"title": "Journal", "comments": "moderated"}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/blogs", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/blogs");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"title": "Journal", "comments": "moderated"}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "articles_count": 0, "comments": "moderated", "created_at": "2026-10-18T09:30:00Z", "handle": "journal", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "seo_description": "", "seo_title": "", "template_suffix": "", "title": "Journal", "updated_at": "2026-10-18T09:30:00Z", "version": 1}List blogs
Section titled “List blogs”GET /blogs · Scope: read_content
curl -X GET "https://api.sooquna.com/admin/api/2026-10/blogs" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/blogs", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/blogs", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/blogs');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/blogs", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/blogs");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "articles_count": 0, "comments": "moderated", "created_at": "2026-10-18T09:30:00Z", "handle": "journal", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "seo_description": "", "seo_title": "", "template_suffix": "", "title": "Journal", "updated_at": "2026-10-18T09:30:00Z", "version": 1 } ]}Update a blog
Section titled “Update a blog”PUT /blogs/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"title": "Journal", "comments": "disabled", "version": 1}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"title": "Journal", "comments": "disabled", "version": 1}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={"title": "Journal", "comments": "disabled", "version": 1},)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode(['title' => 'Journal', 'comments' => 'disabled', 'version' => 1], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"title": "Journal", "comments": "disabled", "version": 1}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"title": "Journal", "comments": "disabled", "version": 1}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "articles_count": 0, "comments": "disabled", "created_at": "2026-10-18T09:30:00Z", "handle": "journal", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "seo_description": "", "seo_title": "", "template_suffix": "", "title": "Journal", "updated_at": "2026-10-18T09:30:00Z", "version": 2}Create a blog post
Section titled “Create a blog post”POST /articles · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/articles" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "tags": ["eid", "style"], "visible": true}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/articles", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "tags": ["eid", "style"], "visible": true }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/articles", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "tags": ["eid", "style"], "visible": True, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/articles');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'blog_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000001', 'title' => 'Dressing for Eid', 'author' => 'Mariam', 'body_html' => '<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>', 'tags' => ['eid', 'style'], 'visible' => true, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "tags": ["eid", "style"], "visible": true}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/articles", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/articles");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "tags": ["eid", "style"], "visible": true}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "author": "Mariam", "blog_handle": "journal", "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "blog_title": "Journal", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "comments_count": 0, "created_at": "2026-10-18T09:30:00Z", "handle": "dressing-for-eid", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000002", "image_alt": "", "image_asset_id": null, "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "", "seo_title": "", "summary_html": "", "tags": ["eid", "style"], "template_suffix": "", "title": "Dressing for Eid", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true}List blog posts
Section titled “List blog posts”GET /articles · Scope: read_content
| Parameter | In | Description |
|---|---|---|
blog_id |
query | An ID, as in the example. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/articles?blog_id=0193a1b2-c3d4-7e5f-8a6b-000000000001");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "author": "Mariam", "blog_handle": "journal", "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "blog_title": "Journal", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "comments_count": 0, "created_at": "2026-10-18T09:30:00Z", "handle": "dressing-for-eid", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000002", "image_alt": "", "image_asset_id": null, "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "", "seo_title": "", "summary_html": "", "tags": ["eid", "style"], "template_suffix": "", "title": "Dressing for Eid", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true } ], "total": 1}Get a blog post
Section titled “Get a blog post”GET /articles/{id} · Scope: read_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "author": "Mariam", "blog_handle": "journal", "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "blog_title": "Journal", "body_html": "<p>Five looks for Eid gatherings, from morning prayers to evening visits.</p>", "comments_count": 0, "created_at": "2026-10-18T09:30:00Z", "handle": "dressing-for-eid", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000002", "image_alt": "", "image_asset_id": null, "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "", "seo_title": "", "summary_html": "", "tags": ["eid", "style"], "template_suffix": "", "title": "Dressing for Eid", "updated_at": "2026-10-18T09:30:00Z", "version": 1, "visible": true}Update a blog post
Section titled “Update a blog post”PUT /articles/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Six looks for Eid gatherings.</p>", "visible": true, "version": 1}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Six looks for Eid gatherings.</p>", "visible": true, "version": 1 }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Six looks for Eid gatherings.</p>", "visible": True, "version": 1, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'blog_id' => '0193a1b2-c3d4-7e5f-8a6b-000000000001', 'title' => 'Dressing for Eid', 'author' => 'Mariam', 'body_html' => '<p>Six looks for Eid gatherings.</p>', 'visible' => true, 'version' => 1, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Six looks for Eid gatherings.</p>", "visible": true, "version": 1}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/articles/0193a1b2-c3d4-7e5f-8a6b-000000000002");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "title": "Dressing for Eid", "author": "Mariam", "body_html": "<p>Six looks for Eid gatherings.</p>", "visible": true, "version": 1}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "author": "Mariam", "blog_handle": "journal", "blog_id": "0193a1b2-c3d4-7e5f-8a6b-000000000001", "blog_title": "Journal", "body_html": "<p>Six looks for Eid gatherings.</p>", "comments_count": 0, "created_at": "2026-10-18T09:30:00Z", "handle": "dressing-for-eid", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000002", "image_alt": "", "image_asset_id": null, "publish_at": null, "published_at": "2026-10-18T09:30:00Z", "seo_description": "", "seo_title": "", "summary_html": "", "tags": [], "template_suffix": "", "title": "Dressing for Eid", "updated_at": "2026-10-18T09:30:00Z", "version": 2, "visible": true}Delete many blog posts
Section titled “Delete many blog posts”POST /articles/bulk · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/articles/bulk" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"action": "delete", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000002"]}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/articles/bulk", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"action": "delete", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000002"]}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/articles/bulk", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "action": "delete", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000002"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/articles/bulk');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'action' => 'delete', 'ids' => ['0193a1b2-c3d4-7e5f-8a6b-000000000002'], ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"action": "delete", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000002"]}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/articles/bulk", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/articles/bulk");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"action": "delete", "ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000002"]}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{"ok": true}Delete a blog and its posts
Section titled “Delete a blog and its posts”DELETE /blogs/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X DELETE "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", { method: "DELETE", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.delete( "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("DELETE", "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Delete, "https://api.sooquna.com/admin/api/2026-10/blogs/0193a1b2-c3d4-7e5f-8a6b-000000000001");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 204
{}Create a navigation menu
Section titled “Create a navigation menu”POST /menus · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/menus" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "About us", "type": "page", "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029" }, {"title": "Size guide", "type": "custom_page", "ref": "size-guide"}, {"title": "Shop all", "type": "url", "url": "/collections/all"} ]}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/menus", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "About us", "type": "page", "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029" }, {"title": "Size guide", "type": "custom_page", "ref": "size-guide"}, {"title": "Shop all", "type": "url", "url": "/collections/all"} ] }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/menus", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "About us", "type": "page", "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029", }, { "title": "Size guide", "type": "custom_page", "ref": "size-guide", }, { "title": "Shop all", "type": "url", "url": "/collections/all", }, ], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/menus');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'handle' => 'eid-menu', 'title' => 'Eid menu', 'items' => [ [ 'title' => 'About us', 'type' => 'page', 'ref' => '0193a1b2-c3d4-7e5f-8a6b-000000000029', ], [ 'title' => 'Size guide', 'type' => 'custom_page', 'ref' => 'size-guide', ], [ 'title' => 'Shop all', 'type' => 'url', 'url' => '/collections/all', ], ], ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "About us", "type": "page", "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029" }, {"title": "Size guide", "type": "custom_page", "ref": "size-guide"}, {"title": "Shop all", "type": "url", "url": "/collections/all"} ]}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/menus", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/menus");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "About us", "type": "page", "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029" }, {"title": "Size guide", "type": "custom_page", "ref": "size-guide"}, {"title": "Shop all", "type": "url", "url": "/collections/all"} ]}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "handle": "eid-menu", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000027", "items": [ { "href": "/pages/about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000028", "items": [], "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "title": "About us", "type": "page" }, { "href": "/custom/size-guide", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000030", "items": [], "ref": "size-guide", "title": "Size guide", "type": "custom_page" } ], "title": "Eid menu", "updated_at": "2026-10-18T09:30:00Z", "version": 1}List navigation menus
Section titled “List navigation menus”GET /menus · Scope: read_content
curl -X GET "https://api.sooquna.com/admin/api/2026-10/menus" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/menus", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/menus", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/menus');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/menus", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/menus");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "handle": "eid-menu", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000027", "items": [ { "href": "/pages/about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000028", "items": [], "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "title": "About us", "type": "page" }, { "href": "/custom/size-guide", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000030", "items": [], "ref": "size-guide", "title": "Size guide", "type": "custom_page" } ], "title": "Eid menu", "updated_at": "2026-10-18T09:30:00Z", "version": 1 } ]}Get a navigation menu
Section titled “Get a navigation menu”GET /menus/{id} · Scope: read_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "handle": "eid-menu", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000027", "items": [ { "href": "/pages/about-us", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000028", "items": [], "ref": "0193a1b2-c3d4-7e5f-8a6b-000000000029", "title": "About us", "type": "page" }, { "href": "/custom/size-guide", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000030", "items": [], "ref": "size-guide", "title": "Size guide", "type": "custom_page" } ], "title": "Eid menu", "updated_at": "2026-10-18T09:30:00Z", "version": 1}Update a navigation menu
Section titled “Update a navigation menu”PUT /menus/{id} · Scope: write_content
Item types: url, page, collection, product, blog, article, policy, custom_page, home, catalog, search; ref is the resource ID (or the policy kind, or the custom page name).
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "handle": "eid-menu", "title": "Eid menu", "items": [{"title": "Shop all", "type": "url", "url": "/collections/all"}], "version": 1}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "handle": "eid-menu", "title": "Eid menu", "items": [{"title": "Shop all", "type": "url", "url": "/collections/all"}], "version": 1 }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "handle": "eid-menu", "title": "Eid menu", "items": [ { "title": "Shop all", "type": "url", "url": "/collections/all", }, ], "version": 1, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'handle' => 'eid-menu', 'title' => 'Eid menu', 'items' => [ [ 'title' => 'Shop all', 'type' => 'url', 'url' => '/collections/all', ], ], 'version' => 1, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "handle": "eid-menu", "title": "Eid menu", "items": [{"title": "Shop all", "type": "url", "url": "/collections/all"}], "version": 1}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "handle": "eid-menu", "title": "Eid menu", "items": [{"title": "Shop all", "type": "url", "url": "/collections/all"}], "version": 1}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "handle": "eid-menu", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000027", "items": [ { "href": "/collections/all", "id": "0193a1b2-c3d4-7e5f-8a6b-000000000064", "items": [], "title": "Shop all", "type": "url", "url": "/collections/all" } ], "title": "Eid menu", "updated_at": "2026-10-18T09:30:00Z", "version": 2}Delete a navigation menu
Section titled “Delete a navigation menu”DELETE /menus/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X DELETE "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", { method: "DELETE", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.delete( "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("DELETE", "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Delete, "https://api.sooquna.com/admin/api/2026-10/menus/0193a1b2-c3d4-7e5f-8a6b-000000000027");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 204
{}List store policies
Section titled “List store policies”GET /policies · Scope: read_content
curl -X GET "https://api.sooquna.com/admin/api/2026-10/policies" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/policies", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/policies", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/policies');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/policies", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/policies");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "body_html": "<p>You can return unused items in their original condition within 14 days of delivery. To start a return, contact us at .</p><p>Once we receive and inspect the return, we refund the original payment method within 5–10 business days. Cash on delivery orders are refunded by bank transfer or store cr…", "handle": "refund-policy", "kind": "refund", "title": "Refund policy", "updated_at": "2026-10-18T09:30:00Z", "version": 1 }, { "body_html": "<p>Shop collects what we need to fulfil your order: your name, contact details, address and order history. We don't store card details; payments are handled by our payment provider.</p><p>We use your information to deliver orders and contact you, and for marketing only if you agreed to it. You can a…", "handle": "privacy-policy", "kind": "privacy", "title": "Privacy policy", "updated_at": "2026-10-18T09:30:00Z", "version": 1 } ]}Update a store policy
Section titled “Update a store policy”PUT /policies/{kind} · Scope: write_content
kind: refund, privacy, terms, shipping, contact or legal.
| Parameter | In | Description |
|---|---|---|
kind |
path | The kind ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/policies/refund" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "title": "Refund policy", "body_html": "<p>Unworn items can be returned within 14 days of delivery.</p>", "version": 1}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/policies/refund", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({ "title": "Refund policy", "body_html": "<p>Unworn items can be returned within 14 days of delivery.</p>", "version": 1 }),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/policies/refund", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "title": "Refund policy", "body_html": "<p>Unworn items can be returned within 14 days of delivery.</p>", "version": 1, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/policies/refund');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'title' => 'Refund policy', 'body_html' => '<p>Unworn items can be returned within 14 days of delivery.</p>', 'version' => 1, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{ "title": "Refund policy", "body_html": "<p>Unworn items can be returned within 14 days of delivery.</p>", "version": 1}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/policies/refund", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/policies/refund");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{ "title": "Refund policy", "body_html": "<p>Unworn items can be returned within 14 days of delivery.</p>", "version": 1}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Create a URL redirect
Section titled “Create a URL redirect”POST /redirects · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/redirects" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"path": "/abayas-old", "target": "/collections/abayas", "kind": 301}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/redirects", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"path": "/abayas-old", "target": "/collections/abayas", "kind": 301}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/redirects", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "path": "/abayas-old", "target": "/collections/abayas", "kind": 301, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/redirects');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'path' => '/abayas-old', 'target' => '/collections/abayas', 'kind' => 301, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"path": "/abayas-old", "target": "/collections/abayas", "kind": 301}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/redirects", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/redirects");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"path": "/abayas-old", "target": "/collections/abayas", "kind": 301}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 201
{ "automatic": false, "created_at": "2026-10-18T09:30:00Z", "force": false, "id": "0193a1b2-c3d4-7e5f-8a6b-000000000043", "kind": 301, "path": "/abayas-old", "target": "/collections/abayas", "updated_at": "2026-10-18T09:30:00Z"}List URL redirects
Section titled “List URL redirects”GET /redirects · Scope: read_content
| Parameter | In | Description |
|---|---|---|
q |
query | For example abayas. |
curl -X GET "https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN"const res = await fetch("https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas", { method: "GET", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, },});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.get( "https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), ], CURLOPT_RETURNTRANSFER => true,]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os")
func main() { req, err := http.NewRequest("GET", "https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas", nil) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Get, "https://api.sooquna.com/admin/api/2026-10/redirects?q=abayas");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "data": [ { "automatic": false, "created_at": "2026-10-18T09:30:00Z", "force": false, "id": "0193a1b2-c3d4-7e5f-8a6b-000000000043", "kind": 301, "path": "/abayas-old", "target": "/collections/abayas", "updated_at": "2026-10-18T09:30:00Z" } ], "total": 1}Update a URL redirect
Section titled “Update a URL redirect”PUT /redirects/{id} · Scope: write_content
| Parameter | In | Description |
|---|---|---|
id |
path | The resource’s ID. |
curl -X PUT "https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"path": "/abayas-old", "target": "/collections/eid-edit", "kind": 301}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043", { method: "PUT", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"path": "/abayas-old", "target": "/collections/eid-edit", "kind": 301}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.put( "https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={ "path": "/abayas-old", "target": "/collections/eid-edit", "kind": 301, },)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'path' => '/abayas-old', 'target' => '/collections/eid-edit', 'kind' => 301, ], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"path": "/abayas-old", "target": "/collections/eid-edit", "kind": 301}` req, err := http.NewRequest("PUT", "https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Put, "https://api.sooquna.com/admin/api/2026-10/redirects/0193a1b2-c3d4-7e5f-8a6b-000000000043");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"path": "/abayas-old", "target": "/collections/eid-edit", "kind": 301}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{ "automatic": false, "created_at": "2026-10-18T09:30:00Z", "force": false, "id": "0193a1b2-c3d4-7e5f-8a6b-000000000043", "kind": 301, "path": "/abayas-old", "target": "/collections/eid-edit", "updated_at": "2026-10-18T09:30:00Z"}Delete URL redirects
Section titled “Delete URL redirects”POST /redirects/delete · Scope: write_content
curl -X POST "https://api.sooquna.com/admin/api/2026-10/redirects/delete" \ -H "X-Sooquna-Access-Token: $SOOQUNA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000043"]}'const res = await fetch("https://api.sooquna.com/admin/api/2026-10/redirects/delete", { method: "POST", headers: { "X-Sooquna-Access-Token": process.env.SOOQUNA_TOKEN, "Content-Type": "application/json", }, body: JSON.stringify({"ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000043"]}),});if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);const data = await res.json();console.log(data);import osimport requests
res = requests.post( "https://api.sooquna.com/admin/api/2026-10/redirects/delete", headers={ "X-Sooquna-Access-Token": os.environ["SOOQUNA_TOKEN"], }, json={"ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000043"]},)res.raise_for_status()print(res.json())<?php$ch = curl_init('https://api.sooquna.com/admin/api/2026-10/redirects/delete');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'X-Sooquna-Access-Token: ' . getenv('SOOQUNA_TOKEN'), 'Content-Type: application/json', ], CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode(['ids' => ['0193a1b2-c3d4-7e5f-8a6b-000000000043']], JSON_UNESCAPED_UNICODE),]);$response = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);if ($status >= 300) { throw new RuntimeException("$status: $response");}$data = json_decode($response, true);print_r($data);package main
import ( "fmt" "io" "net/http" "os" "strings")
func main() { body := `{"ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000043"]}` req, err := http.NewRequest("POST", "https://api.sooquna.com/admin/api/2026-10/redirects/delete", strings.NewReader(body)) if err != nil { panic(err) } req.Header.Set("X-Sooquna-Access-Token", os.Getenv("SOOQUNA_TOKEN")) req.Header.Set("Content-Type", "application/json") res, err := http.DefaultClient.Do(req) if err != nil { panic(err) } defer res.Body.Close() if res.StatusCode >= 300 { data, _ := io.ReadAll(res.Body) panic(fmt.Sprintf("%d: %s", res.StatusCode, data)) } data, _ := io.ReadAll(res.Body) fmt.Println(string(data))}using System.Text;
using var client = new HttpClient();var req = new HttpRequestMessage(HttpMethod.Post, "https://api.sooquna.com/admin/api/2026-10/redirects/delete");req.Headers.Add("X-Sooquna-Access-Token", Environment.GetEnvironmentVariable("SOOQUNA_TOKEN"));req.Content = new StringContent("""{"ids": ["0193a1b2-c3d4-7e5f-8a6b-000000000043"]}""", Encoding.UTF8, "application/json");var res = await client.SendAsync(req);if (!res.IsSuccessStatusCode) throw new Exception($"{(int)res.StatusCode}: {await res.Content.ReadAsStringAsync()}");Console.WriteLine(await res.Content.ReadAsStringAsync());Response 200
{"deleted": 1}Was this page helpful?

