Authentication
gsk_live_runs real scans, persists them and counts against your rate limit.gsk_test_validates the request exactly as live would, then returns a deterministic sandbox result markedsandbox: true. Nothing is stored and no rate limit is consumed.
The flow
1
Start a scan
POST /api/partner/competitor-scan returns an id.2
Poll, or receive a webhook
GET /api/partner/competitor-scan/{id} returns the current state. Signed webhooks deliver the same payloads without polling.3
Read the result
A scan produces up to two generations of payload, distinguished by
revision.Progressive delivery
This is the part to design for. A scan does not go from nothing to a final answer: it emits a preliminary payload as soon as it has something usable, and may follow with a revised one as the slower parts land. So your integration should expect to receive the same scan twice, with the later revision superseding the earlier. Render the preliminary result, then update it. Treating the first payload as final gives your users a thinner answer than they paid for; waiting for the second makes the scan feel broken.Other endpoints
GET /api/partner/scanslists what you have run.GET /api/partner/usagegives your consumption against the rate limit.