Documentation

DATANODE API docs

These pages describe endpoints that are implemented on this site. Base URL: https://datanode-api.whop.site/api/v1

Getting started

  1. 1. Introduction. DATANODE is a JSON HTTP API. Send Content-Type: application/json on POST requests.
  2. 2. Account setup. Buy DATANODE Pro for $49.90 once, then sign in to the dashboard.
  3. 3. Authentication. Create a key and send Authorization: Bearer dn_live_….
  4. 4. First request. Try GET /api/v1/utils/uuid or the cURL sample on the home page.

Authentication

  • Create keys in the dashboard. The full secret is shown once.
  • Send the secret in the Authorization header. Query-string keys are rejected.
  • Store secrets in your environment, not in client-side JavaScript you ship to browsers.
  • Revoke a leaked key in the dashboard, then create a replacement.
  • Keys only work while DATANODE Pro access is active on the Whop account that created them.
Authorization: Bearer dn_live_<payload>.<signature>

Endpoints

GET /api/v1/health does not require a key. GET /api/v1/me and GET /api/v1/endpoints are authenticated.

Transformation

  • POST /api/v1/transform/json

    Apply pick, omit, flatten, unflatten, rename, and pluck operations to a JSON object or array.

  • POST /api/v1/transform/csv-to-json

    Convert CSV text into an array of objects or rows.

  • POST /api/v1/transform/json-to-csv

    Convert an array of objects or rows into CSV text.

Validation

  • POST /api/v1/validate/json-schema

    Validate data against a supported JSON Schema subset (type, required, properties, items, enum, numeric and string constraints).

  • POST /api/v1/validate/email

    Check whether a string is a well-formed email address.

  • POST /api/v1/validate/url

    Check whether a string is a valid http or https URL.

  • POST /api/v1/validate/json

    Parse a JSON string and report whether it is valid.

Formatting

  • POST /api/v1/format/json

    Pretty-print or minify JSON.

  • POST /api/v1/format/string

    Trim, change case, slugify, or convert a string between naming styles.

  • POST /api/v1/format/number

    Format a number with locale, style, and fraction digits.

  • POST /api/v1/format/date

    Format an ISO timestamp in a given time zone.

Parsing

  • POST /api/v1/parse/csv

    Parse CSV text into rows or objects.

  • POST /api/v1/parse/querystring

    Parse a URL query string into a key/value object.

  • POST /api/v1/parse/url

    Parse a URL into protocol, host, path, query, and hash.

  • POST /api/v1/parse/json

    Parse a JSON string into a value.

Developer Utilities

  • POST /api/v1/utils/hash

    Hash a string with SHA-256, SHA-1, or SHA-512.

  • POST /api/v1/utils/base64

    Encode or decode Base64.

  • GET /api/v1/utils/uuid

    Generate a random UUID v4.

  • POST /api/v1/utils/uuid

    Generate a random UUID v4.

Request examples

Transform JSON
curl -s https://datanode-api.whop.site/api/v1/transform/json \
  -H "Authorization: Bearer $DATANODE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "data": { "user": { "id": 7, "email": "a@b.com" } },
    "operations": [
      { "op": "flatten" },
      { "op": "pick", "keys": ["user.id"] }
    ]
  }'
JavaScript
const res = await fetch("https://datanode-api.whop.site/api/v1/validate/email", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DATANODE_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ email: "dev@example.com" }),
});
const body = await res.json();
if (!res.ok) throw new Error(body.error?.message ?? res.statusText);
Python
import os, requests

response = requests.post(
    "https://datanode-api.whop.site/api/v1/format/date",
    headers={"Authorization": f"Bearer {os.environ['DATANODE_KEY']}"},
    json={
        "value": "2026-10-02T19:00:00Z",
        "timeZone": "America/New_York",
        "dateStyle": "medium",
        "timeStyle": "short",
    },
    timeout=20,
)
response.raise_for_status()
print(response.json())

Errors

Failed responses look like { "ok": false, "error": { "code": "invalid_key", "message": "…" } }. Common codes: unauthorized, invalid_key, revoked_key, no_access, rate_limited, quota_exceeded, payload_too_large, invalid_json, not_found.

Limits

  • 10,000 requests per UTC calendar month
  • 60 requests per minute
  • Request body at most 256 KB
  • CSV and JSON arrays at most 10,000 rows
  • At most 5 active API keys per account
  • No webhook delivery in this version