Vai al contenuto
Menu documenti

API REST

Convenzioni

Forma della risposta, paginazione, denaro, percentuali, date, ID, operazioni di inserimento o aggiornamento, limiti di velocità e versioning.

Richieste e risposteCollegamento a questa sezione#

  • Le richieste e le risposte sono JSON. Invia Content-Type: application/json con un corpo.
  • I nomi dei campi sono in camelCase: listPrice, accountCode, nextOffset.
  • I parametri di query sono stringhe semplici: ?limit=20&status=new.

Ogni risposta riuscita è un oggetto con data:

json
{
  "data": [],
  "nextOffset": 50,
  "currency": "GBP"
}
CampoQuando è presenteSignificato
dataSempreL'oggetto o la lista che hai richiesto.
nextOffsetListe con paginazionePassala come offset per ottenere la pagina successiva. null sull'ultima pagina.
currencyRisposte con prezzi nella valuta dell'area di lavoroCodice ISO 4217 per ogni campo monetario in data.

Gli ordini portano con sé il proprio campo currency, fissato quando l'ordine è stato effettuato.

PaginazioneCollegamento a questa sezione#

Le liste utilizzano limit e offset:

ParametroPredefinitoMassimo
limitil massimo50 per i prodotti, 100 per tutto il resto
offset0nessuno

Continua a richiedere con offset=nextOffset finché nextOffset non è null:

js
let offset = 0
const all = []
while (offset !== null) {
  const res = await fetch(
    `https://tradecatalog.app/api/v1/products?limit=50&offset=${offset}`,
    {
      headers: { Authorization: `Bearer ${process.env.TRADECATALOG_API_KEY}` },
    },
  )
  const page = await res.json()
  all.push(...page.data)
  offset = page.nextOffset
}

Il /products, nextOffset viene impostato ogni volta che una pagina è piena. Se la dimensione del catalogo è un multiplo esatto di limit, l'ultima richiesta restituisce una lista vuota data con nextOffset: null.

Alcune liste sono limitate. GET /orders copre i 200 ordini più recenti che corrispondono, e GET /price-changes i 100 più recenti.

DenaroCollegamento a questa sezione#

Il denaro è un intero in unità minori della valuta, quindi non ci sono errori di arrotondamento:

ValoreValutaSignifica
1234GBP£12.34
1850EUR€18.50
500JPY¥500 (nessuna unità minore)

Dividi per 10 elevato alla potenza dei decimali della valuta per visualizzarlo. In JavaScript, Intl.NumberFormat lo fa per te:

js
const format = (minor, currency) => {
  const f = new Intl.NumberFormat('en-GB', { style: 'currency', currency })
  const digits = f.resolvedOptions().maximumFractionDigits
  return f.format(minor / 10 ** digits)
}
format(1234, 'GBP') // "£12.34"

I prezzi sono quelli impostati dal fornitore nella sua lista prezzi. Se includono l’imposta o meno è definito dal taxLabel del workspace su GET /workspace: ad esempio “escl. IVA” (prima dell’imposta), “incl. IVA” (inclusa l’imposta), o vuoto quando il fornitore non mostra alcun riferimento all’imposta.

PercentualiCollegamento a questa sezione#

Le percentuali sono punti base: centesimi di percentuale, come interi.

ValoreSignifica
125012,5%
350035%
10000100%

DateCollegamento a questa sezione#

Le date sono stringhe ISO 8601 in UTC, come 2026-09-27T08:15:00.000Z. Il fuso orario del workspace è timezone su GET /workspace.

IdCollegamento a questa sezione#

Gli ID sono stringhe UUID. Ovunque un endpoint accetta un cliente, puoi passare l'ID del cliente o il suo codice account (non sensibile alle maiuscole), a seconda di ciò che ha il tuo sistema:

bash
curl "https://tradecatalog.app/api/v1/prices?customer=OAK01&sku=HX-8510" \
  -H "Authorization: Bearer $TRADECATALOG_API_KEY"

Creazione e aggiornamento (PUT)Collegamento a questa sezione#

PUT /products e PUT /customers creano o aggiornano in una sola chiamata, fino a 100 righe alla volta:

  • I prodotti sono abbinati da SKU (non sensibile alle maiuscole).
  • I clienti sono abbinati da codice account, altrimenti email, altrimenti nome.

Entrambi sono sicuri da ripetere. Inviare le stesse righe due volte dà lo stesso risultato; la seconda chiamata segnala solo che sono state aggiornate.

Un PUT scrive i campi che invii. Alcuni campi opzionali dei prodotti vengono cancellati quando li ometti, altri vengono mantenuti. Ogni pagina dell'endpoint elenca quali.

Limiti di velocitàCollegamento a questa sezione#

Ogni chiave può effettuare 120 richieste al minuto. Oltre a questo, ottieni 429 rate_limited con Retry-After: 60. Aspetta e riprova. Errori ha un helper per il ripristino.

Effettua scritture in batch dove possibile: un PUT con 100 prodotti conta come una sola richiesta.

VersioningCollegamento a questa sezione#

La versione è nel percorso: /api/v1.

  • All'interno di v1 apportiamo solo modifiche additive: nuovi endpoint, nuovi parametri opzionali, nuovi campi nelle risposte. Scrivi il tuo codice in modo da ignorare i campi che non conosce.
  • Un cambiamento non retrocompatibile avrebbe una nuova versione (/api/v2), con v1 che continua a funzionare e il cambiamento annunciato nel changelog.