Naar de inhoud
Menu

Zoeken op de site

Typ om te zoeken in handleidingen, blog, API en product.

↑ ↓ om te bewegen · Enter om te openen · Esc om te sluiten

API-referentie

API

Producten

Lees je productcatalogus en zoek semantisch

Bekijken als Markdown

De product-endpoints ontsluiten de catalogus van je agent: de lijst opvragen, één product ophalen of er semantisch in zoeken. Alleen actieve (gepubliceerde) producten worden teruggegeven: concepten worden nooit getoond.

Publiceerbare sleutel: voor de lees-endpoints van de catalogus werkt de API-sleutel als een publiceerbare sleutel (hij identificeert je account en meet het gebruik; de catalogusgegevens zijn openbaar). Je kunt hem veilig in browsercode gebruiken, net als een publiceerbare sleutel van Stripe.

MethodePadBeschrijving
GET/v1/productsActieve producten opvragen
GET/v1/products/:idEén product ophalen
GET/v1/products/searchSemantisch zoeken in de catalogus

Producten opvragen

Geeft een gepagineerde lijst met actieve producten terug. Filter op categorielabel of op type:

ParameterTypeBeschrijving
limitnumber1-100, standaard 50
offsetnumberPaginering-offset, standaard 0
tagstringFilter op categorielabel
kindstring'product' of '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);
Response
{
  "data": [
    {
      "_id": "prod_id_1",
      "kind": "product",
      "title": "Kit fiesta dinosaurios",
      "description": "Decoración completa para fiesta infantil",
      "media": [
        { "url": "https://api.tbit.app/media/dino-kit.jpg", "alt": "Kit fiesta", "type": "image", "position": 0 }
      ],
      "category_tags": ["fiestas", "infantil"],
      "currency": "COP",
      "base_price": 95000,
      "compare_at_price": 120000,
      "variants": [
        {
          "id": "var_id_1",
          "title": "Grande",
          "price": 95000,
          "selected_options": [{ "name": "Tamaño", "value": "Grande" }]
        }
      ],
      "created_at": "2024-09-01T12:00:00Z",
      "updated_at": "2024-09-01T12:00:00Z"
    }
  ],
  "pagination": {
    "total": 134,
    "limit": 20,
    "offset": 0,
    "has_more": true
  }
}

Eén product ophalen

Haal een product op met zijn id. Concepten, onbekende id's en producten van een andere agent geven 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);
Response
{
  "error": {
    "code": "NOT_FOUND"
  }
}

Semantisch zoeken

Het zoeken gebruikt vector-embeddings, geen trefwoordovereenkomst: een zoekopdracht als "dinosaurusfeest" vindt feestproducten met een dinosaurusthema, ook als geen enkele titel precies die woorden bevat. Zoeken heeft een limiet van 30 verzoeken per minuut per sleutel (naast de algemene limiet van 100/min). Elk resultaat kan een relevantiescore (score) bevatten:

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);
Response
{
  "data": [
    {
      "_id": "prod_id_1",
      "kind": "product",
      "title": "Kit fiesta dinosaurios",
      "currency": "COP",
      "base_price": 95000,
      "score": 0.91
    }
  ]
}

Alle endpoints geven productobjecten terug met de volgende vorm. base_price is een gewoon getal in de valuta van de catalogus (bijv. COP, zonder kleinere eenheden). compare_at_price staat er alleen als het product in de aanbieding is en is altijd hoger dan base_price:

VeldTypeBeschrijving
_idstringProduct-id
kindstring'product' of 'service'
titlestringProducttitel
descriptionstringProductbeschrijving
mediaarrayArray van { url, alt?, type: 'image' | 'video', position? }
category_tagsstring[]Categorielabels
currencystringISO 4217-valutacode
base_pricenumberPrijs als gewoon getal (bijv. COP, zonder kleinere eenheden)
compare_at_pricenumber?Alleen bij een aanbieding; altijd hoger dan base_price
variantsarrayArray van { id, title, price, compare_at_price?, selected_options: [{ name, value }] }
created_atstringISO 8601-tijdstempel
updated_atstringISO 8601-tijdstempel