API Documentation

Integrate HoltWalker pathfinding into your project. Generate an API key from your dashboard, then start making requests.

Quick Start#

Get up and running in three steps:

1

Sign in with Discord and go to your dashboard

2

Create an API key — copy it immediately, it's only shown once

3

Make a request with your key in the X-API-Key header

curl
curl -X POST https://api.holtwalker.com/generatePaths \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -d '{
    "player": {
      "members": true,
      "settings": [{ "key": 10, "value": 0 }],
      "varbits": [{ "key": 357, "value": 9 }]
    },
    "requests": [{
      "start": { "x": 3113, "y": 9908, "z": 0 },
      "end":   { "x": 3093, "y": 3491, "z": 0 }
    }]
  }'

Authentication#

All API requests require an API key passed via the X-API-Key header.

HeaderX-API-Key: sk_xxxxxxxx...

API keys start with sk_ and are generated from your dashboard. You can create multiple keys, name them, and toggle them active/inactive. The number of keys available depends on your plan.

Endpoints#

POST/generatePaths

Generate one or more paths between coordinates. Accounts for quest requirements, skill levels, equipment, and transport edges. This is the primary endpoint and handles ~70% of API traffic.

request body
{
  "player": {
    "members": true,
    "attack": 70, "strength": 60, "defence": 45,
    "settings": [{ "key": 10, "value": 0 }],
    "varbits":  [{ "key": 357, "value": 9 }],
    "equipment": [{ "key": 1161, "value": 1 }],
    "inventory": [{ "key": 1323, "value": 1 }]
  },
  "requests": [
    {
      "start": { "x": 3113, "y": 9908, "z": 0 },
      "end":   { "x": 3093, "y": 3491, "z": 0 }
    }
  ]
}
POST/generateBankPaths

Find the nearest accessible bank from any tile. Returns the top 5 reachable bank locations ranked by path distance, with full access validation against your player state.

request body
{
  "player": {
    "members": true,
    "settings": [{ "key": 10, "value": 0 }],
    "varbits":  [{ "key": 357, "value": 9 }]
  },
  "start": { "x": 3222, "y": 3218, "z": 0 }
}
WS/ws

WebSocket endpoint for real-time API usage feed. Connect via the dashboard or programmatically with an authenticated ticket. Events include request counts, response times, and endpoint breakdowns.

Web Walker Engine Integration#

If you're using Dax's Web Walker Engine, integration is straightforward — you only need to change two things in WebWalkerServerApi.java:

1

Change the endpoint URL

Update the WALKER_ENDPOINT constant to point to HoltWalker. The /walker/generatePaths and /walker/generateBankPaths paths used by the engine are fully compatible:

WebWalkerServerApi.java
// Before
private static final String WALKER_ENDPOINT = "https://walker.dax.cloud";

// After
private static final String WALKER_ENDPOINT = "https://api.holtwalker.com";
2

Add your API key header

In the post() method, add the X-API-Key header alongside the existing request properties:

WebWalkerServerApi.java
connection.setRequestProperty("Method", "POST");
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");

// Add this line — use the API key from your HoltWalker dashboard
connection.setRequestProperty("X-API-Key", "YOUR_API_KEY");

That's it. The HoltWalker API is fully compatible with the Web Walker Engine request/response format. The same PathResult andPathStatus types are returned — no other code changes needed.

Rate Limits#

Each plan has a per-minute request cap. Rate limit information is included in every API response via headers:

HeaderDescription
X-RateLimit-LimitYour plan's requests-per-minute cap
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds to wait (only on 429 responses)

When you exceed your limit, the API returns 429 Too Many Requests. Back off and retry after the Retry-After period. See pricing for per-plan limits.

Error Handling#

The API uses standard HTTP status codes. All error responses include a JSON body with a message field.

StatusMeaning
200Success — path(s) returned
400Bad request — invalid coordinates or missing fields
401Unauthorized — missing or invalid API key
429Rate limited — exceeded your plan's per-minute cap
500Server error — retry after a brief wait
error response
{
  "message": "Invalid API key",
  "statusCode": 401
}

Need help?

Check your usage on the dashboard or reach out if you need a custom integration.