A new registration returns node_id, a one-time ingest_key, header X-Probe-Ingest-Key, status, trial end, rate limit, heartbeat interval, promotion threshold and accepted domains. Use values from your actual response; no key or success result is simulated here.
An existing ID returns already_registered: true with its status and registration date, but no replacement key. If the original key is lost, choose a new public ID. A failed or interrupted response does not prove no registration was created; do not retry automatically.
The optional domains_supported registration field is informational. The handler returns its approved-domain set; actual ingest can also use the served domain registry. Off-list results may be dropped. Inspect current targets ↗
Only submit observations your client actually made. Create measurements.json with the nodeId, country and results array; each result carries the observed domain, blocking result, confidence and latency. The original guide’s made-up result is not used as a submission template here.
curl -X POST https://api.voidly.ai/v1/probe/results \
-H 'Content-Type: application/json' \
-H "X-Probe-Ingest-Key: $PROBE_INGEST_KEY" \
--data-binary @measurements.json
PROBE_INGEST_KEY in this example is a local shell variable you supply privately. It is not a Python-client configuration variable. Do not paste keys into public records. Registration alone does not produce a community-node profile; its public identity appears in the heartbeat registry.
Full protocol and example payload ↗