---
title: API Overview
description: Programmatically execute AI workflows, manage resources, and integrate Wireflow into your applications.
updated: 2026-10-03
---

The Wireflow API lets you execute AI workflows programmatically, poll for results, and manage your workflows — all with standard REST calls.

## Base URL

```
https://www.wireflow.ai/api/v1
```

## Authentication

All requests require a Bearer token in the `Authorization` header. Generate API keys from **Settings > API Keys** in the Wireflow dashboard.

```
Authorization: Bearer sk-your-api-key
```

A new key starts read-only (`workflows:read` and `executions:read`). The Quick Start below runs a workflow, so its key also needs `workflows:execute`, or pick **Full access** when you create it. See [Authentication](/docs/api/authentication) for details on scopes and key management.

## Quick Start

Execute a single text-to-image node and poll for results:

```bash
# 1. Execute a workflow (single text-to-image node)
curl -X POST https://www.wireflow.ai/api/v1/workflows/YOUR_WORKFLOW_ID/execute \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "nodes": [
      {
        "id": "node-1",
        "type": "basedNode",
        "position": { "x": 0, "y": 0 },
        "data": {
          "label": "Text to Image",
          "category": "model",
          "nodeType": "generate:flux_2",
          "params": {
            "prompt": "A sunset over mountains, photorealistic"
          },
          "inputs": [],
          "outputs": [{ "id": "image", "label": "Image", "type": "IMAGE" }]
        }
      }
    ],
    "edges": []
  }'

# Response: 201 Created
# {
#   "workflowId": "cm1abc123",
#   "batchId": "550e8400-e29b-41d4-a716-446655440000",
#   "executionId": "exec_456",
#   "executionRuns": [{ "id": "exec_456", "status": "RUNNING", ... }]
# }

# 2. Poll the executionId until complete
curl https://www.wireflow.ai/api/v1/workflows/executions/exec_456/poll \
  -H "Authorization: Bearer sk-your-api-key"

# Response: { "status": "COMPLETED", "nodeResults": { "nodeRuns": [...] } }
```

## Response shapes

All responses return JSON, but the envelope differs by route family. These are the shapes as they exist today; treat them as stable.

| Route family                                                                                      | Success shape                                                                                                                          |
| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| List, create, update (e.g. `GET /workflows`, `POST /workflows`, `PUT /workflows/{id}`)            | `{ "data": ..., "meta": {...} }` — `meta` carries pagination, and on graph writes the lint `warnings`, `migrations`, and `diagnostics` |
| Get a workflow (`GET /workflows/{id}`), poll an execution (`GET /workflows/executions/{id}/poll`) | The bare resource object, no envelope                                                                                                  |
| Catalogs (`GET /nodes`, `GET /models`)                                                            | `{ "version": 1, "count": N, "nodes": [...] }` (or `"models"`)                                                                         |

Errors return an `error` object with `type`, `message`, and `code`:

```json
{
  "error": {
    "type": "invalid_request_error",
    "message": "Workflow not found",
    "code": "not_found"
  }
}
```

Write your client against the shape of each route you call, not one assumed global envelope. See [Errors](/docs/api/errors) for the full error reference.

## Request IDs

Every response includes an `X-Request-Id` header. Include this when contacting support — it helps us trace issues quickly.

## Rate Limits

Requests are rate-limited by plan tier. The API returns `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers on every response. See [Rate Limits](/docs/api/rate-limits).

## SDKs & Libraries

There is no official SDK. The Wireflow API is standard REST, so any HTTP client works: `curl`, `fetch`, `axios`, Python `requests` and so on. See the endpoint-specific pages for language examples.

## Resources

| Section                                    | Description                                               |
| ------------------------------------------ | --------------------------------------------------------- |
| [Authentication](/docs/api/authentication) | API keys, scopes, and best practices                      |
| [Workflows](/docs/api/workflows)           | Create, list, update, and delete workflows                |
| [Executions](/docs/api/executions)         | Execute workflows and poll for results                    |
| [Rate Limits](/docs/api/rate-limits)       | Limits by plan tier and how to handle 429s                |
| [Errors](/docs/api/errors)                 | Error format, types, and status codes                     |
| [Webhooks](/docs/api/webhooks)             | Get a signed POST when a run finishes, instead of polling |

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
