Skip to main content
All endpoints return a single, consistent envelope. Field order is stable: id → success → data → error → request → uapi_version → schema_version → deprecation_warnings. data is populated when success is true. When success is false, data is null and error is populated.
id
string
required
Globally unique request identifier for logging, tracing, and support.
success
boolean
required
Indicates whether a structured payload was successfully produced.
data
object | null
required
Endpoint-specific payload when success is true.For /v1/extract, this is the normalized, schema-aligned object for the target URL.For /v1/search, this includes answer_text and sources with canonical URLs and titles.For /v1/perform (beta), this describes the action result.
error
object | null
required
Present when success is false. Includes a stable code and human-readable message, suitable for both programmatic handling and logs.
request
object
required
Normalized view of what uAPI executed. Designed for observability and debugging.
uapi_version
string
required
Version of the uAPI processing pipeline used for this request. Useful for correlating behavior across deployments.
schema_version
string
required
Version of the response envelope contract. Changes only when the top-level shape semantics evolve.
deprecation_warnings
array
required
Non-fatal warnings attached to the request. Used to signal upcoming changes without breaking current integrations.
{
  "id": "9ec63d3e-423f-4e29-8065-e8983cfaf0c1",
  "success": true,
  "data": {
    "message": "Welcome to the uAPI: Universal Natural Language API!",
    "documentation_url": "https://docs.uapi.nl",
    "status_page_url": "https://status.uapi.nl",
    "endpoints": {
      "/v1/extract": "Turns any webpage into structured JSON data.",
      "/v1/search": "Finds direct answers to natural language questions.",
      "/v1/perform": "Performs an automation or action on a webpage."
    },
    "support_email": "contact@uapi.nl"
  },
  "error": null,
  "request": {
    "endpoint": "/",
    "method": "GET",
    "params": {},
    "payload": {},
    "status_code": 200,
    "requested_at": "2025-11-08T12:40:37.292Z",
    "served_at": "2025-11-08T12:40:37.301Z",
    "elapsed_ms": 9,
    "cache_info": {
      "is_cached": true,
      "cached_at": "2025-11-08T12:40:37.000Z",
      "expires_at": "2025-11-08T12:41:37.000Z"
    }
  },
  "uapi_version": "1.2.5",
  "schema_version": "v1",
  "deprecation_warnings": []
}
{
  "id": "req_extract_nvda",
  "success": true,
  "data": {
    "name": "NVIDIA Corporation",
    "symbol": "NVDA",
    "price": 180.28,
    "percent_change": -0.49,
    "volume": 161039698,
    "currency": "USD",
    "timestamp": "2025-10-23T09:00:00Z"
  },
  "error": null,
  "request": {
    "endpoint": "/v1/extract",
    "method": "GET",
    "params": {
      "url": "https://finance.yahoo.com/quote/NVDA/"
    },
    "payload": {},
    "status_code": 200,
    "requested_at": "2025-10-23T09:05:18.802Z",
    "served_at": "2025-10-23T09:05:35.299Z",
    "elapsed_ms": 16497,
    "cache_info": {
      "is_cached": false,
      "cached_at": null,
      "expires_at": null
    }
  },
  "uapi_version": "1.2.5",
  "schema_version": "v1",
  "deprecation_warnings": []
}
Your integration should rely on this envelope shape: read success, then data or error, and log id plus request fields for observability. SDKs expose these fields via typed models while preserving the exact wire format.