Napojte svůj portál na UpWolf
Vystavíte malé read-only JSON API se svou inzercí. UpWolf ho čte, napíše reklamu, vyrenderuje kreativu, spustí kampaň na Metě — a vypne ji, jakmile je inzerát obsazený. Nic vám neposíláme, nic vám neběží na serverech.
Ukázka na jeden příkaz
Na téhle doméně běží referenční feed, který splňuje celý kontrakt. Namiřte na něj curl, prohlížeč nebo vlastního klienta — a až budete mít vlastní implementaci, pusťte na ni validátor a uvidíte, jak daleko jste.
# co je právě teď živé
curl -s "https://upwolf.com/dev/sandbox/feed/offers" \
-H "Authorization: Bearer sandbox-demo-token"
# detail jedné nabídky
curl -s "https://upwolf.com/dev/sandbox/feed/offers/DEMO-1001" \
-H "Authorization: Bearer sandbox-demo-token"
<?php
$ch = curl_init('https://upwolf.com/dev/sandbox/feed/offers/DEMO-1001');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['authorization: Bearer sandbox-demo-token'],
]);
$offer = json_decode(curl_exec($ch), true);
echo $offer['name'], ' — ', $offer['company']['name'], "\n";
const res = await fetch('https://upwolf.com/dev/sandbox/feed/offers/DEMO-1001', {
headers: { authorization: 'Bearer sandbox-demo-token' },
});
const offer = await res.json();
console.log(offer.name, '—', offer.company.name);
Pět endpointů a můžete je nasazovat po jednom
Dva jsou povinné — bez nich není co inzerovat. Zbytek rozhoduje o tom, jak dobře kampaně fungují, a u každého je napsané, co se stane, když chybí. Dokud endpoint stavíte, odpovídejte 404: bereme to jako „zatím neumíme", zjistíme si, co existuje, a zbytek degradujeme.
| Endpoint | Úroveň | Co nám dává | Bez něj |
|---|---|---|---|
| GET offers | povinné | Všechno, co je právě teď živé, v jedné odpovědi. | Bez něj nefunguje nic. |
| GET offers/{external_id} | povinné | Všechno, z čeho se dá napsat reklama a zamířit ji. | Bez něj nefunguje nic. |
| GET offers?updated_since={iso8601}&page={n} | doporučené | Které nabídky se od daného okamžiku změnily — jen identita a verze. | Kreativa se po úpravě nabídky nikdy neobnoví. |
| GET campaign-candidates?updated_since={iso8601}&page={n} | doporučené | Které nabídky mají dostat kampaň, s jakým rozpočtem a na jak dlouho. | Žádná kampaň nevznikne sama — každá musí přijít pushem na naše API nebo vzniknout ručně. |
| GET offers/{external_id}/applications-stats?from={iso8601} | doporučené | Kolik reakcí nabídka nasbírala od daného okamžiku. | Kampaně dojedou celé okno a utratí celý rozpočet i u nabídek, které jsou dávno obsazené, a nikdy se neuplatní pojistka, která kampaň vůbec nezaloží u nabídky obsazující se sama. |
Stavíte to s AI nástrojem?
Pak mu místo téhle stránky předejte strojově čitelný kontrakt. Všechny tři popisují přesně to, co vrací sandbox nahoře — generují se ze stejné definice.
# celý kontrakt v jednom souboru (konvence, endpointy, pole, degradace)
curl -s https://upwolf.com/dev/feed.md
# OpenAPI 3.1
curl -s https://upwolf.com/dev/openapi.json
# JSON Schema jednotlivých zdrojů
curl -s https://upwolf.com/dev/schema/Offer
Co dál
- Přečíst referenci endpointů — konvence, požadavek a odpověď u každého endpointu.
- Projít tabulku polí — co které pole dělá a co se bez něj rozbije.
- Vzít referenční implementaci — jeden soubor v PHP, žádné závislosti, tři TODO.
- Pustit validátor — namiřte ho na svůj feed dřív, než komukoliv řeknete, že je hotovo.