Skip to main content

Settings

Health check

GET /access/api/v1/settings/health

Call this on every initial page load before any other endpoint. If it returns a non-200 response for any reason, redirect to your branded coming-soon or maintenance page and stop.

Success response:

{
"status": "ok",
"name": "My Shop",
"id": "69ac75f878a9512e92b56fb5"
}

Store the id in your global state — it is required for analytics events and confirms the shop is ready to serve data.

On any error: redirect to your branded coming-soon or maintenance page. The customer does not need to know the reason.

See Shop Health Check for the full gate pattern.


Get shop settings

GET /access/api/v1/settings

Returns the shop's public configuration. Fetch this on initial load to populate your theme with the merchant's branding, contact details, navigation, shipping options, and feature flags.

Cache this response — settings change infrequently. Revalidate every few minutes or on navigation.

Response:

{
"status": "success",
"data": {
"_id": "69ea29a8defdd6f0debd604a",
"branding": {
"logo": {
"_id": "69ac367da7e93c257591ff5a",
"type": "image/png",
"size": "71830",
"title": "logo.png",
"uploadUrl": "67e3cd865bf29cd7117f53a8/media/logo.png"
},
"address": "123 Example Street, Nairobi",
"helpEmail": "hello@yourstore.com",
"helpPhone": "0700xxx000",
"instagramUrl": "https://instagram.com/yourstore",
"facebookUrl": "https://facebook.com/yourstore",
"twitterUrl": "https://twitter.com/yourstore",
"linkedInUrl": "https://linkedin.com/company/yourstore",
"tikTokUrl": "https://tiktok.com/@yourstore",
"youTube": "https://youtube.com/@yourstore",
"whatsappNumber": "254700xxx000",
"whatsappText": "Hello there! How can we help?",
"showContacts": true,
"showSocials": true
},
"headerTopbar": {
"activateTopBar": true,
"topBarTemplate": "Announcements",
"announcements": [
{ "value": "20% off every Friday", "_id": "..." },
{ "value": "Free shipping over KES 2000", "_id": "..." }
],
"showShopNowButton": true,
"menuCollectionsLimit": 10,
"announcementInterval": 30000,
"headerTemplate": "Simple",
"headerLayout": "CenteredMenu",
"menuContent": "Pages",
"menuPages": [
{
"name": "Shop",
"url": "/shop",
"children": []
}
],
"menuCollections": []
},
"checkout": {
"requiresAccount": true,
"requiresPayments": false,
"paymentActive": false
},
"reviews": {
"allowReviews": true
},
"shipping": {
"active": true,
"removeAddress": false,
"standardActive": true,
"pickupActive": true,
"mtaaniActive": false,
"standard": [
{
"_id": "...",
"title": "Standard Delivery",
"price": 200,
"description": "Delivered in 1–3 days",
"default": true
}
],
"pickup": [
{
"_id": "...",
"name": "Westlands",
"buildingName": "ABC Building",
"description": "Main location",
"fee": 0,
"openingHours": "9am – 6pm every day",
"lat": -1.000000,
"lng": 36.000000,
"mapUrl": "https://www.google.com/maps?q=-1.000000,36.000000",
"image": "https://...",
"phone": "0700xxx000"
}
]
},
"tax": {
"active": true,
"value": 19
},
"policies": [
{ "_id": "...", "policyId": "...", "type": "pricing" }
],
"footer": [
{
"title": "Discover",
"links": []
},
{
"title": "Shop",
"links": [
{ "title": "Wish List", "link": "/wish-list" },
{ "title": "Your Bag", "link": "/bag" }
]
}
],
"footerConfig": {
"logo": {
"_id": "...",
"type": "image/png",
"size": "124694",
"title": "footer-logo.png",
"uploadUrl": "67e3cd865bf29cd7117f53a8/media/logo.png"
},
"footerTemplate": "Centered",
"showNewsletter": false
},
"footerPolicies": [
{ "title": "Pricing Policy", "link": "/support/pricing" }
],
"pages": [
{ "name": "Shop", "url": "/shop" },
{ "_id": "...", "name": "Search", "url": "/search" },
{ "_id": "...", "name": "Checkout", "url": "/checkout" },
{ "_id": "...", "name": "Bag", "url": "/bag" },
{ "_id": "...", "name": "Wish List", "url": "/wish-list" },
{ "_id": "...", "name": "Support", "url": "/support/:id" }
],
"adsTracker": {
"facebookPixelId": "",
"gtmId": "",
"gaMeasurementId": "",
"tiktokPixelId": "",
"hotjarId": ""
},
"defaultPages": {
"home": false,
"shop": true,
"contact": false
},
"popups": {
"emailCaptureEnabled": false
},
"media": {
"url": "https://your-space.cdn.digitaloceanspaces.com/shop-id/media/"
}
}
}

Field reference:

FieldDescription
brandingLogo, address, contact details (email, phone), social URLs, WhatsApp config, and visibility flags for contacts and socials
headerTopbarTop bar and header config: template, layout, announcement list and interval, Shop Now button, nav mode (menuContent), and the nav items themselves (menuPages or menuCollections depending on mode)
checkoutCheckout flags: whether a customer account is required, whether payments are required, and whether a payment provider is currently active
reviewsallowReviews — whether the reviews module is on. Hide all review UI when false
shippingActive shipping methods and their config: standard rates (title, price, default), pickup locations (name, address, fee, openingHours, lat/lng, mapUrl), and Mtaani toggle
taxactive flag and value percentage (e.g. 19 = 19%)
policiesArray of configured policy types (privacy, terms-of-service, refund, return, exchange). Use this to know which policy links to show. Fetch content via Get policy document
footerArray of footer column groups (title + links). Use to build the footer nav
footerConfigFooter logo, layout template, and whether to show the newsletter signup
footerPoliciesArray of { title, link } items for the bottom policy links row
pagesAll pages the merchant has created (name, url). Use for dynamic navigation menus
adsTrackerPixel and tracking IDs (Meta, GTM, GA4, TikTok, Hotjar). Initialise on the client — skip any field that is an empty string
defaultPagesFlags for which built-in pages the merchant is using (home, shop, contact)
popupsemailCaptureEnabled — show the email capture popup on first visit if true
media.urlBase CDN URL. Prepend to any uploadUrl that is a relative path rather than a full URL

menuCollections items include _id, name, slug, featured, image, and children (same shape, for subcategories). image is null if no image is set.


Get policy document

GET /access/api/v1/settings/policy/:type

Returns the content of a policy document as configured by the merchant.

:type values:

:typeTitle
privacyPrivacy
terms-of-serviceTerms of Service
refundRefund
returnReturn
exchangeExchange
shippingShipping
deliveryDelivery
cancellationCancellation
paymentPayment
pricingPricing
orderOrder
warrantyWarranty
disclaimerDisclaimer
cookieCookie

Response:

{
"status": "success",
"data": {
"_id": "...",
"type": "pricing",
"content": "<p>Pricing Policy</p><p><strong>Free shipping on orders over KES 2000</strong></p>"
}
}

content is returned as an HTML-escaped string — < is encoded as &lt;, > as &gt;. You must unescape it before rendering:

function unescapeHtml(str) {
const el = document.createElement('textarea');
el.innerHTML = str;
return el.value;
}

const html = unescapeHtml(data.content);
// html is now: <p>Pricing Policy</p><p><strong>Free shipping on orders over KES 2000</strong></p>

Then render the resulting HTML string in your component. content is an empty string if the merchant has not written any content for this policy yet.

Possible errors: POLICY_NOT_FOUND — the merchant has not configured this policy type. Show a "this policy is not currently available" message rather than a 404.