Files
OpenFlare/docs/en/reference/api.md
T
2026-06-02 00:13:39 +08:00

5.8 KiB

API Conventions

You will learn: The response structure, path conventions, authentication methods, and Swagger entrance for the OpenFlare Admin API and Agent API.

Both the OpenFlare Admin API and Agent API communicate using JSON.

Response Structure

Both successful and failed API responses must return a clear message:

{
  "success": true,
  "message": "",
  "data": {}
}

Path Conventions

Category Convention
Admin API Authenticated via the Admin Session
Agent API Located strictly under /api/agent/*
Relay API Located strictly under /api/relay/*, authenticated via X-Agent-Token (reusing the Agent's token)
OpenFlared API Located strictly under /api/flared/*, authenticated via X-Tunnel-Token (dedicated tunnel_token)
Read-only APIs Use the GET method
Mutating APIs Use the POST method

WAF IP Group APIs

The Admin WAF IP Group APIs require Admin Session authentication:

Method Path Description
GET /api/waf/ip-groups Query IP groups list
GET /api/waf/ip-groups/:id Query a single IP group
POST /api/waf/ip-groups Create a new IP group
POST /api/waf/ip-groups/test Test automatic IP group Expr rules; returns matching IPs in the lookback window without persisting the config
POST /api/waf/ip-groups/:id/update Update an existing IP group
POST /api/waf/ip-groups/:id/delete Delete an IP group; denied if currently referenced by any rule group
POST /api/waf/ip-groups/:id/sync Manually sync subscription IP groups or execute automatic IP group aggregation

The IP group type supports manual, automatic, and subscription. The auto_config parameter for automatic IP groups is a JSON object:

{
  "lookback_minutes": 60,
  "rules": [
    {
      "name": "Single IP High-Frequency 404 Scanning",
      "expr": "request_count > 100 && status_404_ratio >= 0.8"
    },
    {
      "name": "Single IP Direct IP Access Mismatch",
      "expr": "ip_host_count > 50 && ip_host_ratio > 0.5"
    }
  ]
}

Automatic rules evaluate Expr boolean expressions against metrics aggregated on a per-client-IP basis. The available metrics include ip, request_count, status_404_count, status_404_ratio, ip_host_count, ip_host_ratio, client_error_count, server_error_count, and last_seen_unix. The full syntax is detailed in WAF Auto IP Group Expressions.

Subscription formats support text and json: plain text parsing resolves one IP or CIDR per line, ignoring empty lines and comments starting with #; JSON parsing decodes arrays, reading the root array by default.

Authentication

The Admin panel continues to reuse the existing login, role, and Session validation.

Agent requests must carry the node-specific agent_token (except for first-time registration, which can use the global discovery_token). The header is formatted as:

X-Agent-Token: <token>

Agent WAF IP Group Synchronization

The Agent heartbeat payload can carry local WAF IP group checksums:

{
  "waf_ip_group_checksums": {
    "1": "sha256..."
  }
}

The Server evaluates the checksums against active configurations, returning mismatched IP groups in the heartbeat response:

{
  "waf_ip_groups": [
    {
      "id": 1,
      "name": "Auto Blacklist",
      "type": "automatic",
      "enabled": true,
      "ip_list": ["203.0.113.10"],
      "checksum": "sha256..."
    }
  ]
}

Alternatively, the Agent can proactively request differential updates upon applying a new configuration version:

Method Path Description
POST /api/agent/waf/ip-groups/sync Returns mismatched WAF IP groups based on Agent-supplied ids and checksums

When an IP group is updated on the Server, connected Agents receive a WebSocket push containing type = "waf_ip_groups" with the changed IP groups array as payload. The Agent updates only the changed groups incrementally.

OpenFlared API

The OpenFlared client communicates with the Server via a dedicated tunnel_token, completely decoupled from the Agent authentication system. All endpoints require X-Tunnel-Token authentication; requests are denied with 403 if the token is invalid.

Method Path Description
POST /api/flared/heartbeat Client heartbeat, updates online status and retrieves active tunnel config version summaries
GET /api/flared/config/active Pulls the complete tunnel routing configuration (relay list + frpc proxy definitions)
POST /api/flared/apply-log Reports configuration application results (success / warning / failed)
GET /api/flared/ws Upgrades to a WebSocket connection for real-time active_config pushes

Heartbeat request example:

POST /api/flared/heartbeat
X-Tunnel-Token: <tunnel_token>
Content-Type: application/json

{
  "client_version": "v0.2.0",
  "frp_version": "0.61.0",
  "tunnel_status": "running",
  "connected_relays": [
    { "relay_node_id": "node-relay-1", "status": "healthy", "proxy_count": 3 }
  ],
  "current_version": "v1",
  "current_checksum": "sha256..."
}

The heartbeat response returns the active_config summary and tunnel_settings (containing runtime settings like heartbeat intervals and WebSocket upgrade switches). When a new configuration version is published, the Server broadcasts a message type = "active_config" with the version summary as payload to all connected Clients over WebSockets, prompting them to fetch and apply the config immediately.

Full tokens must never be logged.

Swagger

Once logged into the management console, the Swagger page is accessible at:

/swagger/index.html

The Swagger definition file is stored in openflare_server/docs, generated by swag init.