Quickstart
Fire your first request
A health check, then your first authenticated call.
Once you have the keys from the previous step, let's confirm everything works.
Health check (no auth)
curl https://api.sellvik.app/api/healthExpected response:
{
"status": "ok",
"timestamp": "2026-05-27T13:45:00.000Z"
}If you see 503, the database is down. Check
status.sellvik.com.
Your first authenticated call (admin key)
List the products in your shop:
curl https://api.sellvik.app/api/v1/admin/products \
-H "Authorization: Bearer <admin-key>"Expected response:
{
"items": [
{
"id": "f3a7…",
"slug": "kurti-emerald",
"name": "Emerald Kurti",
"price": "1490.00",
"stock": 12,
"isActive": true
}
],
"nextCursor": null
}If the shop is empty, items is [] and nextCursor is null. That's a
successful call.
Your first authenticated call (publishable key)
The publishable equivalent — same endpoint surface, smaller capability:
curl https://api.sellvik.app/api/v1/store/products \
-H "X-Sellvik-Key: <publishable-key>"Note the differences:
- Header: publishable keys travel in
X-Sellvik-Key, notAuthorization. This keepsAuthorizationavailable for customer JWTs on the same request. - Path:
/v1/store/*instead of/v1/admin/*. The store namespace returns only public-safe fields (nocostPrice, noinventoryAdjustmenthistory).
Errors you might see
| Status | Code | What to do |
|---|---|---|
| 401 | missing_or_malformed_authorization | You forgot the header, or it's missing Bearer . |
| 401 | invalid_key | The key was revoked, never existed, or is for the wrong shop. |
| 401 | missing_publishable_key | Forgot X-Sellvik-Key on a /v1/store/* call. |
| 403 | insufficient_scope | Admin key missing the scope the route requires. |
| 403 | headless_mode_disabled | Enable headless mode in the panel. |
| 429 | rate_limited | Back off. The Retry-After header tells you for how long. |
The full error shape is documented in Errors.
Continue with Fetch products →.