Probeer alles hier, met dit token
Elke aanroep hieronder heeft een knop die hem echt doet. Wat je terugkrijgt komt van de server zelf, niet uit een voorbeeld in de tekst — foutmeldingen dus ook.
s8rI2nB8pula3HsS0Ix8fQnOgvF1yhZuuQ7DNLNSiKb6boAO
Dit token wordt vervangen zodra je deze pagina herlaadt, en er kan niet mee besteld worden. Bouw er dus niets mee: zet dropshipping aan op je eigen account voor een token dat blijft.
Authenticatie
Elke aanroep draagt je API-token als Bearer-header. Je vindt dat token in het dropship-paneel onder API.
curl -H "Authorization: Bearer JOUW_TOKEN" https://api.l33d.be/api/dropship/status
- Bedragen staan in centen, inclusief btw.
- Met een testtoken gaat alles naar de testomgeving: niets wordt echt besteld of betaald. GET /status zegt in environment waar je zit.
- Fouten komen terug als JSON met error: 401 ongeldig token, 404 niet gevonden of niet van jou, 422 foute invoer, 429 te veel aanvragen, 503 onderhoud (probeer opnieuw na Retry-After).
Endpoints
https://api.l33d.be/api/dropship
Account en catalogus
GET /status
Token testen: je account, je saldo, of factuur en krediet mogen, en live of test.
Commando
Antwoord
GET /products
Alle actieve producten met prijzen in centen, de volledige staffel, de foto en de gravurezone.
Commando
Antwoord
GET /addresses
Je adresboek van eindklanten.
Commando
Antwoord
Ontwerp
POST /position-sessions
Maakt een sessie voor een product en geeft een whitelabel link naar de volledige editor.
Commando
Antwoord
GET /position-sessions/{token}
Het resultaat: status, de volledige layout en een voorvertoning.
Commando
Antwoord
POST /preview
Een voorvertoning zonder te bestellen. Een uur geldig.
Commando
Antwoord
Bestellingen
POST /orders
Bestelling plaatsen.
Commando
Antwoord
GET /orders
Je bestellingen met status, eindklant en track & trace.
Commando
Antwoord
GET /orders/{number}
Eén bestelling: regels, kortingen, verzending, totaal, betaling en can_cancel.
Commando
Antwoord
POST /orders/{number}/cancel
Annuleren zolang can_cancel true is. Reason is optioneel.
{"reason":"Klant annuleerde"}
Krediet
GET /credits
Je saldo, of je krediet mag gebruiken, en de laatste 100 transacties.
Commando
Antwoord
POST /credits/topup
Opwaarderen: geeft een code en de url waar betaald wordt.
Commando
Antwoord
GET /credits/topup/{code}
De stand van die opwaardering en je nieuwe saldo.
Commando
Antwoord
Adresboek en prijzen
POST /addresses
Adres toevoegen aan je adresboek.
{"label":"Bakkerij","first_name":"Jan","last_name":"Peeters","street":"Kerkstraat","house_number":"12","postal_code":"3500","city":"Hasselt","country":"BE"}
PUT /addresses/{id}
Adres wijzigen, met dezelfde velden.
DELETE /addresses/{id}
Adres verwijderen.
PUT /products/{id}/price
Eigen verkoopprijs voor één product; null zet hem terug op je marge.
{"price_cents":1299}
PUT /markup
Je marge in procent, voor alles zonder eigen prijs.
{"markup_percent":40}
Zelf geen editor bouwen? Dat is de aanbevolen weg. Zie Logo positioneren
Bestelling plaatsen
De prijs in het antwoord is wat jij ons betaalt: staffel, jouw korting, toeslagen, btw en verzending naar het adres van de eindklant. Wat jij je eigen klant aanrekent staat daar los van. Je hoeft zelf niets te herrekenen.
Standaard gaat het van je credits en start de productie meteen. Is je saldo te laag, of vraag je om een betaallink of een factuur, dan wacht de bestelling op betaling.
Optie A — via een bevestigde positioneer-sessie. Ondersteunt alles: meerdere teksten, meerdere logo's, twee zijden.
curl -X POST https://api.l33d.be/api/dropship/orders \
-H "Authorization: Bearer JOUW_TOKEN" -H "Content-Type: application/json" \
-d '{
"reference": "WC-1042",
"payment": "credits",
"address": { "first_name": "Jan", "last_name": "Peeters",
"street": "Kerkstraat", "house_number": "12",
"postal_code": "3500", "city": "Hasselt", "country": "BE" },
"items": [
{ "quantity": 2, "position_session_token": "..." }
]
}'
Optie B — tekst en één logo, rechtstreeks in de aanroep.
{
"items": [
{ "product_id": 23, "quantity": 2, "text": "Voor opa" },
{ "product_id": 23, "quantity": 1,
"logo_url": "https://jouwsite.be/logo.png",
"logo_position": { "cx": 0.5, "cy": 0.5, "w": 0.4, "angle": 90 } }
]
}
- payment: credits (standaard), link (het antwoord bevat pay_url) of invoice (als factuur voor jou aan staat).
- Dezelfde reference binnen de dag geeft de bestaande bestelling terug met already_known: true. Opnieuw proberen na een time-out is dus veilig.
- Een logo_url halen wij zelf op, of stuur logo_base64. PNG, JPG of WebP, maximaal 5 MB. Zonder logo_position centreren we het in de gravurezone.
- Heeft een product kleuren (colors in GET products), geef dan color_id mee. Zonder color_id nemen we de standaardkleur.
- Het antwoord (201) bevat order_number, total_cents, paid, insufficient_credits, credit_balance_cents, pay_url en track_url. In plaats van een volledig adres mag je ook address_id uit je adresboek meesturen.
Eén bestelling: regels, totalen en betaling. Annuleren kan zolang can_cancel true is; krediet komt niet vanzelf terug.
GET https://api.l33d.be/api/dropship/orders/{number}
POST https://api.l33d.be/api/dropship/orders/{number}/cancel
{ "reason": "Klant annuleerde" }
< { "ok": true, "status": "cancelled", "order": { ... } }
Krediet opwaarderen
Vraag een code aan, open de url in de browser en vraag daarna de stand op. Betaald is pas betaald als deze aanroep het zegt.
# 1. code aanvragen
POST https://api.l33d.be/api/dropship/credits/topup
{ "amount_cents": 5000 }
< { "ok": true, "code": "…", "url": "https://l33d.be/dropshipping/opwaarderen/…", "status": "open", "test": false }
# 2. url openen in de browser: daar wordt betaald
# 3. de stand opvragen tot betaald of mislukt
GET https://api.l33d.be/api/dropship/credits/topup/{code}
< { "ok": true, "status": "betaald", "balance_cents": 12500 }
status: open, betalen, betaald, mislukt of verlopen. Een code is twee uur geldig. In de testomgeving wordt de betaling op die pagina nagebootst.
Webhooks
Stel in het dropship-paneel een webhook-URL in. Wij sturen een JSON-bericht bij elke statuswijziging en zodra er track & trace is.
Controleer de afzender met de header X-L33D-Signature: een sha256-HMAC over de rauwe body, met je API-token als sleutel.
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_L33D_SIGNATURE'] ?? '';
if (!hash_equals(hash_hmac('sha256', $body, 'JOUW_TOKEN'), $sig)) {
http_response_code(401); exit;
}
$event = json_decode($body, true);
// X-L33D-Event / event: order.status_changed | order.tracking_added | test
// data: order_number, status, total_cents, tracking_code, tracking_url, end_customer