Runtime & language — language-agnostic; anything with outbound HTTP+JSON (Node.js, Python, PHP 7.4+, Go, Java/Kotlin, Ruby, .NET). Standard HTTP client + JSON, no SDK. UTF-8 everywhere (multilingual conversations, Cyrillic, CJK).
Network (critical) — outbound HTTPS, port 443 to our API domain (allowlist it if egress is restricted); working DNS; TLS 1.2+ with certificate validation (public CA — don't disable verification); behind a corporate proxy set HTTPS_PROXY. No inbound ports needed, no static IP needed.
Server resources — negligible: one JSON request per turn, ~1 outbound connection and a few KB per message. LLM inference, catalog and vectors live on our side — no GPU/RAM/disk on yours.
Keys & secrets — Authorization: Bearer <key>. Keep the key in env / a secret store (Vault, Secrets Manager, K8s secrets); never in the repo, client code, logs or URLs. Sandbox and prod keys differ.
Timeouts & resilience — LLM-bound latency 0.8–3 s (rarely 5–8). Client timeout ≥ 10 s. Fail-soft is required: on error, timeout or ad:null show the reply without a card. Retry only on network/5xx, ≤ 1 time with backoff; never retry 429 or ad:null. Optionally forward end-user IP (X-Forwarded-For) and session_id for fair limits.
Frontend / card rendering — evergreen browsers (last 2 versions), mobile Safari 15+, Chrome Android; ES2017+, fetch. Provide a container in the answer flow. Mandatory: visible "Sponsored" label, rel="sponsored noopener", target="_blank". Click only via our /c/{token} — no rewriting, no wrapping in your redirect.
CSP (if enabled) — connect-src: API domain; script-src: ads.js domain (mode B); img-src: merchant CDN domains or https: — otherwise product images won't render.
Limits & data — request body ≤ 256 KB (last ~8–12 turns); one /api/chat call per turn; geo as ISO alpha-2. No PII required. Rate limit per key/IP and a daily spend cap are in place from day one — see Earnings & limits.
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article