Skip to content

We call youDataFlair calls YOUR server. You implement this endpoint. You do not call DataFlair.

Go live checklist ​

Work through this list before real advertisers book your inventory. Each item leads with the problem it prevents.

Connection ​

  • [ ] A rejected connection. GET /health returns a body that DataFlair accepts. The card shows Connected, not Re-verify needed. See GET /health.
  • [ ] A leaked key. The key is least privilege (read, create-draft and report), it is revocable without downtime, and it is stored hashed on your side. See Authentication.
  • [ ] A refused base URL. The base URL starts with https://, has no # fragment, and resolves to a public address.
  • [ ] A broken call after a redirect. Your endpoints answer at the exact base URL, with no redirect. DataFlair does not follow redirects.

Inventory ​

  • [ ] Bookings that start a day early or late. timezone in /health is the real IANA timezone your platform books flights in. See Conventions.
  • [ ] A mapping that breaks. Each inventory_id is stable. You do not reuse an id for a different slot. See Inventory identity.
  • [ ] A creative that does not fit. Each slot lists every size it accepts in sizes.
  • [ ] A blocked booking. currency in /health matches the currency you book in. DataFlair stops on a mismatch.
  • [ ] A dead slot that shows as bookable. A slot you no longer sell returns status: "archived", so DataFlair can hide it.

Booking ​

  • [ ] Inventory that serves before a person approves it. POST /orders creates draft, paused or inactive objects only. It returns status: "DRAFT" for the order and every line. See Draft only.
  • [ ] A duplicate order. A repeat of the same idempotency_key and body returns the same ids. The same key with a different body returns 409. A new key with the same external_ref updates the existing order and line.
  • [ ] A lost reconciliation. line_item_id does not change for a booked line, even when a person renames the line in your console.
  • [ ] A broken click. You store the creative tag exactly as sent and keep the /go/{code} link. See How creatives work.
  • [ ] A surprise in your console. Your ad-ops team knows that DataFlair creates drafts, and that a person must review and activate them.

Reporting ​

  • [ ] Billing on the wrong numbers. POST /reports returns the impressions and clicks that your ad server served for each line. It does not return blended totals. See POST /reports.
  • [ ] A report that cannot be matched. Each row carries the same line_item_id you returned when you created the line.

Errors and load ​

  • [ ] A retry storm. You return 429 with a Retry-After header when you need DataFlair to slow down.
  • [ ] A failure nobody can read. Every error has a JSON body with code and message, and message holds no secrets. See Errors.
  • [ ] A slow answer that counts as down. Each call connects within 10 seconds and finishes within 30. See Retries and idempotency.

Before you tell DataFlair you are ready ​

  • [ ] A surprise about what runs today. You have read what is live today on the overview. DataFlair calls GET /health and GET /inventory when you connect. It does not call forecast, booking or reporting yet.
  • [ ] A gap in your own testing. You have followed Testing your implementation.

Docs version 1.0.1