REST API Reference The WEXTL REST v1 API — versioned, frozen-additive, and machine-readable via a single OpenAPI document.
Updates every sample URL on this page to your organization’s regional host. Match the shard in your API key (wextl_<shard>_…).
v1 overview The REST API lets you create workflows, run them, and inspect run history from any HTTP client. Every route lives under a single versioned prefix and returns a consistent JSON envelope — see Errors & rate limits for the shape.
The full per-resource reference below — every endpoint, its parameters, request/response schemas, and a runnable curl + TypeScript SDK sample — renders directly from the machine-readable OpenAPI document at the path below, so it can never drift from what actually ships.
Machine-readable spec The full contract is published as an OpenAPI document once the v1 surface ships, at the path below — unauthenticated, so your tooling (or an AI agent) can fetch it with no token.
Authenticating requests Every v1 request carries a bearer Personal Access Token or an OAuth 2.1 access token. See the Authentication guide for the full scope model and a key-rotation recipe.
Workflows(11) Variables(4) Runs(6) Credentials(6) Databases(6) Structures(4) Functions(4) Teams(1) Folders(4) Activity(1) Invitations(3) Tags(4) Webhooks(2) Members(1) Catalog(2)
Workflows 11 endpointsGET /workflows Auth requiredList workflows (bounded, cursor-paginated).
Parameters
Name In Type Description cursor query string Opaque continuation token from a previous response. limit query integer Page size. Default 50. q query string Free-text search on name + description. status query string — folderId query string Restrict to this folder and its descendants. sortBy query string — sortDir query string — tagIds query string Comma-separated tag ids. tagMatch query string —
Responses
200 A page of workflow summaries.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<WorkflowSummary> — next_cursor* — string | null —
data[] item (WorkflowSummary)
Name In Type Description id* — string — name* — string — active* — boolean — folderId — string | null — nodeCount — integer — tagIds — array<string> — createdAt — integer Epoch milliseconds. updatedAt — integer Epoch milliseconds.
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"active": true,
"folderId": "fld_01HXEXAMPLE",
"nodeCount": 3,
"tagIds": [
"..."
],
"createdAt": 1719792000000,
"updatedAt": 1719792000000
}
],
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/workflows \
-H "Authorization: Bearer wextl_..."POST /workflows Auth requiredCreate a new, empty (draft) workflow. Build its graph via POST .../ops afterwards.
Request body (required)
Name In Type Description name* body string — folderId body string | null Must reference an accessible folder. teamId body string | null Must belong to the caller's org. Omit to use the org's default team.
Responses
201 The created (empty) draft workflow.
400 Invalid body — missing/oversized name, or an unresolvable folderId/teamId.
401 No valid bearer token.
403 Missing workflow:write scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — WorkflowCreateResult —
data shape (WorkflowCreateResult)
Name In Type Description id* — string — name* — string — teamId* — string — folderId — string | null — active* — boolean — createdAt* — integer Epoch milliseconds.
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"teamId": "team_01HXEXAMPLE",
"active": true,
"createdAt": 1719792000000,
"folderId": "fld_01HXEXAMPLE"
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"folderId": "fld_01HXEXAMPLE",
"teamId": "team_01HXEXAMPLE"
}'GET /workflows/{id} Auth requiredRead a workflow's full DRAFT graph, or its deployed snapshot via ?view=deployed.
Parameters
Name In Type Description id* path string — view query string Omit for the current draft. `deployed` reads the last Go Live snapshot; 404 workflow_not_deployed if never published.
Responses
200 The workflow (draft or deployed, per ?view).
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
404 Workflow not found (or, with ?view=deployed, never deployed — workflow_not_deployed).
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — one of 2 shapes —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"active": true,
"nodes": [
{}
],
"edges": [
{}
],
"description": "...",
"folderId": "fld_01HXEXAMPLE",
"teamId": "team_01HXEXAMPLE",
"schedule": {},
"createdAt": 1719792000000,
"updatedAt": 1719792000000,
"deployed": {
"deployedAt": 1719792000000,
"versionNo": 0,
"contentHash": "..."
}
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/workflows/<id> \
-H "Authorization: Bearer wextl_..."PATCH /workflows/{id} Auth requiredCurated update: name, active, schedule (recurrence), and/or folderId.
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description name body string — active body boolean Activate or deactivate the workflow. recurrence body any Schedule recurrence object, or null to clear. Setting a schedule does not activate. folderId body string | null Move into folder; null to unassign.
Responses
200 Fields that were updated.
400 Invalid body.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Workflow not found.
409 Conflict — re-read and retry.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — object —
data shape (object)
Name In Type Description id — string — updated — array<string> — name — string — active — boolean — folderId — string | null —
Example response
{
"data": {
"id": "abc123",
"updated": [
"..."
],
"name": "My workflow",
"active": true,
"folderId": "fld_01HXEXAMPLE"
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/workflows/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"active": true,
"recurrence": "...",
"folderId": "fld_01HXEXAMPLE"
}'DELETE /workflows/{id} Auth requiredPermanently delete a workflow. Refused while active or deployed.
Parameters
Name In Type Description id* path string —
Responses
200 Deleted.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Workflow not found.
409 Workflow is active or deployed — deactivate/undeploy first.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/workflows/<id> \
-H "Authorization: Bearer wextl_..."POST /workflows/{id}/ops Auth requiredApply a batch of graph operations to a workflow.
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description ops* body array<object> Batch of GraphOp objects. One of: add_node, update_params, update_config, connect, disconnect, remove_node, rename_node, set_credential, set_edge_filter. expectedUpdatedAt body integer Optimistic-concurrency precondition — the workflow updatedAt this batch was computed against. Mismatch → 409 workflow_modified.
Responses
200 The batch result — best-effort; a non-empty errors[] does not mean the whole batch was rejected.
400 Invalid body, or the resulting graph fails the topology gate.
401 No valid bearer token.
403 Missing workflow:write scope, or the plan lacks API access.
404 Workflow not found.
409 workflow_modified — expectedUpdatedAt no longer matches; reload and retry.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — GraphOpsResult —
data shape (GraphOpsResult)
Name In Type Description applied* — object tempId → real node id, for every add_node that landed. errors* — array<string> Best-effort per-op failures — the rest of the batch still applies. touched* — array<integer> Node ids added or param/config-updated by this batch, including hub-scaffolded satellite/placeholder ids. updatedAt — integer The workflow's new updatedAt — pass it as expectedUpdatedAt on the next ops call to avoid conflicts.
Example response
{
"data": {
"applied": {},
"errors": [
"..."
],
"touched": [
0
],
"updatedAt": 1719792000000
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows/<id>/ops \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"ops": [
{
"op": "..."
}
],
"expectedUpdatedAt": 1719792000000
}'POST /workflows/{id}/deploy Auth requiredGo Live — publish the current draft as the deployed snapshot (idempotent).
Parameters
Name In Type Description id* path string —
Request body
Name In Type Description expectedUpdatedAt body integer Optimistic-concurrency precondition — the draft updatedAt this deploy was computed against. Mismatch → 409 workflow_modified.
Responses
200 The new deployed snapshot summary.
401 No valid bearer token.
403 Missing workflow:write scope, or the plan lacks API access.
404 Workflow not found.
409 workflow_modified — expectedUpdatedAt no longer matches; reload and retry.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — DeployResult —
data shape (DeployResult)
Name In Type Description workflowId* — string — contentHash* — string — versionNo* — integer — deployedAt* — integer Epoch milliseconds.
Example response
{
"data": {
"workflowId": "wf_01HXEXAMPLE",
"contentHash": "...",
"versionNo": 0,
"deployedAt": 1719792000000
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows/<id>/deploy \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"expectedUpdatedAt": 1719792000000
}'POST /workflows/{id}/webhook Auth requiredMint (or return the existing) inbound webhook URL for a workflow trigger node.
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description nodeId* body string The webhook trigger node id (numeric id as a string).
Responses
200 The webhook URL (idempotent — alreadyBound:true when a live one already existed).
400 Missing nodeId, or the node is not a webhook trigger node.
401 No valid bearer token.
403 Missing webhook:write scope, or the plan lacks API access.
404 Workflow or node not found.
409 The node already has a DISABLED webhook record bound to it.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Webhook —
data shape (Webhook)
Name In Type Description webhookId* — string — url* — string The inbound URL to POST trigger payloads to. alreadyBound — boolean —
Example response
{
"data": {
"webhookId": "wh_01HXEXAMPLE",
"url": "https://eu1.wextl.com/hooks/wh_01HXEXAMPLE",
"alreadyBound": true
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows/<id>/webhook \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"nodeId": "abc123"
}'POST /workflows/{id}/runs Auth requiredStart a run of the workflow's current draft (billing and structure checks apply).
Parameters
Name In Type Description id* path string —
Request body
Name In Type Description nodeId body string Optional node id (numeric id as a string) to run from — a scoped run. Omit for a full-graph run. upstreamOutputs body object Optional nodeId→payload map to seed as upstream inputs. Mutually exclusive with seedFromRun. seedFromRun body object Seed from a past run node output (server-resolved). Mutually exclusive with upstreamOutputs.
Responses
201 The run was created and enqueued.
400 Invalid nodeId/inputs, or the workflow fails the topology gate (e.g. no runnable path).
401 No valid bearer token.
402 Payment required — billing problem blocking runs.
403 Missing workflow:write scope, no active plan, or out of credits (PLAN_LIMIT_EXCEEDED).
404 Workflow not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — StartRunResult —
data shape (StartRunResult)
Name In Type Description runId* — string —
Example response
{
"data": {
"runId": "run_01HXEXAMPLE"
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows/<id>/runs \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"nodeId": "abc123",
"upstreamOutputs": {},
"seedFromRun": {
"runId": "run_01HXEXAMPLE",
"nodeId": 0
}
}'POST /workflows/{id}/test-module Auth requiredExecute a single app node with its current parameters (module test).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description nodeId* body one of 2 shapes —
Responses
200 Module test result.
400 Invalid body or non-app node.
401 No valid bearer token.
403 Missing workflow:write scope.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/workflows/<id>/test-module \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"nodeId": "abc123"
}'
Variables 4 endpointsGET /variables Auth requiredList variable names and metadata for the organization (up to 500). Secret values are always returned as null.
Responses
200 Every variable visible to this key.
401 No valid bearer token.
403 Missing variable:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<Variable> —
data[] item (Variable)
Name In Type Description id* — string — name* — string — isSecret* — boolean — value* — string | null — teamId* — string | null — createdAt* — integer Epoch milliseconds. updatedAt* — integer Epoch milliseconds.
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"isSecret": false,
"value": null,
"teamId": "team_01HXEXAMPLE",
"createdAt": 1719792000000,
"updatedAt": 1719792000000
}
]
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/variables \
-H "Authorization: Bearer wextl_..."GET /variables/{id} Auth requiredRead one variable by id. A secret variable's value is always returned as null.
Parameters
Name In Type Description id* path string —
Responses
200 The variable (value is null when isSecret is true).
401 No valid bearer token.
403 Missing variable:read scope, or the plan lacks API access.
404 Variable not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Variable —
data shape (Variable)
Name In Type Description id* — string — name* — string — isSecret* — boolean — value* — string | null — teamId* — string | null — createdAt* — integer Epoch milliseconds. updatedAt* — integer Epoch milliseconds.
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"isSecret": false,
"value": null,
"teamId": "team_01HXEXAMPLE",
"createdAt": 1719792000000,
"updatedAt": 1719792000000
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/variables/<id> \
-H "Authorization: Bearer wextl_..."PUT /variables/{id} Auth requiredCreate or update a variable by name (upsert) — the {id} path segment IS the variable name, not a database id. Secrets are write-only.
Parameters
Name In Type Description id* path string The variable name (letters/numbers/underscores, must start with a letter or underscore) — this call upserts by name.
Request body (required)
Name In Type Description value* body string Required for a new non-secret variable. For an existing secret, a blank value keeps the current stored value. isSecret body boolean Whether this variable is a secret. Only takes effect on create — updating an existing variable never changes its stored secret status. teamId body string | null Must belong to the caller's org. Omit for an org-level variable.
Responses
200 An existing variable was updated.
201 A new variable was created.
400 Invalid body — bad name, missing value, a secret shorter than 6 characters, or an unresolvable teamId.
401 No valid bearer token.
403 Missing variable:write scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — SetVariableResult —
data shape (SetVariableResult)
Name In Type Description id* — string — name* — string — isSecret* — boolean — teamId* — string | null — updatedAt* — integer Epoch milliseconds. created* — boolean true when this call created a new variable, false when it updated an existing one.
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"isSecret": false,
"teamId": "team_01HXEXAMPLE",
"updatedAt": 1719792000000,
"created": true
}
}Example request
cURL TypeScript SDK
curl -X PUT https://eu1.wextl.com/api/v1/variables/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"value": null,
"isSecret": false,
"teamId": "team_01HXEXAMPLE"
}'DELETE /variables/{id} Auth requiredSoft-delete a variable by database id (not name).
Parameters
Name In Type Description id* path string The variable database id from list_variables / get_variable.
Responses
200 Deleted.
401 No valid bearer token.
403 Missing variable:write scope.
404 Variable not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/variables/<id> \
-H "Authorization: Bearer wextl_..."
Runs 6 endpointsList runs of a workflow (bounded, cursor-paginated). workflowId is REQUIRED in v1 — org-wide listing is out of scope.
Parameters
Name In Type Description workflowId* query string REQUIRED — scope the listing to this workflow. cursor query string — limit query integer Page size. Default 50. q query string Free-text search over status + id.
Responses
200 A page of run summaries.
400 workflowId query parameter is required.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<RunSummary> — next_cursor* — string | null —
data[] item (RunSummary)
Name In Type Description id* — string — workflowId* — string | null — status* — string — createdAt* — string | null ISO-8601 timestamp. finishedAt — string | null ISO-8601 timestamp; null while the run is non-terminal. creditsUsed* — number —
Example response
{
"data": [
{
"id": "abc123",
"workflowId": "wf_01HXEXAMPLE",
"status": "succeeded",
"createdAt": "2024-07-01T12:00:00.000Z",
"creditsUsed": 50,
"finishedAt": null
}
],
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/runs \
-H "Authorization: Bearer wextl_..."GET /runs/{id} Auth requiredGet a run report: status, timestamps, error, and per-node status/error/output.
Parameters
Name In Type Description id* path string —
Responses
200 The run report.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
404 Run not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — RunReport —
data shape (RunReport)
Name In Type Description id* — string — workflowId — string — status* — string — createdAt — string | null — finishedAt — string | null — error — string | null — nodes — array<object> —
Example response
{
"data": {
"id": "abc123",
"status": "succeeded",
"workflowId": "wf_01HXEXAMPLE",
"createdAt": "2024-07-01T12:00:00.000Z",
"finishedAt": null,
"error": null,
"nodes": [
{}
]
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/runs/<id> \
-H "Authorization: Bearer wextl_..."POST /runs/{id}/cancel Auth requiredCancel an in-flight workflow run.
Parameters
Name In Type Description id* path string —
Responses
200 The run was cancelled.
400 The run is already in a terminal state.
401 No valid bearer token.
403 Missing workflow:write scope, or the plan lacks API access.
404 Run not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — CancelRunResult —
data shape (CancelRunResult)
Name In Type Description ok* — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/runs/<id>/cancel \
-H "Authorization: Bearer wextl_..."POST /runs/{id}/rerun Auth requiredRe-queue a finished run as a new attempt.
Parameters
Name In Type Description id* path string —
Responses
201 New attempt enqueued.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Run not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/runs/<id>/rerun \
-H "Authorization: Bearer wextl_..."POST /runs/{id}/retry-node Auth requiredResume a run from one failed node (same attempt).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description nodeId* body integer — attemptNumber body integer —
Responses
200 Resume enqueued.
400 Invalid body.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Run not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/runs/<id>/retry-node \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"nodeId": 0,
"attemptNumber": 0
}'POST /runs/{id}/nodes/{nodeId}/respond Auth requiredSubmit a human-in-the-loop response and resume (or complete) the run.
Parameters
Name In Type Description id* path string — nodeId* path string —
Request body (required)
Name In Type Description response* body object — attemptNumber body integer —
Responses
200 Response recorded.
400 Invalid body.
401 No valid bearer token.
402 Payment required for mid-flow resume.
403 Missing workflow:write scope.
404 Run not found.
409 Conflict — resume already in flight or run terminal.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/runs/<id>/nodes/<nodeId>/respond \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"response": {},
"attemptNumber": 0
}'
Credentials 6 endpointsGET /credentials Auth requiredList the organization's stored credentials (names and metadata only; secret payloads are never returned).
Parameters
Name In Type Description cursor query string — limit query integer Page size. Default 50. appId query string Optional app id to filter by.
Responses
200 A page of credential summaries.
401 No valid bearer token.
403 Missing credential:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<Credential> — next_cursor* — string | null —
data[] item (Credential)
Name In Type Description id* — string — name* — string — appId* — string — type* — string The connection type id. status* — string — folderId — string | null — createdAt* — integer Epoch milliseconds. updatedAt* — integer Epoch milliseconds.
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"appId": "slack",
"type": "oauth2",
"status": "succeeded",
"createdAt": 1719792000000,
"updatedAt": 1719792000000,
"folderId": "fld_01HXEXAMPLE"
}
],
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/credentials \
-H "Authorization: Bearer wextl_..."POST /credentials Auth requiredCreate a credential when safe (no-auth or secrets already supplied). OAuth or missing secrets return status credential_required with a connect_url for a logged-in human.
Request body (required)
Name In Type Description appId* body string — connectionId* body string — name* body string — data body object Secret field values when the caller already has them. Never invent placeholders. teamId body string | null —
Responses
200 Created credential or credential_required handoff.
400 Invalid body.
401 No valid bearer token.
403 Missing credential:write scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — CredentialCreateResult —
data shape (CredentialCreateResult)
Name In Type Description credentialId — string — status — string — appId — string — connectionId — string — connect_url — string —
Example response
{
"data": {
"credentialId": "abc123",
"status": "succeeded",
"appId": "slack",
"connectionId": "abc123",
"connect_url": "..."
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/credentials \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"appId": "slack",
"connectionId": "abc123",
"name": "My workflow",
"data": {},
"teamId": "team_01HXEXAMPLE"
}'PATCH /credentials/{id} Auth requiredRename a credential or move its folder (never returns secrets).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description name body string — folderId body string | null —
Responses
200 Updated credential summary.
400 Invalid body.
401 No valid bearer token.
403 Missing credential:write scope.
404 Credential not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Credential —
data shape (Credential)
Name In Type Description id* — string — name* — string — appId* — string — type* — string The connection type id. status* — string — folderId — string | null — createdAt* — integer Epoch milliseconds. updatedAt* — integer Epoch milliseconds.
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"appId": "slack",
"type": "oauth2",
"status": "succeeded",
"createdAt": 1719792000000,
"updatedAt": 1719792000000,
"folderId": "fld_01HXEXAMPLE"
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/credentials/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"folderId": "fld_01HXEXAMPLE"
}'DELETE /credentials/{id} Auth requiredSoft-delete a credential.
Parameters
Name In Type Description id* path string —
Responses
200 Deleted.
401 No valid bearer token.
403 Missing credential:write scope.
404 Credential not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/credentials/<id> \
-H "Authorization: Bearer wextl_..."POST /credentials/{id}/verify Auth requiredTest whether a stored credential is accepted by the third-party service (never returns the secret).
Parameters
Name In Type Description id* path string —
Responses
200 Verification outcome.
401 No valid bearer token.
403 Missing credential:use scope.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/credentials/<id>/verify \
-H "Authorization: Bearer wextl_..."POST /credentials/dynamic-options Auth requiredFetch live RPC-backed field options (tables, channels, sheets, …).
Request body (required)
Name In Type Description appId* body string — rpcId* body string — credentialId body string — params body object —
Responses
200 Option items.
400 Invalid body.
401 No valid bearer token.
403 Missing credential:use scope.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/credentials/dynamic-options \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"appId": "slack",
"rpcId": "abc123",
"credentialId": "abc123",
"params": {}
}'
Databases 6 endpointsGET /databases Auth requiredList the organization's built-in database tables.
Parameters
Name In Type Description limit query integer —
Responses
200 Database table summaries.
401 No valid bearer token.
403 Missing database:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<DatabaseSummary> — truncated* — boolean —
data[] item (DatabaseSummary)
Name In Type Description id* — string — name* — string — columnCount* — integer — rowCount* — integer —
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"columnCount": 3,
"rowCount": 3
}
],
"truncated": true
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/databases \
-H "Authorization: Bearer wextl_..."POST /databases Auth requiredCreate a built-in database table (DDL). Row writes are not available on the public API.
Request body (required)
Name In Type Description name* body string — description body string — columns* body array<object> — teamId body string | null —
Responses
201 Created table with generated column ids.
400 Invalid body.
401 No valid bearer token.
403 Missing database:write scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — DatabaseSchema —
data shape (DatabaseSchema)
Name In Type Description id* — string — name* — string — columns* — array<object> — rowCount* — integer — uniqueKeyColumnId — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"columns": [
{
"id": "abc123",
"name": "My workflow",
"type": "action",
"required": true,
"indexed": true
}
],
"rowCount": 3,
"uniqueKeyColumnId": "abc123"
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/databases \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"columns": [
{}
],
"description": "...",
"teamId": "team_01HXEXAMPLE"
}'GET /databases/{id} Auth requiredRead one database table's column schema.
Parameters
Name In Type Description id* path string —
Responses
200 Schema projection.
401 No valid bearer token.
403 Missing database:read scope, or the plan lacks API access.
404 Database not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — DatabaseSchema —
data shape (DatabaseSchema)
Name In Type Description id* — string — name* — string — columns* — array<object> — rowCount* — integer — uniqueKeyColumnId — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"columns": [
{
"id": "abc123",
"name": "My workflow",
"type": "action",
"required": true,
"indexed": true
}
],
"rowCount": 3,
"uniqueKeyColumnId": "abc123"
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/databases/<id> \
-H "Authorization: Bearer wextl_..."PATCH /databases/{id} Auth requiredReplace a table's column definitions with the full desired list (declarative).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description columns* body array<object> —
Responses
200 Updated schema.
400 Invalid body.
401 No valid bearer token.
403 Missing database:write scope, or the plan lacks API access.
404 Database not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — DatabaseSchema —
data shape (DatabaseSchema)
Name In Type Description id* — string — name* — string — columns* — array<object> — rowCount* — integer — uniqueKeyColumnId — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"columns": [
{
"id": "abc123",
"name": "My workflow",
"type": "action",
"required": true,
"indexed": true
}
],
"rowCount": 3,
"uniqueKeyColumnId": "abc123"
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/databases/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"columns": [
{}
]
}'DELETE /databases/{id} Auth requiredSoft-delete a built-in database table.
Parameters
Name In Type Description id* path string —
Responses
200 Deleted.
401 No valid bearer token.
403 Missing database:write scope.
404 Database not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/databases/<id> \
-H "Authorization: Bearer wextl_..."GET /databases/{id}/rows Auth requiredRead rows from a built-in database table (bounded). No public DML row writes.
Parameters
Name In Type Description id* path string — filters query string JSON-encoded filter array. sortColumnId query string — sortDir query string — limit query integer — cursor query string —
Responses
200 A page of rows keyed by column name.
400 Invalid filters or query shape.
401 No valid bearer token.
403 Missing database:read scope, or the plan lacks API access.
404 Database not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<object> — count* — integer — next_cursor* — string | null —
Example response
{
"data": [
{}
],
"count": 3,
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/databases/<id>/rows \
-H "Authorization: Bearer wextl_..."
Structures 4 endpointsGET /structures Auth requiredList the organization's structures.
Parameters
Name In Type Description limit query integer —
Responses
200 Structure summaries.
401 No valid bearer token.
403 Missing structure:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<StructureSummary> — truncated* — boolean —
data[] item (StructureSummary)
Name In Type Description id* — string — name* — string — fieldCount* — integer —
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"fieldCount": 3
}
],
"truncated": true
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/structures \
-H "Authorization: Bearer wextl_..."POST /structures Auth requiredCreate a structure. Honours the structures_created plan limit (no bypass).
Request body (required)
Name In Type Description name* body string — description body string — fields body array<object> — folderId body string | null — teamId body string | null —
Responses
201 Created structure.
400 Invalid body.
401 No valid bearer token.
403 Missing structure:write scope, or plan structure limit reached.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Structure —
data shape (Structure)
Name In Type Description id* — string — name* — string — fields* — array<object> —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"fields": [
{
"name": "My workflow",
"type": "action",
"required": true
}
]
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/structures \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"description": "...",
"fields": [
{}
],
"folderId": "fld_01HXEXAMPLE",
"teamId": "team_01HXEXAMPLE"
}'GET /structures/{id} Auth requiredRead one structure's field list.
Parameters
Name In Type Description id* path string —
Responses
200 Structure fields.
401 No valid bearer token.
403 Missing structure:read scope, or the plan lacks API access.
404 Structure not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Structure —
data shape (Structure)
Name In Type Description id* — string — name* — string — fields* — array<object> —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"fields": [
{
"name": "My workflow",
"type": "action",
"required": true
}
]
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/structures/<id> \
-H "Authorization: Bearer wextl_..."PATCH /structures/{id} Auth requiredUpdate a structure name, description, fields, or folderId.
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description name body string — description body string — fields body array<object> — folderId body string | null —
Responses
200 Updated structure.
400 Invalid body.
401 No valid bearer token.
403 Missing structure:write scope.
404 Structure not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Structure —
data shape (Structure)
Name In Type Description id* — string — name* — string — fields* — array<object> —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"fields": [
{
"name": "My workflow",
"type": "action",
"required": true
}
]
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/structures/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"description": "...",
"fields": [
{}
],
"folderId": "fld_01HXEXAMPLE"
}'
Functions 4 endpointsGET /functions Auth requiredList the organization's custom functions (metadata only).
Parameters
Name In Type Description cursor query string — limit query integer — q query string —
Responses
200 Function summaries.
401 No valid bearer token.
403 Missing function:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<FunctionSummary> — next_cursor* — string | null —
data[] item (FunctionSummary)
Name In Type Description id* — string — name* — string — description — string | null —
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"description": "..."
}
],
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/functions \
-H "Authorization: Bearer wextl_..."POST /functions Auth requiredCreate a custom function. Requires the custom_functions plan feature (no bypass).
Request body (required)
Name In Type Description name* body string camelCase name. code* body string — description body string — parameters body array<object> — folderId body string | null — teamId body string | null —
Responses
201 Created function.
400 Invalid body.
401 No valid bearer token.
403 Missing function:write scope, or custom_functions not on plan.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Function —
data shape (Function)
Name In Type Description id* — string — name* — string — description — string | null — code* — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"code": "...",
"description": "..."
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/functions \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"code": "...",
"description": "...",
"parameters": [
{}
],
"folderId": "fld_01HXEXAMPLE",
"teamId": "team_01HXEXAMPLE"
}'GET /functions/{id} Auth requiredRead one custom function including user-owned code.
Parameters
Name In Type Description id* path string —
Responses
200 Function with code.
401 No valid bearer token.
403 Missing function:read scope, or the plan lacks API access.
404 Function not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Function —
data shape (Function)
Name In Type Description id* — string — name* — string — description — string | null — code* — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"code": "...",
"description": "..."
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/functions/<id> \
-H "Authorization: Bearer wextl_..."PATCH /functions/{id} Auth requiredUpdate a custom function. Requires the custom_functions plan feature (no bypass).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description name body string — code body string — description body string — parameters body array<object> — folderId body string | null —
Responses
200 Updated function.
400 Invalid body.
401 No valid bearer token.
403 Missing function:write scope, or custom_functions not on plan.
404 Function not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — Function —
data shape (Function)
Name In Type Description id* — string — name* — string — description — string | null — code* — string —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"code": "...",
"description": "..."
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/functions/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"code": "...",
"description": "...",
"parameters": [
{}
],
"folderId": "fld_01HXEXAMPLE"
}'
Teams 1 endpointList the organization's teams (discovery for create_workflow; requires workflow:read).
Responses
200 Team summaries.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<Team> —
data[] item (Team)
Name In Type Description id* — string — name* — string — createdAt* — integer Epoch milliseconds.
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"createdAt": 1719792000000
}
]
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/teams \
-H "Authorization: Bearer wextl_..."
Folders 4 endpointsList the organization's folder tree (discovery for create_workflow; requires workflow:read).
Responses
200 Folder summaries.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<Folder> —
data[] item (Folder)
Name In Type Description id* — string — name* — string — parentId* — string | null —
Example response
{
"data": [
{
"id": "abc123",
"name": "My workflow",
"parentId": "abc123"
}
]
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/folders \
-H "Authorization: Bearer wextl_..."POST /folders Auth requiredCreate a folder (requires workflow:write).
Request body (required)
Name In Type Description name* body string — parentId body string | null —
Responses
201 Created folder.
400 Invalid name or parentId.
401 No valid bearer token.
403 Missing workflow:write scope.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — Folder —
data shape (Folder)
Name In Type Description id* — string — name* — string — parentId* — string | null —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"parentId": "abc123"
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/folders \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"parentId": "abc123"
}'PATCH /folders/{id} Auth requiredRename or reparent a folder (requires workflow:write).
Parameters
Name In Type Description id* path string —
Request body (required)
Name In Type Description name body string — parentId body string | null —
Responses
200 Updated folder.
400 Invalid name or parentId.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Folder not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — Folder —
data shape (Folder)
Name In Type Description id* — string — name* — string — parentId* — string | null —
Example response
{
"data": {
"id": "abc123",
"name": "My workflow",
"parentId": "abc123"
}
}Example request
cURL TypeScript SDK
curl -X PATCH https://eu1.wextl.com/api/v1/folders/<id> \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"name": "My workflow",
"parentId": "abc123"
}'DELETE /folders/{id} Auth requiredDelete a folder (requires workflow:write). Contents are not cascade-deleted.
Parameters
Name In Type Description id* path string —
Responses
200 Deleted.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Folder not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/folders/<id> \
-H "Authorization: Bearer wextl_..."
Activity 1 endpointGET /activity Auth requiredList the organization's activity feed (audit log). Requires activity:read (owner/admin).
Parameters
Name In Type Description targetType query string — targetId query string — actorUserId query string — action query string — since query integer Epoch ms lower bound. until query integer Epoch ms upper bound (exclusive). limit query integer — cursor query string Opaque "{ts}_{id}" from a previous page.
Responses
200 Activity page with labeled events and actor map.
401 No valid bearer token.
403 Missing activity:read scope, or not an org admin.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — ActivityPage —
data shape (ActivityPage)
Name In Type Description events* — array<object> — actors* — object — next_cursor* — string | null —
Example response
{
"data": {
"events": [
{
"id": "abc123",
"ts": 0,
"action": "...",
"label": "My workflow",
"targetType": "...",
"targetId": "abc123",
"actorUserId": "abc123",
"metadata": "..."
}
],
"actors": {},
"next_cursor": null
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/activity \
-H "Authorization: Bearer wextl_..."
Invitations 3 endpointsGET /invitations Auth requiredList organization invitations. Requires invitation:read (owner/admin).
Parameters
Name In Type Description status query string — limit query integer —
Responses
200 Invitation summaries (includes invite_url).
401 No valid bearer token.
403 Missing invitation:read scope, or not an org admin.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<Invitation> —
data[] item (Invitation)
Name In Type Description id* — string — email* — string — role — string | null — teamId — string | null — status* — string — expiresAt* — integer Epoch milliseconds. createdAt* — integer Epoch milliseconds. inviterId* — string — invite_url* — string Absolute URL for the invitee; relay if email delivery fails.
Example response
{
"data": [
{
"id": "abc123",
"email": "...",
"status": "succeeded",
"expiresAt": 1719792000000,
"createdAt": 1719792000000,
"inviterId": "abc123",
"invite_url": "...",
"role": "...",
"teamId": "team_01HXEXAMPLE"
}
]
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/invitations \
-H "Authorization: Bearer wextl_..."POST /invitations Auth requiredCreate an invitation. Requires invitation:write. Returns invite_url for headless relay.
Request body (required)
Name In Type Description email* body string — role* body string — teamId body string | null —
Responses
201 Created invitation.
401 No valid bearer token.
403 Missing invitation:write, seat cap, or role escalation denied.
409 Pending invitation already exists for this email.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — Invitation —
data shape (Invitation)
Name In Type Description id* — string — email* — string — role — string | null — teamId — string | null — status* — string — expiresAt* — integer Epoch milliseconds. createdAt* — integer Epoch milliseconds. inviterId* — string — invite_url* — string Absolute URL for the invitee; relay if email delivery fails.
Example response
{
"data": {
"id": "abc123",
"email": "...",
"status": "succeeded",
"expiresAt": 1719792000000,
"createdAt": 1719792000000,
"inviterId": "abc123",
"invite_url": "...",
"role": "...",
"teamId": "team_01HXEXAMPLE"
}
}Example request
cURL TypeScript SDK
curl -X POST https://eu1.wextl.com/api/v1/invitations \
-H "Authorization: Bearer wextl_..." \
-H "Content-Type: application/json" \
-d '{
"email": "...",
"role": "...",
"teamId": "team_01HXEXAMPLE"
}'DELETE /invitations/{id} Auth requiredCancel a pending invitation. Requires invitation:write.
Parameters
Name In Type Description id* path string —
Responses
200 Cancelled.
401 No valid bearer token.
403 Missing invitation:write scope, or not an org admin.
404 Invitation not found.
409 Invitation is not pending.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — object —
data shape (object)
Name In Type Description ok — boolean —
Example response
{
"data": {
"ok": true
}
}Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/invitations/<id> \
-H "Authorization: Bearer wextl_..."
Webhooks 2 endpointsGET /webhooks Auth requiredList inbound webhooks (requires workflow:read).
Parameters
Name In Type Description cursor query string — limit query integer — q query string —
Responses
200 Webhook page.
401 No valid bearer token.
403 Missing workflow:read scope.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data* — array<object> — next_cursor* — string | null —
Example response
{
"data": [
{}
],
"next_cursor": null
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/webhooks \
-H "Authorization: Bearer wextl_..."DELETE /webhooks/{id} Auth requiredDelete a webhook. Pass force=1 if still bound to a workflow.
Parameters
Name In Type Description id* path string — force query string —
Responses
204 Deleted.
401 No valid bearer token.
403 Missing workflow:write scope.
404 Webhook not found.
409 Webhook in use — pass force=1.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Example request
cURL TypeScript SDK
curl -X DELETE https://eu1.wextl.com/api/v1/webhooks/<id> \
-H "Authorization: Bearer wextl_..."
Members 1 endpointList organization members (requires invitation:read / owner-admin).
Responses
200 Member roster.
401 No valid bearer token.
403 Missing invitation:read scope, or not an org admin.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — array<object> —
Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/members \
-H "Authorization: Bearer wextl_..."
Catalog 2 endpointsGET /catalog/apps Auth requiredSearch the app and module catalog by keyword. Use the returned app and module ids when creating or updating workflow nodes.
Parameters
Name In Type Description query* query string Search keywords (app or capability name). limit query integer Max apps to return. Default 10.
Responses
200 Matching apps with their modules.
400 query is required.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — array<CatalogApp> —
data[] item (CatalogApp)
Name In Type Description appId* — string — name* — string — description — string | null — modules* — array<object> —
Example response
{
"data": [
{
"appId": "slack",
"name": "My workflow",
"modules": [
{
"id": "abc123",
"label": "My workflow",
"type": "action"
}
],
"description": "..."
}
]
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/catalog/apps \
-H "Authorization: Bearer wextl_..."GET /catalog/apps/{appId}/modules/{moduleId} Auth requiredRead a module's parameter schema and metadata. Does not expose internal request implementation details.
Parameters
Name In Type Description appId* path string — moduleId* path string —
Responses
200 The module spec (lean projection — meta + mappable/static fields).
400 appId and moduleId are required, or the module cannot be projected for the public API.
401 No valid bearer token.
403 Missing workflow:read scope, or the plan lacks API access.
404 Module not found.
421 Wrong regional endpoint — follow error.base_url.
429 Rate limited — retry after error.retry_after_s seconds.
Name In Type Description data — ModuleSpec —
data shape (ModuleSpec)
Name In Type Description meta* — object — mappableFields* — array<object> — staticFields* — array<object> — emitsMultipleBundles — boolean — requiresConnection — boolean —
Example response
{
"data": {
"meta": {},
"mappableFields": [
{}
],
"staticFields": [
{}
],
"emitsMultipleBundles": true,
"requiresConnection": true
}
}Example request
cURL TypeScript SDK
curl -X GET https://eu1.wextl.com/api/v1/catalog/apps/<appId>/modules/<moduleId> \
-H "Authorization: Bearer wextl_..."