UpWolf Pro vývojáře

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.

1Vystavíte feed Na start stačí dva endpointy: co je živé a detail jednoho inzerátu.
2Čteme ho podle plánu Jen pull, po pár minutách. Nikdy nás nevoláte — i když můžete, když to chcete rychleji.
3Kreativa a kampaň Text i obrázek vznikají z vašeho textu, kampaň pak běží na vašem reklamním účtu.
4A sama se zastaví Inzerát zavřený nebo obsazený? Kampaň se do pár minut zastaví, místo aby dojela rozpočet.

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.

shell
# 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
<?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";
javascript
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.

shell
# 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

Jedna věc, která se z feedu vyčíst nedá: které inzeráty mají dostat zaplacenou kampaň. To je vaše byznysové rozhodnutí a cestuje endpointem s kandidáty na kampaň. Všechno ostatní si odvodíme sami.