Skip to main content

Store

GET /v1/store — your store's profile (name, slug, theme, custom domain, public URL).

Written by Support

The "store" is the top-level container of products, orders, customers, etc. Every key is bound to exactly one store. There is no way to query other merchants' stores.

GET /v1/store

Returns the profile of the store the calling key belongs to.

Auth: any active platform key bound to the store. Note: at v1 the store:read scope is not enforced on this endpoint — read endpoints are gated only by a valid key plus store scoping. The scopes actually enforced anywhere in v1 are products:write, orders:write, landing_pages:write, webhooks:read, webhooks:write and usage:read.

Cached for 30 s (per API key + query string) — a dashboard change can take up to 30 s to appear via api.dzbuild.app. Check the X-Cache: HIT|MISS response header. The alias dzbuild.com/api/v1/store is not cached.

Request

curl https://api.dzbuild.app/v1/store \
  -H "Authorization: Bearer $DZ_KEY"

Response 200

{
  "data": {
    "id":         13,
    "name":       "DZBuild",
    "slug":       "dzbuild",
    "language":   "ar",
    "description": "DZBuild Offers Preview",
    "logo":       "/uploads/logos/13/8e19a05f0e4205bbcd861469ec0f9257.webp",
    "favicon":    null,
    "banner":     null,
    "theme": {
      "primary_color":    "#f59e0b",
      "secondary_color":  "#fbbf24",
      "background_color": "#ffffff",
      "font_family":      "Cairo"
    },
    "subdomain":            "dzbuild.minacef.app",
    "custom_domain":        null,
    "custom_domain_verified": false,
    "public_url":            "https://dzbuild.minacef.app",
    "hide_branding":         false,
    "created_at":            "2026-01-13 14:58:23"
  },
  "meta": { "request_id": "...", "api_version": "v1" }
}

Field reference

Field

Type

Notes

id

int

Stable internal id. Same as store_id everywhere else.

name

string

Display name. Shown in storefront navbar + emails.

slug

string

URL-safe identifier. Used in <slug>.dzbuild.app etc.

language

enum

ar or fr. Drives storefront RTL/LTR.

description

string|null

Short tagline.

logo

string|null

Path on cdn.dzbuild.app if set. Prepend the CDN base if you display it.

favicon

string|null

Same.

banner

string|null

Same.

theme.primary_color

hex string

The dominant button + accent color.

theme.secondary_color

hex string

Hover / secondary accents.

theme.background_color

hex string

Page background.

theme.font_family

string

Typography (default Cairo).

subdomain

string|null

The DZBuild-issued subdomain. Normally present; null if the store has no subdomain configured yet.

custom_domain

string|null

The merchant's own domain. Only set if added via dashboard.

custom_domain_verified

bool

True only when DNS + SSL provisioning completed.

public_url

string|null

Where customers actually land. Prefers a verified custom_domain; falls back to the subdomain; null if neither exists.

hide_branding

bool

"Powered by DZBuild" hidden in storefront footer. Unlimited.

created_at

timestamp

Store creation time, in Algiers time (UTC+01:00).

Errors

HTTP

Code

Cause

401

unauthorized

Bad or missing key

402

quota_exceeded

Store's monthly request quota exhausted — see Rate limits

403

forbidden

Pilot mode: key not enrolled ("API is in pilot mode; key not enrolled")

404

not_found

The store was deleted while you were holding the key (very rare)

429

rate_limited

Per-minute cap for this key; honour Retry-After — see Rate limits

PATCH /v1/store (coming v1.1)

Update store profile fields (name, slug, theme colors, custom domain).

This endpoint is reserved — the surface is locked but the implementation is part of the v1.1 milestone. Until then, edits go through the dashboard.

Keys already carry a store:write scope, but no write endpoint consumes it yet. PATCH /v1/store returns 405 method_not_allowed today, not 404 — and through api.dzbuild.app you get 400 bad_request first if you omit Idempotency-Key.

Did this answer your question?