انتقل إلى المحتوى
القائمة

ابحث في الموقع

اكتب للبحث في الأدلة والمدونة والـ API والمنتج.

↑ ↓ للتنقل · Enter للفتح · Esc للإغلاق

مرجع الـ API

API

المنتجات

اقرأ كتالوج منتجاتك وابحث فيه بحثًا دلاليًا

عرض بصيغة Markdown

تعرض نقاط نهاية المنتجات كتالوج وكيلك: عرضه كاملًا، أو جلب منتج واحد، أو البحث فيه بحثًا دلاليًا. لا تُرجع إلا المنتجات النشطة (المنشورة): المسودات لا تُعرض أبدًا.

مفتاح قابل للنشر: في نقاط نهاية قراءة الكتالوج يعمل مفتاح API كمفتاح قابل للنشر (يعرّف حسابك ويقيس الاستخدام؛ وبيانات الكتالوج عامة). يمكنك استخدامه بأمان من كود المتصفح، تمامًا مثل المفتاح القابل للنشر في Stripe.

الطريقةالمسارالوصف
GET/v1/productsعرض المنتجات النشطة
GET/v1/products/:idجلب منتج واحد
GET/v1/products/searchبحث دلالي في الكتالوج

عرض المنتجات

تُرجع قائمة مقسّمة إلى صفحات بالمنتجات النشطة. صفِّ حسب وسم الفئة أو حسب النوع:

المعاملالنوعالوصف
limitnumberمن 1 إلى 100، الافتراضي 50
offsetnumberإزاحة الصفحات، الافتراضي 0
tagstringالتصفية حسب وسم الفئة
kindstring'product' أو 'service'
GET/v1/products
curl "https://rest-api.tbit.app/v1/products?limit=20&tag=fiestas&kind=product" \
  -H "X-API-Key: $TBIT_API_KEY"
const response = await fetch('https://rest-api.tbit.app/v1/products?limit=20&tag=fiestas&kind=product', {
  headers: {
    'X-API-Key': process.env.TBIT_API_KEY,
  },
});
const data = await response.json();
import axios from 'axios';

const { data } = await axios.get(
  'https://rest-api.tbit.app/v1/products?limit=20&tag=fiestas&kind=product',
  {
    headers: {
      'X-API-Key': process.env.TBIT_API_KEY,
    },
  },
);
import os
import requests

response = requests.get(
    'https://rest-api.tbit.app/v1/products?limit=20&tag=fiestas&kind=product',
    headers={'X-API-Key': os.environ['TBIT_API_KEY']},
)
data = response.json()
<?php
$ch = curl_init('https://rest-api.tbit.app/v1/products?limit=20&tag=fiestas&kind=product');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . getenv('TBIT_API_KEY'),
    ],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
الاستجابة
{
  "data": [
    {
      "_id": "prod_id_1",
      "kind": "product",
      "title": "طقم حفلة الديناصورات",
      "description": "زينة كاملة لحفلة أطفال",
      "media": [
        { "url": "https://api.tbit.app/media/dino-kit.jpg", "alt": "طقم الحفلة", "type": "image", "position": 0 }
      ],
      "category_tags": ["حفلات", "أطفال"],
      "currency": "COP",
      "base_price": 95000,
      "compare_at_price": 120000,
      "variants": [
        {
          "id": "var_id_1",
          "title": "كبير",
          "price": 95000,
          "selected_options": [{ "name": "الحجم", "value": "كبير" }]
        }
      ],
      "created_at": "2024-09-01T12:00:00Z",
      "updated_at": "2024-09-01T12:00:00Z"
    }
  ],
  "pagination": {
    "total": 134,
    "limit": 20,
    "offset": 0,
    "has_more": true
  }
}

جلب منتج

اجلب منتجًا بمعرّفه. المسودات والمعرّفات غير المعروفة ومنتجات وكيل آخر تُرجع 404:

GET/v1/products/prod_id_1
curl "https://rest-api.tbit.app/v1/products/prod_id_1" \
  -H "X-API-Key: $TBIT_API_KEY"
const response = await fetch('https://rest-api.tbit.app/v1/products/prod_id_1', {
  headers: {
    'X-API-Key': process.env.TBIT_API_KEY,
  },
});
const data = await response.json();
import axios from 'axios';

const { data } = await axios.get(
  'https://rest-api.tbit.app/v1/products/prod_id_1',
  {
    headers: {
      'X-API-Key': process.env.TBIT_API_KEY,
    },
  },
);
import os
import requests

response = requests.get(
    'https://rest-api.tbit.app/v1/products/prod_id_1',
    headers={'X-API-Key': os.environ['TBIT_API_KEY']},
)
data = response.json()
<?php
$ch = curl_init('https://rest-api.tbit.app/v1/products/prod_id_1');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . getenv('TBIT_API_KEY'),
    ],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
الاستجابة
{
  "error": {
    "code": "NOT_FOUND"
  }
}

البحث الدلالي

يستخدم البحث تضمينات متجهية (embeddings) وليس مطابقة الكلمات المفتاحية: استعلام مثل "حفلة ديناصورات" يجد منتجات حفلات بطابع الديناصورات حتى لو لم يحتوِ أي عنوان على هذه الكلمات حرفيًا. للبحث حد قدره 30 طلبًا في الدقيقة لكل مفتاح (إضافة إلى الحد العام البالغ 100/دقيقة). قد تتضمن كل نتيجة قيمة score للصلة:

GET/v1/products/search
curl "https://rest-api.tbit.app/v1/products/search?q=fiesta%20de%20dinosaurios&limit=10" \
  -H "X-API-Key: $TBIT_API_KEY"
const response = await fetch('https://rest-api.tbit.app/v1/products/search?q=fiesta%20de%20dinosaurios&limit=10', {
  headers: {
    'X-API-Key': process.env.TBIT_API_KEY,
  },
});
const data = await response.json();
import axios from 'axios';

const { data } = await axios.get(
  'https://rest-api.tbit.app/v1/products/search?q=fiesta%20de%20dinosaurios&limit=10',
  {
    headers: {
      'X-API-Key': process.env.TBIT_API_KEY,
    },
  },
);
import os
import requests

response = requests.get(
    'https://rest-api.tbit.app/v1/products/search?q=fiesta%20de%20dinosaurios&limit=10',
    headers={'X-API-Key': os.environ['TBIT_API_KEY']},
)
data = response.json()
<?php
$ch = curl_init('https://rest-api.tbit.app/v1/products/search?q=fiesta%20de%20dinosaurios&limit=10');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . getenv('TBIT_API_KEY'),
    ],
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
الاستجابة
{
  "data": [
    {
      "_id": "prod_id_1",
      "kind": "product",
      "title": "طقم حفلة الديناصورات",
      "currency": "COP",
      "base_price": 95000,
      "score": 0.91
    }
  ]
}

تُرجع كل نقاط النهاية كائنات منتج بالشكل التالي. base_price رقم بسيط بعملة الكتالوج (مثل COP، بلا وحدات فرعية). لا يظهر compare_at_price إلا عندما يكون المنتج في عرض، وهو دائمًا أكبر من base_price:

الحقلالنوعالوصف
_idstringمعرّف المنتج
kindstring'product' أو 'service'
titlestringعنوان المنتج
descriptionstringوصف المنتج
mediaarrayمصفوفة من { url, alt?, type: 'image' | 'video', position? }
category_tagsstring[]وسوم الفئات
currencystringرمز العملة وفق ISO 4217
base_pricenumberالسعر كرقم بسيط (مثل COP، بلا وحدات فرعية)
compare_at_pricenumber?فقط عندما يكون المنتج في عرض؛ دائمًا أكبر من base_price
variantsarrayمصفوفة من { id, title, price, compare_at_price?, selected_options: [{ name, value }] }
created_atstringطابع زمني وفق ISO 8601
updated_atstringطابع زمني وفق ISO 8601