NexTool API Documentation
Access 300+ tools programmatically with a simple REST API. Authenticate with an API key, send inputs, get results.
API Key Auth
Secure per-key authentication
300+ Tools
Text, finance, dev, math & more
Rate Limited
100 req/hour with clear headers
Simple REST
JSON in, JSON out, CORS enabled
Overview
The NexTool API lets you run any of our 300+ tools from your own applications. Send a POST request with the tool slug and input parameters, and receive structured JSON results.
The API is available to users on the Pro and Business plans. You can generate up to 5 API keys from your dashboard.
https://getnextool.com/api/v1Authentication
All API requests require an API key passed via the x-api-key header. You can generate keys from your dashboard or via the key management API.
Keys use the format ntool_ followed by 32 hex characters. Keep your keys secret — they grant full API access to your account.
x-api-key: ntool_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4Key Management API
/api/v1/keysList all your active API keys. Requires session authentication (cookies).
/api/v1/keysGenerate a new API key. Returns the full key once — save it immediately.
{
"name": "My production key"
}{
"key": "ntool_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"hash": "sha256_hash_of_key",
"name": "My production key",
"prefix": "ntool_a1b2c3...",
"createdAt": "2026-03-08T12:00:00.000Z",
"message": "Save this key now — it will not be shown again."
}/api/v1/keysRevoke an API key by its hash. The key is immediately invalidated.
{
"hash": "sha256_hash_of_key"
}Endpoints
/api/v1/toolsRun a tool with the provided inputs and receive structured results.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
tool | string | Yes | Tool slug (e.g. word-counter, json-formatter) |
inputs | object | No | Key-value pairs of tool-specific inputs |
Required Headers
| Header | Description |
|---|---|
x-api-key | Your NexTool API key |
Content-Type | application/json |
Response (200 OK)
{
"success": true,
"tool": "word-counter",
"result": {
"words": 142,
"characters": 891,
"sentences": 8,
"paragraphs": 3
},
"usage": {
"remaining": 99,
"limit": 100,
"resetAt": "2026-03-08T13:00:00.000Z"
},
"meta": {
"apiVersion": "v1",
"timestamp": "2026-03-08T12:00:00.000Z"
}
}Response Headers
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per window (100) |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | ISO timestamp when the window resets |
Rate Limits
API requests are rate-limited using a sliding window of 1 hour. Each API key has its own independent counter.
| Plan | Rate Limit | Max Keys | Price |
|---|---|---|---|
| Free | No API access | - | $0 |
| Pro | 100 requests / hour | 5 | $9/mo |
| Business | 1,000 requests / hour | 5 | $29/mo |
Tip: Check the X-RateLimit-Remaining response header to track your usage. When you hit the limit, you will receive a 429 response with a retryAfter timestamp.
Error Handling
All errors return a consistent JSON structure with an error code and a human-readable message.
| Status | Error Code | Description |
|---|---|---|
400 | missing_tool | The tool field is missing or not a string |
400 | invalid_inputs | The inputs field is not a valid object |
400 | invalid_json | Request body is not valid JSON |
401 | missing_api_key | No x-api-key header provided |
401 | invalid_api_key | Key format is wrong, key not found, or key has been revoked |
429 | rate_limit_exceeded | Exceeded 100 requests/hour — wait for the window to reset |
{
"error": "rate_limit_exceeded",
"message": "You have exceeded the rate limit of 100 requests per hour.",
"retryAfter": "2026-03-08T13:00:00.000Z"
}Examples
cURL
curl -X POST https://getnextool.com/api/v1/tools \
-H "Content-Type: application/json" \
-H "x-api-key: ntool_YOUR_API_KEY_HERE" \
-d '{
"tool": "word-counter",
"inputs": {
"text": "Hello world, this is a test."
}
}'JavaScript / Fetch
const response = await fetch("https://getnextool.com/api/v1/tools", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": "ntool_YOUR_API_KEY_HERE",
},
body: JSON.stringify({
tool: "json-formatter",
inputs: {
json: '{"name":"NexTool","version":1}',
indent: 2,
},
}),
});
const data = await response.json();
console.log(data.result);
// Check rate limit headers
console.log("Remaining:", response.headers.get("X-RateLimit-Remaining"));Python / requests
import requests
response = requests.post(
"https://getnextool.com/api/v1/tools",
headers={
"Content-Type": "application/json",
"x-api-key": "ntool_YOUR_API_KEY_HERE",
},
json={
"tool": "base64-encoder",
"inputs": {
"text": "Hello, NexTool API!",
"mode": "encode",
},
},
)
data = response.json()
print(data["result"])
print(f"Remaining: {response.headers['X-RateLimit-Remaining']}")Node.js (with error handling)
async function runTool(tool, inputs) {
const res = await fetch("https://getnextool.com/api/v1/tools", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.NEXTOOL_API_KEY,
},
body: JSON.stringify({ tool, inputs }),
});
if (res.status === 429) {
const { retryAfter } = await res.json();
throw new Error(`Rate limited. Retry after ${retryAfter}`);
}
if (!res.ok) {
const err = await res.json();
throw new Error(`API error: ${err.message}`);
}
return res.json();
}
// Usage
const result = await runTool("hash-generator", {
text: "my secret data",
algorithm: "sha256",
});
console.log(result);Generate an API key (cURL)
# You must be logged in (send session cookies)
curl -X POST https://getnextool.com/api/v1/keys \
-H "Content-Type: application/json" \
-b "your-session-cookies" \
-d '{ "name": "Production key" }'No spam. Unsubscribe anytime.
Ready to Build?
Upgrade to Pro or Business to get API access and start integrating 300+ tools into your applications.