The Vadalog API covers program analysis, bind annotation management, and direct evaluation of Vadalog programs against the workspace-aware engine.
All paths are relative to the base URL and
require authentication. All
responses use the standard envelope.
These are the platform Vadalog endpoints — they are authenticated, workspace-aware, and route to the correct compute target for the authenticated user. For the raw low-level engine API (unauthenticated, direct engine calls), see Engine API.
Analyze a program
Inspect a Vadalog program’s predicate structure without executing it. Handles Vadalog, SQL, Cypher, and Python concept types.
| Parameter | In | Required | Default | Description |
|---|
program | body | yes | — | Vadalog program source (or SQL/Python body depending on conceptType). |
conceptType | body | no | "logic" | One of logic (Vadalog), sql, cypher, or python. |
conceptName | body | no | "" | Required when conceptType is sql, cypher, or python — used as the head predicate name. |
Example
curl -X POST "$BASE_URL/vadalog/analyze" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"program": "@input(\"products\").\n@output(\"expensive\").\nexpensive(P, R) <- products(P, R), R > 100.",
"conceptType": "logic"
}'
{
"status": "success",
"message": "Analysis complete",
"data": {
"inputPredicates": ["products"],
"headPredicates": ["expensive"]
}
}
Parse binds
Parse @bind and @qbind annotations from a Vadalog program and separate the rule code from the datasource bindings.
POST /vadalog/parse-binds
| Parameter | In | Required | Default | Description |
|---|
program | body | yes | — | Full Vadalog source including any bind annotations. |
outputPredicate | body | no | "" | Additional predicate name to classify as output when partitioning binds. |
Example
curl -X POST "$BASE_URL/vadalog/parse-binds" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"program": "@bind(\"products\",\"csv useHeaders=true\",\"/data\",\"products.csv\").\n@output(\"expensive\").\nexpensive(P, R) <- products(P, R), R > 100.",
"outputPredicate": "expensive"
}'
{
"status": "success",
"message": "Binds parsed",
"data": {
"code": "expensive(P, R) <- products(P, R), R > 100.",
"binds": {
"input": [
{
"predicate": "products",
"annotation": "@bind(\"products\",\"csv useHeaders=true\",\"/data\",\"products.csv\")."
}
],
"output": []
}
}
}
Evaluate a program
The primary platform execution endpoint. Evaluate a Vadalog program with optional runtime parameters and compute target. The platform resolves the correct engine (local or remote compute) for the authenticated user.
| Parameter | In | Required | Default | Description |
|---|
program | body | yes | — | Vadalog program to evaluate. |
params | body | no | {} | Runtime parameter values referenced in the program (e.g. { "threshold": 100 }). |
compute | body | no | — | Compute target override. Resolved against the user’s active compute configuration when omitted. |
Example
curl -X POST "$BASE_URL/vadalog/evaluate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"program": "@input(\"products\").\n@output(\"expensive\").\nexpensive(P, R) <- products(P, R), R > ?threshold.",
"params": { "threshold": 100 }
}'
{
"status": "success",
"message": "Vadalog program evaluated successfully",
"data": {
// Evaluation payload returned by the engine.
// Structure depends on the program's output predicates.
"expensive": [["Widget A", 249], ["Widget B", 129]]
}
}
For concept-level execution (with dependency chaining, result persistence, and progress tracking), use POST /concepts/{project_id}/run/{concept_name} instead. Use /vadalog/evaluate when you want to execute a program directly without a saved concept.
Build a bind
Rewrite an existing @bind or @qbind annotation for a new predicate name. When isOutput is true, the output target (CSV filename or query name) is also updated to match the new predicate.
| Parameter | In | Required | Default | Description |
|---|
bindAnnotation | body | yes | — | The full @bind(...) or @qbind(...) annotation string to rewrite. |
predicateName | body | yes | — | New predicate name to substitute into the annotation. |
isOutput | body | no | false | When true, also updates the output table or query name derived from predicateName. |
Example
curl -X POST "$BASE_URL/vadalog/build-bind" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"bindAnnotation": "@bind(\"old_pred\",\"csv useHeaders=true\",\"/data\",\"old_pred.csv\").",
"predicateName": "new_pred",
"isOutput": true
}'
{
"status": "success",
"message": "Bind annotation built",
"data": {
"annotation": "@bind(\"new_pred\",\"csv useHeaders=true\",\"/data\",\"new_pred.csv\")."
}
}
Engine status
Return whether the Vadalog engine is idle or processing an evaluation. Use this to gate new submissions or display engine state in a UI.
No parameters.
curl "$BASE_URL/vadalog/status" \
-H "Authorization: Bearer $TOKEN"
{
"status": "success",
"message": "Engine is ready",
"data": {
"status": "ready", // "ready" | "busy"
"timestamp": "2026-06-25T10:42:00.123456"
}
}
Stop evaluation
Cancel the current evaluation. Issues a stop signal to both the Vadalog engine and any in-flight Python concept subprocess, so a single call covers both concept types.
No parameters.
curl "$BASE_URL/vadalog/stop" \
-H "Authorization: Bearer $TOKEN"
The response body is whatever the engine returns on acknowledgement of the stop request.
The /vadalog/spark-ui/* and /vadalog/actuator/* proxy endpoints exist for operational monitoring of the underlying engine (Spark job tracking, JVM metrics, log tailing). They are outside the scope of external integration and are not documented here.