Partnerite dokumentatsioon
Kõik, mida on vaja oma müügi- ja tagasiostukuulutuste avaldamiseks QuizzBuy-l ning meile teie liiklusele omistatud tellimustest teatamiseks.
1. API võtme hankimine
Võtke ühendust oma QuizzBuy kontaktisikuga (või kasutage kontaktivormi). Genereerime teile võtme kujul zzb_live_… — see edastatakse teile ainult üks kord, hoidke seda turvalises kohas. Lisage see igale päringule HTTP päisesse:
Authorization: Bearer zzb_live_VOTRE_CLE2. Oma võtme kontrollimine
curl https://quizzbuy.com/api/v1/me \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# Réponse
{
"company": { "id": "…", "name": "Votre société", "slug": "votre-societe" },
"commission_rate": 0.05,
"click_param": "zzb_click"
}3. Kuulutuste avaldamine
Kuulutus on kas tagasiostu pakkumine (BUYBACK — võtate seadme tagasi kokkulepitud hinnaga) või müügi pakkumine (SALE — taastatud toode, mida müüte). Saatmine toimub upsert loogikaga: sama externalId uuesti saatmine uuendab kuulutust.
curl -X POST https://quizzbuy.com/api/v1/listings \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"externalId": "ref-interne-123",
"type": "BUYBACK",
"title": "Reprise iPhone 15 Pro 256 Go",
"brand": "Apple",
"model": "iPhone 15 Pro",
"category": "SMARTPHONE",
"storage": "256 GB",
"condition": "GOOD",
"priceCents": 52000,
"currency": "EUR",
"url": "https://votre-site.fr/reprise/iphone-15-pro",
"country": "FR"
}'category: SMARTPHONE, LAPTOP, SMARTWATCH, AUDIO või GAMING.condition: LIKE_NEW, EXCELLENT, GOOD, FAIR või BROKEN.priceCents: hind sentides (52000 = 520 €).- Iga uus kuulutus (või muudatus) läbib enne avaldamist modereerimise.
Uuendamine, loetlemine või deaktiveerimine:
# Lister vos annonces
curl "https://quizzbuy.com/api/v1/listings?type=BUYBACK&status=APPROVED" \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# Mise à jour partielle
curl -X PATCH https://quizzbuy.com/api/v1/listings/ID_ANNONCE \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "priceCents": 49000 }'
# Désactiver (soft delete)
curl -X DELETE https://quizzbuy.com/api/v1/listings/ID_ANNONCE \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"4. Klõpsude jälgimine
Kui QuizzBuy külastaja klõpsab teie saidile suunduva lingi peale, sisaldab sihtleht klõpsu identifikaatorit:
https://votre-site.fr/vendre?zzb_click=6f1e0c9a-3b2d-4e8f-9a10-abcdef123456Salvestage see väärtus (küpsis või seanss teie saidi poolel, soovituslik kestus: 45 päeva). Just see võimaldab tellimuse omistamist. Parameetri nime (vaikimisi zzb_click) saab soovi korral kohandada.
5. Tellimusest teatamine (postback S2S)
Niipea kui klient teeb tellimuse (ost või kinnitatud tagasiostusoov) ja teil on olemas zzb_click, kutsuge meie postback välja oma serverist:
curl -X POST https://quizzbuy.com/api/v1/postback \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"click_id": "6f1e0c9a-3b2d-4e8f-9a10-abcdef123456",
"type": "BUYBACK",
"amount_cents": 52000,
"currency": "EUR",
"order_ref": "CMD-2026-000123"
}'
# Réponse 201
{ "conversion_id": "…", "status": "TO_INVOICE", "commission_cents": 2600 }- Omistamise aken: 45 päeva pärast klõpsu; pärast seda vastatakse
422 attribution_window_expired. order_refpeab olema unikaalne: duplikaat tagastab409 duplicate_order_ref(idempotentsus — võite riskita uuesti proovida).type:SALEostu jaoks,BUYBACKtagasiostu jaoks.currency: ainult EUR — iga muu valuuta lükatakse tagasi (422 unsupported_currency).
6. Testimine sandbox'is
Lisage postback'ile "test": true: päring valideeritakse täielikult (võti, click_id, 45-päevane aken), kuid ühtegi konversiooni ei salvestata ega arveldata.
{ "click_id": "…", "type": "SALE", "amount_cents": 10000, "order_ref": "TEST-1", "test": true }
# → 200 { "test": true, "valid": true, "commission_cents": 500 }7. Veakoodid
| Kood | Viga | Selgitus |
|---|---|---|
| 400 | invalid_input | Vigane päringu keha (üksikasjad vastuses). |
| 401 | unauthorized | API võti puudub, on tühistatud või kehtetu. |
| 404 | click_not_found / not_found | click_id või kuulutus tundmatu (või ei kuulu teile). |
| 409 | duplicate_order_ref | Tellimusest on juba teatatud. |
| 422 | attribution_window_expired | Klõps on vanem kui 45 päeva. |
| 429 | rate_limited | Liiga palju päringuid — proovige uuesti minuti pärast. |
8. Arveldamine
Iga omistatud konversioon genereerib komisjonitasu (lepinguline määr, nähtav /api/v1/me kaudu). QuizzBuy saadab teile perioodilise koondarve kinnitatud konversioonide kohta. Küsimuste korral: võtke meiega ühendust.
9. Turuplats — müük QuizzBuy'l
SALE kuulutused, mille quantity > 0, müüakse otse QuizzBuy'l (kliendi makse meie poolel, netosumma ülekanne pärast komisjonitasu). Täiendavad väljad: quantity (laoseis), color, grade (A/B/C), batteryHealth (%), warrantyMonths. Kuulutus lingitakse automaatselt vastava tootekaardiga (mark + mudel + mahutavus + värv).
# Mettre à jour le stock (sans re-modération)
curl -X PATCH https://quizzbuy.com/api/v1/listings/ID_ANNONCE/stock \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "quantity": 12 }'
# Ajouter une photo (multipart, max 5 × 5 Mo, jpeg/png/webp)
curl -X POST https://quizzbuy.com/api/v1/listings/ID_ANNONCE/images \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-F "file=@photo.jpg"10. Webhookid — müügiteavitused
Registreerige HTTPS lõpp-punkt; teavitame teid iga etapi kohta tellimusega, mis sisaldab teie tooteid (order.created, order.paid, order.cancelled). Saladus (secret) edastatakse ainult loomisel — salvestage see.
curl -X POST https://quizzbuy.com/api/v1/webhooks \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "url": "https://votre-site.fr/webhooks/quizzbuy", "events": ["order.paid"] }'
# Réponse (secret affiché une seule fois)
{ "webhook": { "id": "…", "secret": "whsec_…", "events": ["order.paid"] } }
# Tester
curl -X POST https://quizzbuy.com/api/v1/webhooks/ID_WEBHOOK/test \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"Iga saadetis on allkirjastatud. Kontrollige päist X-ZZbuy-Signature (t=timestamp,v1=hex):
// Node.js
const [t, v1] = signature.split(",").map((p) => p.split("=")[1]);
const expected = crypto
.createHmac("sha256", WEBHOOK_SECRET)
.update(`${t}.${rawBody}`)
.digest("hex");
const valid =
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1)) &&
Math.abs(Date.now() / 1000 - Number(t)) < 300; // anti-replay 5 minEbaõnnestumise korral (≠ 2xx) proovime uuesti astmelise viivitusega: 1 min, 5 min, 30 min, 2 h, 12 h. Saate ka müügiteavituse e-kirja.
11. Tellimuste töötlemine
Loetlege oma tellimuse read, kinnitage vastuvõtt ning seejärel saatke koos jälgimisnumbriga (klienti teavitatakse automaatselt). Tarneaadress on nähtav alles pärast makse sooritamist.
# Lister les commandes à traiter
curl "https://quizzbuy.com/api/v1/orders?status=PENDING" \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# Accuser réception
curl -X POST https://quizzbuy.com/api/v1/orders/ID_LIGNE/ack \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# Expédier
curl -X POST https://quizzbuy.com/api/v1/orders/ID_LIGNE/ship \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "carrier": "Colissimo", "trackingNumber": "6A123456789FR" }'12. Hallatud tagasiost (trade-in)
Hallatud tagasiost läheb kaugemale lihtsast ümbersuunamise teel toimuvast tagasiostust: eraisik esitab oma seadme QuizzBuy kaudu ning teie haldate kogu toimikut API abil (aktsepteerimine, vastuvõtmine, vastupakkumine, makse). Kliendile kuvatav hind on esitamise hetkel lukustatud vastavalt teie tagasiostuhinnakirjale (vt §14); saate seda alandada alles pärast vastuvõtmist põhjendatud vastupakkumise kaudu.
Kõik lõpp-punktid autentitakse teie API võtmega (Authorization: Bearer zzb_live_…) ja tagastavad ainult teie toimikud.
Elutsükkel
SUBMITTED → ACCEPTED → SHIPPED → RECEIVED → PAID. Kaks harusuunda: REJECTED (keeldumine enne saatmist) ja COUNTER_OFFER (vastupakkumine pärast ülevaatust, mille eraisik kas aktsepteerib — seejärel PAID — või lükkab tagasi — seadme tagastamine, CANCELLED).
| Staatus | Tähendus |
|---|---|
| SUBMITTED | Eraisiku loodud taotlus, ootab teie otsust. |
| ACCEPTED | Olete kinnitanud tagasiostu; klient peab seadme saatma. |
| SHIPPED | Eraisik on sisestanud oma jälgimisnumbri. |
| RECEIVED | Olete seadme vastu võtnud; ülevaatus käib. |
| COUNTER_OFFER | Pärast ülevaatust pakute muudetud (madalama) summa. |
| PAID | Eraisikule on makse tehtud — toimik suletud. |
| REJECTED | Taotlus lükati tagasi enne saatmist (ei vasta tingimustele, pettus jne). |
| CANCELLED | Tühistatud (vastupakkumisest keeldumine, seadme tagastamine). |
Loetlemine ja vaatamine
# Lister vos reprises (plus récentes d'abord)
curl "https://quizzbuy.com/api/v1/trade-ins?status=SUBMITTED&limit=50&offset=0" \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# Réponse
{
"total": 3,
"trade_ins": [
{
"trade_in_id": "…",
"reference": "TI-2026-000042",
"status": "SUBMITTED",
"device": {
"brand": "Apple", "category": "SMARTPHONE", "model": "iPhone 15 Pro",
"storage": "256 GB", "condition": "GOOD",
"functional_status": "FULLY_WORKING", "battery_health": 92, "imei": "…"
},
"offer_cents": 52000,
"currency": "EUR",
"price_locked_until": "2026-08-05T12:00:00.000Z",
"country": "FR",
"customer": { "email": "…", "first_name": "…", "last_name": "…", "locale": "fr" },
"comment": null,
"counter_offer_cents": null, "counter_reason": null,
"tracking_carrier": null, "tracking_number": null,
"shipping_label_url": null, "payout_ref": null,
"accepted_at": null, "shipped_at": null, "received_at": null,
"paid_at": null, "cancelled_at": null,
"created_at": "2026-07-21T12:00:00.000Z"
}
]
}
# Détail d'une reprise
curl https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# → { "trade_in": { … } }status(valikuline filter): väärtus ülaltoodud tabelist — vastasel juhul400 invalid_status.limit: maksimaalselt 200 (vaikimisi 50);offsetlehekülgede jaoks.customer(eraisiku kontaktandmed) on nähtav ainult selles partneri API-s, mitte kunagi webhookides.
Üleminekud
Iga tegevus on POST ja tagastab { "ok": true, "trade_in": { … } }. Üleminek sobimatust staatusest tagastab 409 invalid_status (koos tegeliku current väärtusega). Eraisikut teavitatakse e-kirjaga igal etapil.
# 1. Accepter (depuis SUBMITTED) — shippingLabelUrl facultatif (étiquette prépayée)
curl -X POST https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE/accept \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "shippingLabelUrl": "https://votre-site.fr/labels/ti-42.pdf" }'
# 2. Réceptionner l'appareil (depuis SHIPPED ou ACCEPTED)
curl -X POST https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE/receive \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"
# 3a. Payer le montant garanti (depuis RECEIVED) — clôt la reprise
curl -X POST https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE/pay \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "payoutRef": "VIR-2026-000123" }'
# 3b. …ou contre-offrer après inspection (depuis RECEIVED) — montant < offre garantie
curl -X POST https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE/counter \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{ "amountCents": 42000, "reason": "Rayures écran non déclarées" }'
# Refuser avant envoi (depuis SUBMITTED uniquement)
curl -X POST https://quizzbuy.com/api/v1/trade-ins/ID_REPRISE/reject \
-H "Authorization: Bearer zzb_live_VOTRE_CLE"- accept : ainult staatusest
SUBMITTED.shippingLabelUrlvalikuline (URL, ≤ 500 tähemärki). - receive : staatusest
SHIPPEDvõiACCEPTED(kliendi poolt deklareerimata saatmine/üleandmine). - counter : staatusest
RECEIVED.amountCentspeab olema rangelt madalam kuioffer_cents, vastasel juhul400 counter_not_lower;reasonkohustuslik (1–500 tähemärki). Seejärel on eraisik see, kes aktsepteerib või keeldub oma jälgimislehelt. - pay : staatusest
RECEIVED.payoutRefkohustuslik (ülekande viide, 1–120 tähemärki). - reject : ainult staatusest
SUBMITTED— keha pole vajalik.
13. Tagasiostu webhookid (trade_in.*)
Samad webhookid (§10, sama X-ZZbuy-Signature allkiri) katavad hallatud tagasiostu. Tellige kõik või osa trade_in.* sündmustest lõpp-punkti loomisel:
curl -X POST https://quizzbuy.com/api/v1/webhooks \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"url": "https://votre-site.fr/webhooks/quizzbuy",
"events": ["trade_in.created", "trade_in.shipped", "trade_in.counter_accepted"]
}'| Sündmus | Käivitaja |
|---|---|
| trade_in.created | Uus taotlus, mille eraisik esitas (staatus SUBMITTED). |
| trade_in.shipped | Eraisik on sisestanud oma saatmise jälgimisandmed. |
| trade_in.counter_accepted | Eraisik on teie vastupakkumise aktsepteerinud. |
| trade_in.counter_declined | Eraisik on teie vastupakkumisest keeldunud (seadme tagastamine). |
| trade_in.cancelled | Tagasiost tühistatud. |
Saadetise keha (eraisiku kontaktandmed ei sisaldu selles — hankige need GET /api/v1/trade-ins/:id kaudu):
{
"trade_in_id": "…",
"reference": "TI-2026-000042",
"status": "SHIPPED",
"device": {
"brand": "Apple", "category": "SMARTPHONE", "model": "iPhone 15 Pro",
"storage": "256 GB", "condition": "GOOD",
"functional_status": "FULLY_WORKING", "battery_health": 92, "imei": "…"
},
"offer_cents": 52000,
"currency": "EUR",
"price_locked_until": "2026-08-05T12:00:00.000Z",
"country": "FR"
}14. Oma tagasiostuhinnakirja edastamine
Alternatiivne « push » viis meie poolt tõmmatavale (pulled) CSV vookäigule: saatke otse oma tagasiostu hinnakiri. Iga rida sisaldab 4 summat vastavalt seadme seisukorrale. Hinnad täidavad sama tabelit, mida automaatne sünkroniseerimine — seega ilmuvad need kohe võrdlusvahendisse ja toimivad lukustatud hinnana hallatud tagasiostu jaoks (§12). Toiming on upsert (mark, kategooria, mudel, mahutavus) alusel.
curl -X PUT https://quizzbuy.com/api/v1/buyback/prices \
-H "Authorization: Bearer zzb_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"prices": [
{
"brand": "Apple",
"category": "SMARTPHONE",
"model": "iPhone 15 Pro",
"storage": "256 GB",
"priceNewCents": 60000,
"priceGoodCents": 52000,
"priceFairCents": 40000,
"priceBrokenCents": 15000,
"currency": "EUR",
"url": "https://votre-site.fr/reprise/iphone-15-pro"
}
]
}'
# Réponse
{ "ok": true, "upserted": 1 }prices: 1 kuni 2000 rida päringu kohta.category: SMARTPHONE, TABLET, LAPTOP, SMARTWATCH, AUDIO või GAMING.priceNewCents(uus),priceGoodCents(hea),priceFairCents(kasutatud),priceBrokenCents(katki) — sentides, ≥ 0.storagejaurlvalikulised; mahutavus normaliseeritakse automaatselt (nt « 256go » → « 256 GB »).