API

Build modular workflows on top of Vynflow using service-account authenticated JSON APIs. Today's public surfaces are the Vynflow AI schema-driven AI endpoint and the User Tables row CRUD API.

Authentication

All requests require the following headers:

Authorization: Bearer sa-p-vynflow-SECRET
X-API-Key: sa-k-vynflow-KEY
X-Domain-ID: DOMAIN_UUID
Keep these credentials server-side. Treat them like passwords.

Vynflow AI

One schema-driven AI endpoint. Describe the fields you want back, send a prompt (and optional named data), and Vynflow AI routes the request to the cheapest model that can do the job — breaking it into subtasks when needed — then returns a JSON object shaped exactly like your requested fields. Token usage, cost and routing are recorded in your domain's Vynflow AI history.

POST https://vynflow.cloud/api/ai/complete

Request and response:

curl -X POST https://vynflow.cloud/api/ai/complete \
  -H "Authorization: Bearer sa-p-vynflow-SECRET" \
  -H "X-API-Key: sa-k-vynflow-KEY" \
  -H "X-Domain-ID: DOMAIN_UUID" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Summarise the feedback and classify its sentiment.",
    "response_fields": [
      { "name": "summary",   "type": "string", "required": true },
      { "name": "sentiment", "type": "enum",   "required": true, "options": ["positive","neutral","negative"] }
    ],
    "data": [
      { "name": "feedback", "value": "The app is fast but it crashed twice today." }
    ]
  }'

# → { "result": { "summary": "...", "sentiment": "negative" },
#     "routing": { "tier": "standard", "decomposed": false },
#     "usage": { "total_tokens": 448, "cost_usd": "$0.000180" } }

Each response_fields entry is { name, type, required } with optional description, options (for enum) and items (for array). Supported field types: string, number, integer, boolean, array, object, enum. Non-required fields may return null.

Prefer a no-code start? The in-app Vynflow AI Playground builds and runs the same request for you.

Endpoints (User Tables)

Table discovery and schema:

POST https://vynflow.cloud/api/user-tables
  GET  https://vynflow.cloud/api/user-tables
  GET  https://vynflow.cloud/api/user-tables/{TABLE_ID}/schema

Row CRUD:

POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows
  POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows/from-columns
  GET    https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows
  GET    https://vynflow.cloud/api/user-tables/{TABLE_ID}/row/{ROW_ID}
  PUT    https://vynflow.cloud/api/user-tables/{TABLE_ID}/row/{ROW_ID}
  PATCH  https://vynflow.cloud/api/user-tables/{TABLE_ID}/row/{ROW_ID}
  DELETE https://vynflow.cloud/api/user-tables/{TABLE_ID}/row/{ROW_ID}

Batch row writes (up to 1,000 items per request, partial success → HTTP 207 on any failure):

POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows/batch
  POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows/batch-update
  POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows/upsert
  POST   https://vynflow.cloud/api/user-tables/{TABLE_ID}/rows/batch-delete

Examples

Create a table:

curl -X POST https://vynflow.cloud/api/user-tables \
  -H "Authorization: Bearer sa-p-vynflow-SECRET" \
  -H "X-API-Key: sa-k-vynflow-KEY" \
  -H "X-Domain-ID: DOMAIN_UUID" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vendors",
    "description": "All vendors and key contacts"
  }'

Get schema for a table:

curl -X GET https://vynflow.cloud/api/user-tables/TABLE_ID/schema \
  -H "Authorization: Bearer sa-p-vynflow-SECRET" \
  -H "X-API-Key: sa-k-vynflow-KEY" \
  -H "X-Domain-ID: DOMAIN_UUID"

Create a row:

curl -X POST https://vynflow.cloud/api/user-tables/TABLE_ID/rows \
  -H "Authorization: Bearer sa-p-vynflow-SECRET" \
  -H "X-API-Key: sa-k-vynflow-KEY" \
  -H "X-Domain-ID: DOMAIN_UUID" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "Name": "Acme",
      "Amount": 1200,
      "Active": true
    }
  }'

List rows (with filtering/sorting):

curl -X GET "https://vynflow.cloud/api/user-tables/TABLE_ID/rows?page=1&per_page=10&filter_col=Name&filter_value=Acme&sort_col=CreatedAt&sort_dir=desc" \
  -H "Authorization: Bearer sa-p-vynflow-SECRET" \
  -H "X-API-Key: sa-k-vynflow-KEY" \
  -H "X-Domain-ID: DOMAIN_UUID"
Need MCP instead of raw HTTP? See the MCP page for the official MCP endpoint.