Ledger
● Network · Developers

Open data. Open APIs.

Everything the Network page shows is a JSON endpoint you can call without a key. Advertisers get a Conversions API with a pixel and server-to-server postbacks, and a posting API for Pulse. Publishers integrate with two lines of HTML.

● Public API · no key · CORS open

Read the network.

Base URL https://affizy.network. JSON, cached server-side, 120 requests per minute per IP. Every response carries updated_at. Zones are identified by id only; no site names, wallet addresses or emails are ever exposed.

GET/api/public/statscache 60 s

Network totals since launch: impressions, clicks, publishers, advertisers, zones, revenue paid, plus impressions_last_hour, avg_cpm and ctr for the last 7 days.

Last 24 hours: impressions, clicks, CTR, average CPM, USD paid to publishers, $AFZY dropped and wallets that received drops.

24 UTC hour buckets of impressions and clicks. The current hour is partial.

Share of impressions by zone category, last 7 days (top 5 + Other).

Share of impressions by creative size, last 7 days.

Latest deposits (on-chain with tx hash, or credited by the team), publisher payouts with tx hash, and hourly $AFZY drop batches.

Counts we can measure: zones, zones active in 7 days, funded campaigns, publishers paid in 30 days, payouts settled, drop batches in 24 h, deposit poll interval.

The ledger feed: newest impressions (zone id only), clicks, deposits, payouts, drops. Optional ?since=<cursor> returns only newer impressions.

Impressions available in the last 7 days for a category and/or size, with the per-day figure. The campaign builder uses it.

curl
curl -s https://affizy.network/api/public/network/summary
curl -s "https://affizy.network/api/public/inventory?category=Crypto&size=300x250"
curl -s "https://affizy.network/api/public/events/recent?since=8580000"
live · /api/public/network/summary
loading…
● Publisher tag

Two lines of HTML.

Create a zone in the app, paste the tag where the ad should render. The script is async, a few KB, and loads after paint. data-refresh="60" rotates creatives every minute. HTML5 creatives are sandboxed iframes scaled to the container; images scale natively.

index.html
<script src="https://affizy.network/delivery.js"></script>
<div class="affizy-ad" data-zone="YOUR_ZONE_ID"></div>

<!-- optional: rotate every 60 s -->
<div class="affizy-ad" data-zone="YOUR_ZONE_ID" data-refresh="60"></div>
● Conversions API · advertisers

Attribute signups, deposits and leads to the banner.

Every click leaves with a click id, ?afz_click=<id>, appended to your landing URL. Keep it (the pixel does this for you for 7 days) and send it back with the event. Keys are generated in the app, campaign → Conversions tab, one active key per advertiser, rotate any time.

POST /api/v1/conversions
curl -X POST https://affizy.network/api/v1/conversions \
  -H "Authorization: Bearer afz_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "click_id": "9f1c…",      // from ?afz_click on your landing page
    "campaign_id": 62,         // fallback when the click id is unknown
    "event": "signup",         // signup · deposit · lead · purchase · custom
    "value_usd": 120,
    "external_id": "order-8812", // idempotent per advertiser
    "occurred_at": "2026-11-12T18:40:00Z"
  }'

How it behaves

Duplicate external_id → 200 with the existing conversion, never double-counted. Without a click id the conversion is recorded as direct on the campaign. The pixel variant lives in the same tab in the app: one line on the thank-you page, no code on your side.

Responses: 201 created · 200 duplicate · 400 validation · 401 bad key · 429 rate limit.

● Pulse API · post from your tools

Publish to Pulse from a script.

Pulse is the social layer inside the network. The posting API uses the same key as the Conversions API. Each published post costs 1 $AFZY from the account's balance and accounts are limited to 2 API posts per UTC day.

POST /api/v1/pulse/posts · multipart
curl -X POST https://affizy.network/api/v1/pulse/posts \
  -H "Authorization: Bearer afz_live_YOUR_KEY" \
  -F "text=New zone live on our site, paid per impression." \
  -F "image=@banner.png" \
  -F "external_id=post-2026-11-12-1"

Rules

text up to 600 characters, image JPEG/PNG/WEBP/GIF up to 5 MB, external_id makes the call idempotent.

Responses: 201 published · 200 duplicate · 402 not enough $AFZY · 429 daily quota. Available to advertiser accounts today, opening to every Pulse account next.

Building on Affizy?
Tell us what you need.