
Welcome back
Loading the marketplace for you…

Welcome back
Loading the marketplace for you…
REST APIs and outgoing webhooks for banks, ERP vendors, logistics partners, and third-party apps integrating with urutiMall.
Base path
/api/v1
Auth
Bearer sk_live_…
Events
Webhooks
Rate limit
60 req/min
What you can build with /api/v1.
The urutiMall API is a RESTful HTTP API versioned under /api/v1. It enables:
ERP / inventory sync
Push stock counts by SKU. Pull order queues in real time.
Logistics integration
Fetch orders ready for pickup. Push tracking and delivery status.
Banking & fintech
Query transaction history, settlements, and payout schedules.
Event-driven workflows
Receive order.paid, order.shipped, and inventory.low events.
Bearer tokens from your vendor dashboard.
All API requests must include a Bearer token in the Authorization header. Generate keys from Vendor Dashboard → Developer API.
curl https://urutiMall.com/api/v1/orders \ -H "Authorization: Bearer sk_live_your_key_here"
Least-privilege access per key.
Each API key is issued with a specific set of scopes. A key with * has full access.
| Scope | Grants access to |
|---|---|
read:orders | GET /api/v1/orders, GET /api/v1/orders/:id |
read:products | GET /api/v1/products |
write:inventory | POST /api/v1/products (stock sync) |
write:fulfillment | PATCH /api/v1/orders/:id (tracking + status) |
read:analytics | Reserved: analytics endpoints (coming soon) |
* | All of the above |
Core partner endpoints.
/api/v1/ordersread:ordersList orders (paginated)/api/v1/orders/:idread:ordersFetch a single order with items/api/v1/orders/:idwrite:fulfillmentPush tracking number / status/api/v1/productsread:productsList products with variant inventory/api/v1/productswrite:inventorySync stock count by SKUReturns a paginated list of orders for the authenticated vendor.
Query params
| Param | Default | Description |
|---|---|---|
status | - | Filter by PENDING, PAID, SHIPPED, DELIVERED, CANCELLED |
page | 1 | Page number |
limit | 50 | Per page (max 100) |
# Example response
{
"data": [
{
"id": "clx...",
"status": "PAID",
"total": 49.99,
"customerEmail": "buyer@example.com",
"items": [{ "product": { "name": "Solar Lamp", "sku": "SL-001" }, "quantity": 2 }],
"createdAt": "2025-06-01T09:00:00Z"
}
],
"meta": { "page": 1, "limit": 50, "total": 142, "pages": 3 }
}Logistics partners use this to push tracking info and update delivery status.
curl -X PATCH https://urutiMall.com/api/v1/orders/clx... \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "status": "SHIPPED", "trackingNumber": "RW123456789", "carrier": "Aramex" }'ERP systems use this to sync stock counts. Pass variantSku to target a specific variant.
# Update a variant
curl -X POST https://urutiMall.com/api/v1/products \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "sku": "LAMP-001", "variantSku": "LAMP-001-RED", "stockCount": 45 }'
# Update product-level inStock (no variant)
curl -X POST https://urutiMall.com/api/v1/products \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ "sku": "LAMP-001", "stockCount": 0 }'Signed HTTPS callbacks for subscribed events.
Register an HTTPS endpoint in your Vendor Dashboard. We POST a signed JSON payload to your URL whenever a subscribed event occurs.
Available events
Payload structure
{
"event": "order.paid",
"timestamp": "2025-06-01T09:00:00.000Z",
"data": {
"orderId": "clx...",
"checkoutRef": "uruti_1234567_abc",
"total": 49.99,
"customerEmail": "buyer@example.com"
}
}Verifying signatures
Every request includes an X-Uruti-Signature header: an HMAC-SHA256 hex digest of the raw body using your endpoint signing secret.
// Node.js verification example
import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(rawBody: string, signature: string, secret: string): boolean {
const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
try {
return timingSafeEqual(Buffer.from(expected, "hex"), Buffer.from(signature, "hex"));
} catch {
return false; // length mismatch = invalid
}
}Standard HTTP codes with JSON bodies.
The API uses standard HTTP status codes and returns JSON error objects.
| Code | Meaning |
|---|---|
| 401 | Missing or invalid API key |
| 403 | API key lacks the required scope |
| 404 | Resource not found or not owned by your vendor account |
| 400 | Validation error. Check the error message. |
| 422 | Business rule violation (e.g. invalid state transition) |
| 429 | Rate limit exceeded. Wait Retry-After seconds. |
| 500 | Internal server error. Contact support. |
{ "error": "Insufficient scope. Required: write:inventory" }Shared limit across /api/v1.
All /api/v1/* endpoints share a limit of 60 requests per minute per IP. When exceeded, you receive a 429 with a Retry-After header.
HTTP/1.1 429 Too Many Requests
Retry-After: 23
{ "error": "Too Many Requests" }Need higher limits? Contact api@urutiMall.com.
Official clients are on the roadmap.
Official SDKs are coming. Until then, call the API with any HTTP client.
Node.js / TypeScript
Coming soon
Python
Coming soon
PHP
Coming soon
Questions? Email api@urutiMall.com or open a support ticket from your dashboard.
Contact