Хөгжүүлэгчид · v1.0.0
Дэлгүүрийн каталог, захиалга, төлбөрийн холбоос — REST /v1, API түлхүүр, гарын үсэгтэй webhook, Google/Meta формат барааны feed. Гэрээ = OpenAPI 3.1, CI-д хамгаалагдсан. Сүүлд шинэчилсэн: 2026-09-22.
Нэвтрэлт
Мерчант консолын Тохиргоо → Интеграц табаас түлхүүр үүсгэнэ. Түлхүүр нэг л удаа харагдана; алдагдвал консолоос шууд хүчингүй болгоно.
GET https://{slug}.openshop.mn/api/v1/shop/orders?limit=20
Authorization: Bearer osk_live_<43 тэмдэгт>https://{slug}.openshop.mn/api/v1/shop/* эсвэл https://api.openshop.mn/v1/shop/* (түлхүүр өөрөө дэлгүүрээ нэрлэдэг). Өөр дэлгүүрийн хост дээр 401 invalid_api_key.insufficient_scope + required_scope.GET /products*, /categories*, /bundles/public/*) баPOST /checkout нь токенгүй нээлттэй; product:write түлхүүртэй бол ноорог ч харагдана.cost_mnt ямар ч түлхүүрт хэзээ ч буцахгүй. Хүсэлт бүр дэлгүүрийн RLS дор ажиллана.POST /shop/checkout-д сонголттой Idempotency-Key: 24 цаг ижил хариу (Idempotent-Replayed: true), өөр биетэй бол 422 idempotency_key_reuse.Webhook
Консолоос HTTPS endpoint бүртгэж үйл явдлаа сонгоно. Бие нь PII-гүй нимгэн дугтуй — дэлгэрэнгүйг түлхүүрээрээ GET /shop/orders/{id}-ээс татна.
POST https://your.app/openshop-webhook
X-OpenShop-Event-Id: <outbox event id — дедупц энэ дээр>
X-OpenShop-Delivery-Id: <оролдлого бүрд шинэ>
X-OpenShop-Event-Type: order.paid
X-OpenShop-Signature: t=1750000000,v1=06f35f44b88e…
User-Agent: OpenShop-Webhooks/1.0
{"id":"evt_1","type":"order.paid","created_at":"…","shop":{"slug":"demo"},
"data":{"order_id":"…","status":"paid","total_mnt":50000,"discount_mnt":0,"paid_at":"…"}}v1 = HMAC-SHA256(secret, t + "." + rawBody), hex. Түүхий биеийг задлахаас ӨМНӨ шалга; t-г ±300 секундээр хязгаарла. Нууц солих 24 цагт толгойд хоёр v1 — аль нэг таарвал хүчинтэй. Тест вектор: secret s3cr3t, body {"id":"evt_1","type":"order.paid"}, t 1750000000 → 06f35f44b88eceb2f2df6696c68710a8265597b7ca7d225a71d588159757f0d9.X-OpenShop-Event-Id-ээр дедупц заавал; order.expired-ийн дараа order.paid ирж болно — эцсийн үнэн нь GET /shop/orders/{id}.dead; 410 Gone → endpoint автоматаар унтарна; дараалсан 50 алдаа → мөн унтарна.Барааны feed
Дэлгүүр бүр өөрийн хост дээр токенгүй feed-тэй. Facebook Commerce Manager «Data feed → Scheduled», Google Merchant Center «Scheduled fetch»-д холбоосыг нь л өгнө.
GET https://{slug}.openshop.mn/api/v1/shop/feed.csv → text/csv (UTF-8 BOM, RFC 4180)
GET https://{slug}.openshop.mn/api/v1/shop/feed.xml → RSS 2.0 + xmlns:g (Google Merchant)id = барааны UUID (Facebook каталогийн retailer_id, Pixel-ийн content_ids-тэй ижил). 2+ хувилбар → хувилбар бүр мөр, id = хувилбарын UUID, item_group_id = барааны UUID.id · item_group_id · title · description · availability · condition · price · sale_price · sale_price_effective_date · link · image_link · additional_image_link · brand · product_type · google_product_category. Үнэ "50000 MNT"; sale_price зөвхөн хямдрал идэвхтэй үед, storefront-той яг ижил тооцоо. Өртөг, үлдэгдлийн тоо хэзээ ч гарахгүй.Cache-Control: public, max-age=300), ETag → If-None-Match = 304. Зочны IP тус бүрд 30 хүсэлт/мин.Rate limit
| Гадаргуу | Хязгаар | Хувин |
|---|---|---|
| API түлхүүртэй унших хүсэлт | 600 / мин | түлхүүр бүрд |
| API түлхүүртэй бичих хүсэлт | 120 / мин | түлхүүр бүрд |
| POST /shop/checkout (токенгүй) | 30 / мин | зочны IP |
| GET /shop/feed.csv · feed.xml | 30 / мин | зочны IP |
| GET /shop/suggest | 120 / мин | зочны IP |
| POST /shop/orders/lookup | 10 / мин | зочны IP |
Түлхүүртэй хүсэлт X-RateLimit-Limit / Remaining / Reset толгойтой; хэтэрвэл 429 rate_limited + Retry-After. Токенгүй хувин зочин тус бүрд — нэг интегратор бусдыг хаахгүй.
Алдааны дугтуй
HTTP 409
{"error": "Нөөц хүрэлцэхгүй байна.", "code": "insufficient_stock", "remaining": 2}error = хэрэглэгчид харуулах Монгол текст (өөрчлөгдөж болно). code = гэрээ: нэмэгдэнэ, нэр солигдохгүй. Танихгүй код гарвал HTTP статусынх нь ангиар нь ханд.
Хасах/эвдэх өөрчлөлт = Deprecation (RFC 9745) + Sunset (RFC 8594) толгой, дор хаяж 6 сарын мэдэгдэл, дараа нь 410 endpoint_sunset. Одоогоор deprecated route байхгүй.
Өөрчлөлтүүд
2026-09-22
Барааны feed (CSV · XML)
2026-09-16
API түлхүүр, webhook, Idempotency-Key, машин уншдаг гэрээ
2026-09-08
Нийтийн дэлгүүрийн API — 5 засвар
API лавлагаа
Доорх лавлагаа openshop-v1.yaml-аас шууд рендэрлэгдэнэ — файл нь эх сурвалж, энэ хуудас түүний хураангуй.