{ "info": { "name": "Meshkee Website API (Global)", "description": "# Meshkee Website API — Global reference for all storefronts\n\nCanonical docs: https://api.meshkee.com/docs/website\n\nThis collection is **not** tied to one business. Every Meshkee website (any domain) uses the same endpoints.\n\n## How multi-tenancy works\n1. Set collection variable `domain` = the **website apex** only (e.g. `example.com`, `sanihome.ir`). Never use `www.` / `api.` / `customer.` / `business.` here.\n2. Set `baseUrl` (see below).\n3. Run **Resolve tenant** → saves `businessId`.\n4. Public content: `/tenants/{{domain}}/...` (no auth).\n5. After login: cart / orders / favorites use `/businesses/{{businessId}}/...` with Bearer token.\n\n## baseUrl options (same Nest API)\n- Preferred central: `https://api.meshkee.com/api/v1`\n- Per-site alias (if DNS+SSL configured): `https://api.{{domain}}/api/v1`\n- Local: `http://localhost:3000/api/v1`\n\nTenant is always taken from the **path** (`/tenants/{domain}`), not from the API hostname.\n\n## Auth\n- Public: no header\n- Customer: `Authorization: Bearer {{accessToken}}`\n- Register requires body field `domain` = same website apex\n\n## Not in this collection\nCMS / dashboard / super-admin APIs (staff only).\n", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "variable": [ { "key": "baseUrl", "value": "https://api.meshkee.com/api/v1" }, { "key": "domain", "value": "YOUR_WEBSITE_DOMAIN" }, { "key": "businessId", "value": "" }, { "key": "accessToken", "value": "" }, { "key": "refreshToken", "value": "" }, { "key": "productId", "value": "" }, { "key": "productSlug", "value": "" }, { "key": "userProductId", "value": "" }, { "key": "userProductSlug", "value": "" }, { "key": "blogId", "value": "" }, { "key": "blogSlug", "value": "" }, { "key": "blogCategoryId", "value": "" }, { "key": "portfolioId", "value": "" }, { "key": "portfolioSlug", "value": "" }, { "key": "portfolioCategoryId", "value": "" }, { "key": "storeItemVariantId", "value": "" }, { "key": "cartItemId", "value": "" }, { "key": "orderId", "value": "" }, { "key": "commentId", "value": "" }, { "key": "expertReviewId", "value": "" }, { "key": "addressId", "value": "" }, { "key": "countryId", "value": "" }, { "key": "provinceId", "value": "" }, { "key": "cityId", "value": "" }, { "key": "categoryId", "value": "" }, { "key": "brandId", "value": "" }, { "key": "smsApiKey", "value": "" } ], "item": [ { "name": "Tenant", "item": [ { "name": "Resolve tenant by domain", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.id) pm.collectionVariables.set(\"businessId\", String(json.id));", "}" ] } } ], "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}" } } ] }, { "name": "Auth", "item": [ { "name": "Register (customer on website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.accessToken) pm.collectionVariables.set('accessToken', json.accessToken);", " if (json.refreshToken) pm.collectionVariables.set('refreshToken', json.refreshToken);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+98XXXXXXXXXX\",\n \"password\": \"min8chars\",\n \"firstName\": \"First\",\n \"lastName\": \"Last\",\n \"email\": \"optional@example.com\",\n \"domain\": \"{{domain}}\",\n \"acknowledgeExistingAccount\": false\n}" }, "url": "{{baseUrl}}/auth/register" } }, { "name": "Login - Customer", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " pm.collectionVariables.set('accessToken', json.accessToken);", " pm.collectionVariables.set('refreshToken', json.refreshToken);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+98XXXXXXXXXX\",\n \"password\": \"YOUR_PASSWORD\"\n}" }, "url": "{{baseUrl}}/auth/login" } }, { "name": "Login with OTP", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " pm.collectionVariables.set('accessToken', json.accessToken);", " pm.collectionVariables.set('refreshToken', json.refreshToken);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+98XXXXXXXXXX\",\n \"code\": \"123456\"\n}" }, "url": "{{baseUrl}}/auth/login-otp" } }, { "name": "Reset password (SMS OTP)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+98XXXXXXXXXX\",\n \"code\": \"123456\",\n \"newPassword\": \"newpassword123\"\n}" }, "url": "{{baseUrl}}/auth/reset-password" } }, { "name": "Me (current user)", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/auth/me" } }, { "name": "Refresh token", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " pm.collectionVariables.set('accessToken', json.accessToken);", " pm.collectionVariables.set('refreshToken', json.refreshToken);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"refreshToken\": \"{{refreshToken}}\"\n}" }, "url": "{{baseUrl}}/auth/refresh" } }, { "name": "Send OTP (SMS disabled)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+989124444444\"\n}" }, "url": "{{baseUrl}}/auth/send-otp" } }, { "name": "Verify OTP (SMS disabled)", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"cellNumber\": \"+989124444444\",\n \"code\": \"123456\"\n}" }, "url": "{{baseUrl}}/auth/verify-otp" } }, { "name": "Update profile", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"firstName\": \"Ali\",\n \"lastName\": \"Customer\",\n \"email\": \"ali@example.com\"\n}" }, "url": "{{baseUrl}}/auth/profile" } }, { "name": "Change password", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"currentPassword\": \"password\",\n \"newPassword\": \"password123\"\n}" }, "url": "{{baseUrl}}/auth/change-password" } } ] }, { "name": "Addresses", "item": [ { "name": "List my addresses", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set(\"addressId\", json.items[0].id);", "}" ] } } ], "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/auth/addresses" } }, { "name": "Create address", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.address?.id) pm.collectionVariables.set(\"addressId\", json.address.id);", "}" ] } } ], "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"province\": \"Tehran\",\n \"city\": \"Tehran\",\n \"address\": \"123 Example Street\",\n \"postalCode\": \"1234567890\",\n \"landline\": \"02112345678\"\n}" }, "url": "{{baseUrl}}/auth/addresses" } }, { "name": "Update address", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"province\": \"Tehran\",\n \"city\": \"Tehran\",\n \"address\": \"456 Updated Street\",\n \"postalCode\": \"1234567890\"\n}" }, "url": "{{baseUrl}}/auth/addresses/{{addressId}}" } }, { "name": "Delete address", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/auth/addresses/{{addressId}}" } } ] }, { "name": "Comments", "item": [ { "name": "Submit comment (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"entityType\": \"product\",\n \"entityId\": \"{{productId}}\",\n \"authorName\": \"Website Visitor\",\n \"authorEmail\": \"visitor@example.com\",\n \"text\": \"Great product! Would recommend.\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/comments" } }, { "name": "List approved comments (website)", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/comments?entityType=product&entityId={{productId}}", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "comments" ], "query": [ { "key": "entityType", "value": "product" }, { "key": "entityId", "value": "{{productId}}" } ] } } }, { "name": "Submit comment on blog (generic API)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"entityType\": \"blog\",\n \"entityId\": \"{{blogId}}\",\n \"authorName\": \"Blog Reader\",\n \"authorEmail\": \"reader@example.com\",\n \"text\": \"Great article, thanks for sharing!\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/comments" } }, { "name": "List approved comments for blog (generic API)", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/comments?entityType=blog&entityId={{blogId}}", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "comments" ], "query": [ { "key": "entityType", "value": "blog" }, { "key": "entityId", "value": "{{blogId}}" } ] } } }, { "name": "Submit comment on portfolio (generic API)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"entityType\": \"portfolio\",\n \"entityId\": \"{{portfolioId}}\",\n \"authorName\": \"Portfolio Visitor\",\n \"authorEmail\": \"visitor@example.com\",\n \"text\": \"Beautiful work!\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/comments" } }, { "name": "List approved comments for portfolio (generic API)", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/comments?entityType=portfolio&entityId={{portfolioId}}", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "comments" ], "query": [ { "key": "entityType", "value": "portfolio" }, { "key": "entityId", "value": "{{portfolioId}}" } ] } } } ] }, { "name": "Blogs", "item": [ { "name": "List published blogs (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('blogId', json.items[0].id);", " if (json.items?.[0]?.slug) pm.collectionVariables.set('blogSlug', json.items[0].slug);", "}" ], "type": "text/javascript" } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/blogs?page=1&pageSize=12", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "blogs" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "12" }, { "key": "type", "value": "", "disabled": true }, { "key": "categoryId", "value": "", "disabled": true }, { "key": "title", "value": "", "disabled": true } ] } } }, { "name": "Get published blog by slug (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/blogs/{{blogSlug}}" } }, { "name": "List blog comments (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/blogs/{{blogId}}/comments" } }, { "name": "Submit blog comment (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"authorName\": \"Blog Reader\",\n \"authorEmail\": \"reader@example.com\",\n \"text\": \"Very helpful post!\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/blogs/{{blogId}}/comments" } } ] }, { "name": "Portfolios", "item": [ { "name": "List published portfolios (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('portfolioId', json.items[0].id);", " if (json.items?.[0]?.slug) pm.collectionVariables.set('portfolioSlug', json.items[0].slug);", "}" ], "type": "text/javascript" } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/portfolios?page=1&pageSize=12", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "portfolios" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "12" }, { "key": "categoryId", "value": "", "disabled": true }, { "key": "title", "value": "", "disabled": true } ] } } }, { "name": "Get published portfolio by slug (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/portfolios/{{portfolioSlug}}" } }, { "name": "List portfolio comments (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/portfolios/{{portfolioId}}/comments" } }, { "name": "Submit portfolio comment (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.comment?.id) pm.collectionVariables.set('commentId', json.comment.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"authorName\": \"Portfolio Visitor\",\n \"authorEmail\": \"visitor@example.com\",\n \"text\": \"Impressive project!\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/portfolios/{{portfolioId}}/comments" } } ] }, { "name": "Expert Reviews", "item": [ { "name": "Submit expert review (website)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.review?.id) pm.collectionVariables.set('expertReviewId', json.review.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"productId\": \"{{productId}}\",\n \"authorName\": \"Expert Reviewer\",\n \"authorEmail\": \"expert@example.com\",\n \"rate\": 8,\n \"positivePoints\": [\"Build quality\", \"Great battery life\", \"Comfortable fit\"],\n \"negativePoints\": [\"Pricey\", \"Limited colors\"],\n \"text\": \"Solid product overall with a few trade-offs worth considering.\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/expert-reviews" } }, { "name": "List approved expert reviews (website)", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/expert-reviews?productId={{productId}}", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "expert-reviews" ], "query": [ { "key": "productId", "value": "{{productId}}" } ] } } } ] }, { "name": "Categories", "item": [ { "name": "List product categories", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('categoryId', json.items[0].id);", "}" ] } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/categories?entityType=product", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "categories" ], "query": [ { "key": "entityType", "value": "product" } ] } } }, { "name": "List blog categories", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/categories?entityType=blog", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "categories" ], "query": [ { "key": "entityType", "value": "blog" } ] } } }, { "name": "List portfolio categories", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/categories?entityType=portfolio", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "categories" ], "query": [ { "key": "entityType", "value": "portfolio" } ] } } } ] }, { "name": "Products", "item": [ { "name": "List published products", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('productId', json.items[0].id);", " if (json.items?.[0]?.slug) pm.collectionVariables.set('productSlug', json.items[0].slug);", "}" ] } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/products?page=1&pageSize=12", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "products" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "12" }, { "key": "name", "value": "", "disabled": true }, { "key": "categoryId", "value": "{{categoryId}}", "disabled": true }, { "key": "brandId", "value": "{{brandId}}", "disabled": true }, { "key": "tag", "value": "", "disabled": true }, { "key": "inStore", "value": "true", "disabled": true } ] } } }, { "name": "Get published product by slug", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/products/{{productSlug}}" } }, { "name": "Get product variations by slug", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/products/{{productSlug}}/variations" } }, { "name": "Get product technical info by slug", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/products/{{productSlug}}/technical-info" } } ] }, { "name": "User Products", "item": [ { "name": "List published user products", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('userProductId', json.items[0].id);", " if (json.items?.[0]?.slug) pm.collectionVariables.set('userProductSlug', json.items[0].slug);", "}" ] } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/user-products?page=1&pageSize=12", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "user-products" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "12" }, { "key": "name", "value": "", "disabled": true }, { "key": "q", "value": "", "disabled": true }, { "key": "categoryId", "value": "{{categoryId}}", "disabled": true }, { "key": "cityId", "value": "", "disabled": true }, { "key": "countryId", "value": "", "disabled": true }, { "key": "condition", "value": "new", "disabled": true }, { "key": "promoted", "value": "true", "disabled": true } ] } } }, { "name": "Search user products", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/user-products?q=boiler&page=1&pageSize=12", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "user-products" ], "query": [ { "key": "q", "value": "boiler" }, { "key": "page", "value": "1" }, { "key": "pageSize", "value": "12" } ] } } }, { "name": "Get user product by slug", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/user-products/{{userProductSlug}}" } }, { "name": "Get user product technical info by slug", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/user-products/{{userProductSlug}}/technical-info" } } ] }, { "name": "Store Items", "item": [ { "name": "List store item variants", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('storeItemVariantId', json.items[0].id);", "}" ] } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/tenants/{{domain}}/store-items?page=1&pageSize=20", "host": [ "{{baseUrl}}" ], "path": [ "tenants", "{{domain}}", "store-items" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "20" }, { "key": "categoryId", "value": "", "disabled": true }, { "key": "brandId", "value": "", "disabled": true }, { "key": "productId", "value": "{{productId}}", "disabled": true }, { "key": "name", "value": "", "disabled": true }, { "key": "inStock", "value": "true", "disabled": true }, { "key": "isFestival", "value": "true", "disabled": true }, { "key": "minPrice", "value": "", "disabled": true }, { "key": "maxPrice", "value": "", "disabled": true } ] } } }, { "name": "Get store item by product ID", "event": [ { "listen": "test", "script": { "type": "text/javascript", "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " const variant = json.storeItem?.variants?.[0];", " if (variant?.id) pm.collectionVariables.set('storeItemVariantId', variant.id);", "}" ] } } ], "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/store-items/by-product/{{productId}}" } }, { "name": "Get store item variant by ID", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/store-items/{{storeItemVariantId}}" } } ] }, { "name": "Homepage", "item": [ { "name": "Get business info (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/website/business-info" } }, { "name": "List category groups (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/website/category-groups" } }, { "name": "List brand groups (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/website/brand-groups" } }, { "name": "List sliders (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/website/sliders" } }, { "name": "List store specials (website)", "request": { "method": "GET", "url": "{{baseUrl}}/tenants/{{domain}}/store-specials" } } ] }, { "name": "Cart", "item": [ { "name": "Get cart", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/businesses/{{businessId}}/cart" } }, { "name": "Add variant to cart", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " const items = json.cart?.items || [];", " if (items.length) pm.collectionVariables.set('cartItemId', items[items.length - 1].id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"storeItemVariantId\": \"{{storeItemVariantId}}\",\n \"quantity\": 1\n}" }, "url": "{{baseUrl}}/businesses/{{businessId}}/cart/items" } }, { "name": "Update cart item quantity", "request": { "method": "PATCH", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"quantity\": 2\n}" }, "url": "{{baseUrl}}/businesses/{{businessId}}/cart/items/{{cartItemId}}" } }, { "name": "Remove cart item", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/businesses/{{businessId}}/cart/items/{{cartItemId}}" } }, { "name": "Clear cart", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/businesses/{{businessId}}/cart" } }, { "name": "Checkout cart (cash payment)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.order?.id) pm.collectionVariables.set('orderId', json.order.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"shippingAddress\": {\n \"province\": \"Tehran\",\n \"city\": \"Tehran\",\n \"address\": \"123 Example Street\",\n \"postalCode\": \"1234567890\",\n \"landline\": \"02112345678\"\n },\n \"customerNotes\": \"Please call before delivery\",\n \"payment\": {\n \"type\": \"cash\"\n }\n}" }, "url": "{{baseUrl}}/businesses/{{businessId}}/cart/checkout" } }, { "name": "Checkout cart (saved address)", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200 || pm.response.code === 201) {", " const json = pm.response.json();", " if (json.order?.id) pm.collectionVariables.set('orderId', json.order.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"addressId\": \"{{addressId}}\",\n \"customerNotes\": \"Deliver after 5pm\",\n \"payment\": {\n \"type\": \"e_payment_gate\",\n \"gatewayType\": \"zarinpal\"\n }\n}" }, "url": "{{baseUrl}}/businesses/{{businessId}}/cart/checkout" } } ] }, { "name": "Orders", "item": [ { "name": "List my orders", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": { "raw": "{{baseUrl}}/businesses/{{businessId}}/orders?page=1&pageSize=20", "host": [ "{{baseUrl}}" ], "path": [ "businesses", "{{businessId}}", "orders" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "20" } ] } } }, { "name": "Get my order", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/businesses/{{businessId}}/orders/{{orderId}}" } } ] }, { "name": "Contact", "item": [ { "name": "Submit contact form", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"title\": \"Product inquiry\",\n \"name\": \"Website Visitor\",\n \"email\": \"visitor@example.com\",\n \"cellNumber\": \"+989121234567\",\n \"text\": \"I would like more information about your products.\"\n}" }, "url": "{{baseUrl}}/tenants/{{domain}}/contact-submissions" } } ] }, { "name": "Favorites", "item": [ { "name": "List favorites", "request": { "method": "GET", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": { "raw": "{{baseUrl}}/businesses/{{businessId}}/favorites?page=1&pageSize=20", "host": [ "{{baseUrl}}" ], "path": [ "businesses", "{{businessId}}", "favorites" ], "query": [ { "key": "page", "value": "1" }, { "key": "pageSize", "value": "20" } ] } } }, { "name": "Add favorite", "request": { "method": "POST", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" }, { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"productId\": \"{{productId}}\"\n}" }, "url": "{{baseUrl}}/businesses/{{businessId}}/favorites" } }, { "name": "Remove favorite", "request": { "method": "DELETE", "header": [ { "key": "Authorization", "value": "Bearer {{accessToken}}" } ], "url": "{{baseUrl}}/businesses/{{businessId}}/favorites/{{productId}}" } } ] }, { "name": "Cities (address forms)", "item": [ { "name": "List countries", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('countryId', json.items[0].id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/cities?level=country", "host": [ "{{baseUrl}}" ], "path": [ "cities" ], "query": [ { "key": "level", "value": "country" } ] } } }, { "name": "List Iran provinces", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " if (json.items?.[0]?.id) pm.collectionVariables.set('provinceId', json.items[0].id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/cities?level=province&parentSlug=iran", "host": [ "{{baseUrl}}" ], "path": [ "cities" ], "query": [ { "key": "level", "value": "province" }, { "key": "parentSlug", "value": "iran" } ] } } }, { "name": "List cities in Tehran province", "event": [ { "listen": "test", "script": { "exec": [ "if (pm.response.code === 200) {", " const json = pm.response.json();", " const tehran = json.items?.find((item) => item.slug === 'tehran');", " if (tehran?.id) pm.collectionVariables.set('cityId', tehran.id);", "}" ], "type": "text/javascript" } } ], "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/cities?level=city&parentSlug=tehran-province", "host": [ "{{baseUrl}}" ], "path": [ "cities" ], "query": [ { "key": "level", "value": "city" }, { "key": "parentSlug", "value": "tehran-province" } ] } } }, { "name": "List cities by province ID", "request": { "method": "GET", "url": { "raw": "{{baseUrl}}/cities?level=city&parentId={{provinceId}}", "host": [ "{{baseUrl}}" ], "path": [ "cities" ], "query": [ { "key": "level", "value": "city" }, { "key": "parentId", "value": "{{provinceId}}" } ] } } }, { "name": "Get city by ID", "request": { "method": "GET", "url": "{{baseUrl}}/cities/{{cityId}}" } } ] }, { "name": "Partner SMS", "description": "Server-to-server SMS for allowlisted partner domains. Set collection variable `smsApiKey`. Docs: https://api.meshkee.com/docs/website/SMS.md", "item": [ { "name": "Send SMS", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" }, { "key": "X-Api-Key", "value": "{{smsApiKey}}" } ], "body": { "mode": "raw", "raw": "{\n \"domain\": \"baloutpastry.com\",\n \"to\": \"09127004945\",\n \"message\": \"سفارش شما به شماره ی ۱۲۱۱۳۲۲ اماده می باشد.\"\n}" }, "url": "{{baseUrl}}/public/sms/send", "description": "Requires allowlisted domain + matching API key. Not for browser JS." } } ] } ] }