The NetfillX API lets you programmatically route fill requests across our global edge network of 190 nodes. All API access is over HTTPS and returns JSON-encoded responses.
Make your first fill-request route in under 60 seconds. Replace nfx_live_xxxxx with your actual API key from the dashboard.
nfx_live_ for production and nfx_test_ for sandbox environments.
NetfillX uses API keys to authenticate requests. Include your key in the Authorization header using the Bearer scheme on every request. Requests without a valid key return 401 unauthorized.
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer nfx_live_<key> | Yes |
| Content-Type | application/json | Yes (write ops) |
| X-Request-ID | Any UUID string | Optional |
| X-NFX-Region | us-east-1 etc. | Optional |
| Scope | Prefix | Description |
|---|---|---|
| Live | nfx_live_ | Full production access. Requests count against your quota. |
| Test | nfx_test_ | Sandbox mode. Responses are simulated, never billed. |
| Restricted | nfx_rk_ | Read-only analytics access. Cannot create or delete routes. |
Submits a fill request to the routing engine. NetfillX selects the optimal edge path based on your priority preference, current network conditions, and real-time node health scores across all 190 edge nodes.
| Parameter | Type | Required | Description |
|---|---|---|---|
| fill_request.type | string | Yes | network_route | bgp_fill | mpls_fill |
| fill_request.source | string | Yes | Origin region identifier, e.g. us-east-1 |
| fill_request.destination | string | No | auto (default) or a specific region code |
| fill_request.priority | string | No | low_latency | high_throughput | balanced |
| fill_request.payload_size | integer | No | Expected payload in bytes. Used for buffer pre-allocation. |
| fill_request.ttl | integer | No | Route TTL in seconds. Default: 300. Max: 86400. |
| fill_request.metadata | object | No | Arbitrary key-value pairs attached to the route record. |
Returns a paginated list of all routes under your account, ordered by creation time descending.
| Query Param | Type | Description |
|---|---|---|
| limit | integer | Results per page. Default: 20. Max: 100. |
| cursor | string | Pagination cursor from a previous response's next_cursor. |
| status | string | Filter by active | expired | failed. |
| region | string | Filter by source region, e.g. eu-central-1. |
Immediately removes an active route and releases its reserved edge capacity. In-flight packets are drained before teardown (up to 500ms grace period).
Returns aggregated fill-rate and latency metrics for your account across the requested time window.
| Query Param | Type | Description |
|---|---|---|
| window | string | 1h | 24h | 7d | 30d. Default: 24h. |
| region | string | Scope to a single region. Omit for all regions. |
| granularity | string | minute | hour | day. Auto-selected by default. |
NetfillX pushes real-time event notifications to your HTTPS endpoint. Register webhook URLs from the dashboard or via POST /v1/webhooks.
| Event | Trigger |
|---|---|
| route.created | A new fill route was successfully established. |
| route.expired | A route's TTL elapsed and was automatically removed. |
| route.failed | Routing failed after exhausting all fallback paths. |
| fill_rate.degraded | Account fill rate dropped below 99.5% over a 5-minute window. |
| endpoint.unhealthy | An edge node you are pinned to failed its health check. |
Verify authenticity using the X-NFX-Signature-256 header: an HMAC-SHA256 of the raw body signed with your webhook secret.
NetfillX uses standard HTTP status codes. Error bodies include a machine-readable code and a human-readable message.
| HTTP Code | Error Code | Meaning |
|---|---|---|
| 400 | bad_request | The request body is malformed or missing required fields. |
| 401 | unauthorized | API key is missing, invalid, or revoked. |
| 403 | forbidden | The key exists but lacks permission for this action. |
| 404 | not_found | The requested resource does not exist. |
| 409 | conflict | A route with a duplicate idempotency key already exists. |
| 422 | unprocessable | Validation passed but the route could not be computed. |
| 429 | rate_limited | You have exceeded your plan's per-second request limit. |
| 500 | server_error | Unexpected server error. Retryable with exponential backoff. |
Rate limits are applied per API key. Exceeding the per-second burst limit returns 429 rate_limited. The response includes Retry-After and X-RateLimit-Reset headers.
Official client libraries wrap the REST API with idiomatic interfaces, automatic retry with exponential backoff, and full type definitions.