1. Workflow Builder
Returning.AI
  • Getting Started
  • Users
    • User directory and provisioning
    • Get Users with Filters
    • Create New User
    • Get User Data
    • Manage User Account
    • Get User Milestones
    • Update User Data, Identifier, And Roles
    • Update User XP and Currency
  • Messaging
    • Agent messaging workflow
    • Get Messages
    • Send Message
    • Reply Message
    • React Message
    • Upload message images
  • Gamification
    • Leaderboards
      • Leaderboards
      • List leaderboards with pagination
      • Create a new leaderboard
      • Update an existing leaderboard
      • Get a single leaderboard by ID
      • Delete a leaderboard
    • Streaks & Mini Games
      • Mini-game State and History
      • List user streak logs
      • List mini-game logs by user email
      • Get current mini-game and streak state
      • Update user spin-wheel information
    • Referral
      • Referral Program Integration
      • Get referral programs
      • Get user's referral summary
    • Rolling Data
    • Match Predictions
      • Create match prediction
      • List match predictions
      • Get match prediction
      • Patch match prediction
      • Publish match prediction
      • Settle match prediction
      • Get settlement results
      • Void match prediction
      • Bulk update match predictions
      • Get bulk job status
      • Get bulk job results
    • Loyalty Points
      • Create loyalty points export
      • Get loyalty points export status
      • Get loyalty points export download link
    • Get tier configuration
    • Get daily user XP and coin changes
    • Search user gamification logs
    • Get user activity stats
  • Rewards & Redemptions
    • Store catalog to redemptions
    • List redemption orders by custom-field identifier
    • Update redemption order status or refund
    • Create redemption order status
    • List redemption orders by user email
    • List redemption statuses
    • Get redemption status by ID
    • List redemption orders by community
    • Get redemption order status history
  • Chart Analysis
    • Create Analysis
    • Get Analysis
    • Update Analysis
    • Delete Analysis
    • List Analyses
    • Append Drawings
  • Bulk Operations
    • Bulk user updates
    • List bulk update jobs
    • Get bulk update job status
    • Get bulk update job details
    • Bulk update users from CSV
    • Bulk update premium currency from CSV
  • Channels
    • Iframe
    • List integration channels
  • Events
    • Outgoing webhooks
      • Encryption
      • User Joins Server
      • User Visits server
      • New Message Posted Anywhere
      • New Message Posted To channel
      • Purchased Store Item
    • Incoming webhooks
      • API Keys & Encryption
      • Send message into channels
      • Update Custom User Fields
      • Update In-game currency
  • Widgets
    • Authenticated Widgets
    • Public widgets
    • Channels
    • Leaderboard
    • Milestone
    • Socials
    • Store
  • Store
    • Store catalog
    • Purchase History
      • Archive or restore an order
      • Update redemption instructions or voucher details
    • Categories
      • List Store categories
      • Create Store category
      • Get Store category by ID
      • Update Store category
      • Delete Store category
    • Products
      • List products
      • Update products in bulk
      • Create products in bulk
      • Create product with vouchers
      • Read product
      • Update product and append vouchers
      • Delete product
    • Redemption-transaction
      • Get redemption transaction detail
    • Get Store configuration
    • Update Store configuration
  • Community Analytics
    • Get Loyalty Overview
    • Get Phone Verification Contacts
  • Community
    • Community directory and appearance
    • Appearance
      • Update community theme colors
      • Update community bot profile
      • Update community URL metadata
      • Update community name and URL
    • Community Users
      • Get community users
      • Get user
    • Create community
  • API Keys
    • API key lifecycle
    • Community API Keys
      • Create API key
      • Read API keys
      • Delete API key
      • Update API key
    • User API Keys
      • List user API keys
      • Create user API key
      • Update user API key
      • Delete user API key
      • Get current API key information
  • User Fields
    • User field definitions and history
    • User Field History
      • Get all user field histories in a community
      • Get user field histories for a specific field
      • Get user field histories for a specific user
      • Get user field histories of specific user field and user
      • Update A User Field Value
      • Deprecated Field-First History Write
      • Deprecated Field-First History Read
    • Get A User Field Definition
    • Update A User Field Definition
    • Create A User Field Definition
    • Delete A User Field Definition
    • List User Field Definitions
  • Legacy
    • Servers
      • Create server
      • List servers
      • Update server metadata
    • Bulk Operations
      • Bulk import users from CSV
    • Authentication
      • Secure Auth
      • Register user with password
      • Verify user email
      • Log in user with password
    • Badges
      • List badges
      • Create badge
      • Update badge
      • Delete badge
      • Remove badge from user
      • Award badge to user
    • Messaging
    • Roles & Permissions
      • List server roles
      • Create role
      • Update role
      • Delete role
      • List user roles
      • Add role to user
      • Remove role from user
    • Users
      • Get user
      • Upload user avatar
    • Channels
      • Create channel
      • Update channel
      • Delete channel
    • API Keys
      • List integration API keys
      • Create integration API key
      • Delete integration API key
      • Update integration API key
  • Data Workflows
    • Read event-ingest lifecycle status by trigger and batch ID.
  • Community Logs
    • Retrieve and export community logs
  • Workflow Builder
    • Workflow Builder API overview
    • Connect an AI agent to the Workflow Builder tools
    • Bind step inputs to trigger and earlier-step outputs
    • Code steps through the API
    • Edit safely: revisions, conflicts, export, import and copying a workflow
    • Set up an event-ingest workflow and check batch status
    • Keep a member's tier or role in sync
    • Reversible rewards
    • Test without side effects, then confirm a live run
    • Build a trading-rewards workflow from event ingest
    • Reward members from your own system with a webhook workflow
    • List step types and trigger types
      GET
    • List workflows
      GET
    • Create a workflow
      POST
    • Get a workflow
      GET
    • Rename a workflow or set its failure webhook
      PATCH
    • Delete a workflow
      DELETE
    • Duplicate a workflow
      POST
    • Export a workflow definition
      GET
    • Validate a stored workflow
      POST
    • Create or replace the trigger
      PUT
    • Add a step
      POST
    • Get a step
      GET
    • Update a step
      PATCH
    • Delete a step
      DELETE
    • Reorder a main-line step
      POST
    • Duplicate a step
      POST
    • Add a router branch
      POST
    • Update a router branch
      PATCH
    • Delete a router branch
      DELETE
    • Duplicate a router branch
      POST
    • Test one step
      POST
    • Test a whole workflow
      POST
    • Deploy a workflow
      POST
    • Undeploy a workflow
      POST
    • List the runs of a workflow
      GET
    • Get one run
      GET
    • Retry a failed run
      POST
    • Call the workflow tools over MCP
      POST
  • Schemas
    • Sample Schemas
    • Schemas
    • Outgoing webhooks
    • Analysis
    • Pet
    • Category
    • Tag
    • ValidationError
    • NotFoundError
    • InternalServerError
    • NotImplementedError
    • CreateUserFieldHistoryResponse
    • CreateUserFieldHistorySuccessResponse
    • UserFieldHistoryItem
    • GetUserFieldHistoriesResponse
    • UserFieldHistoriesValidationError
    • UserFieldHistoriesMetaWithValidation
    • UserFieldHistoriesMetaWithPagination
    • GetUserFieldHistoriesSuccessResponse
    • CreateUserFieldResponse
    • CreateUserFieldSuccessResponse
    • DeleteUserFieldResponse
    • DeleteUserFieldSuccessResponse
    • UserFieldCreator
    • GetUserFieldResponse
    • GetUserFieldSuccessResponse
    • ValidationErrorItem
    • GetUserFieldsMetaResponse
    • CreatorInfo
    • UserFieldResponse
    • GetUserFieldsSuccessResponse
    • UpdateUserFieldResponse
    • UpdateUserFieldPayload
    • UpdateUserFieldSuccessResponse
    • MetaResponse
    • GetUserResponse
    • GetUserSuccessResponse
    • Purchased store item
    • ErrorResponse
    • New message posted to channel
    • UpdateAnalysisRequest
    • User visits server
    • AppendDrawingsRequest
    • User join server
    • CreateAnalysisResponse
    • GetAnalysisResponse
    • UpdateAnalysisResponse
    • AppendDrawingsResponse
    • AnalysisMetadata
    • Expiry
    • Levels
    • LevelEntry
    • Drawing
    • HorizontalLineDrawing
    • LineDrawing
    • RectangleDrawing
    • ParallelDrawing
    • FibonacciRetracementDrawing
    • Coordinate
    • DrawingStyle
    • AnalysisDetail
    • AnalysisSummary
    • CreateAnalysisRequest
    • ListAnalysesResponse
    • StandardApiError
    • StandardSuccessEnvelope
    • PurchasedStoreItemEvent
    • ChannelMessagePostedEvent
    • UserVisitedCommunityEvent
    • UserJoinedCommunityEvent
  1. Workflow Builder

List step types and trigger types

GET
/v1/workflow-builder/data-workflows/catalog
GET /catalog needs workflowBuilder.

What this endpoint does#

Returns every step type and trigger type a workflow can contain, each with a JSON Schema for its options, whether running it reaches outside the workflow, and whether it is available at all. It also returns platformActionFields, the community's own field keys for platform-action steps, and permissions, the one permission this API takes, so a caller never has to guess a field name or a capability.
It is the first call in any build: it tells a caller which fields a step needs and which field keys this community accepts before the caller writes a node. It writes nothing and reads no member data; platformActionFields is the community's field catalog, not its values.

Quick start#

The catalog takes no path parameter, no query string and no body.

Authentication and permission#

Send a community API key as Authorization: Bearer <API_KEY>. The community is taken from the key; no request field selects it, and no key can see another community's catalog because a catalog is not community-specific.
The call needs workflowBuilder and nothing else.
FailureMeaningRecovery
Missing or invalid keyRejected before any route handler runsSend a valid community API key.
Admin session tokenSessions are refused: this API cannot use an admin loginCreate a key with the workflowBuilder permission.
Key without workflowBuilderThe key authenticated but may not use the builderAdd the permission, or use another key.
Key with dataWorkflows onlyThat permission keeps its event ingest status meaning and grants nothing hereGrant workflowBuilder.

Complete examples#

nodeTypes lists the step types, all eight of them with available: true, including code. platformActionFields lists the field keys a platform-action step may name, split by whether the step reads or writes. permissions is the single permission this API takes.
{
  "data": {
    "nodeTypes": [
      {
        "type": "http",
        "label": "HTTP request",
        "sideEffects": true,
        "hasBranches": false,
        "available": true,
        "schema": { "type": "object", "properties": { "type": { "const": "http" } }, "required": ["type", "name", "options"] }
      },
      {
        "type": "code",
        "label": "Code",
        "sideEffects": true,
        "hasBranches": false,
        "available": true,
        "schema": { "type": "object", "properties": { "type": { "const": "code" }, "options": { "type": "object" } }, "required": ["type", "name", "options"] }
      }
    ],
    "triggerTypes": [
      { "type": "webhook", "label": "Webhook", "schema": { "type": "object", "properties": { "type": { "const": "webhook" }, "options": { "type": "object" } }, "required": ["type"] } },
      { "type": "visit-community", "label": "User visits the community", "schema": { "type": "object", "properties": { "type": { "const": "visit-community" }, "options": { "type": "null" } }, "required": ["type"] } }
    ],
    "referenceSyntax": {
      "dynamicValue": {
        "description": "A field can read an earlier step output. Use a template string or a reference object.",
        "template": "{{nodeId.field}}",
        "object": { "nodeId": "24 hex characters", "field": "path" }
      },
      "triggerOutput": "The trigger step id is returned as trigger._id on GET /{workflowId}."
    },
    "redaction": {
      "sentinel": "__REDACTED__",
      "description": "Credential values are returned as [\"__REDACTED__\"] and listed in redactedPaths. Send the sentinel back unchanged to keep the stored value."
    },
    "platformActionFields": {
      "note": "Leave fields[].label empty and the API fills the canvas label, or use the label shown here. The label keys the node output, and downstream references must use that label.",
      "get": [
        { "key": "total_xp", "label": "Total XP", "source": "builtin" },
        { "key": "total_coins", "label": "Total Coins", "source": "builtin" },
        { "key": "xp", "label": "XP", "source": "builtin" },
        { "key": "coin", "label": "Coins", "source": "builtin" },
        { "key": "tier", "label": "tier", "source": "custom", "fieldType": "string" }
      ],
      "post": [
        { "key": "xp", "label": "XP", "source": "builtin" },
        { "key": "coin", "label": "Coins", "source": "builtin" },
        { "key": "tier", "label": "tier", "source": "custom", "fieldType": "string" }
      ]
    },
    "limits": { "maxListLimit": 100, "maxNodesPerImport": 200 },
    "permissions": ["workflowBuilder"],
    "codeNodes": {
      "writable": true,
      "description": "Code steps support create, update, duplicate, import and testing."
    }
  }
}
Eight step types are returned: http, platform-action, math, send-email, send-emails, code, router, users-bulk-update. Seven trigger types are returned: time, webhook, visit-community, join-community, custom-field-update, conditions-trigger, event-ingest.
platformActionFields.note states the label rule in the API's own words. platformActionFields.get names the keys a read action may use, and platformActionFields.post names the keys a write action may use. Each entry carries the key to store, the label the platform fills in when the write omits one, and whether the field is builtin or custom. A read action accepts total_xp, total_coins, xp and coin; a write action accepts xp and coin; both accept the community's custom fields, so a community-defined field is as usable as xp.

Success and readback#

HTTP 200 with a data object. Read the schema for the step type you are about to add and the platformActionFields entry for the field you mean to use, then build the node body from them. Nothing is persisted, so there is no follow-up read to prove this call.
sideEffects: true means running the step writes, sends mail, pays, or calls an outside system. hasBranches: true is true only for router, whose branches hold other steps.

Errors and recovery#

Status and codeWhenRecovery
401 AUTHENTICATION_REQUIREDNo key, or a key that no longer resolvesSend a valid key.
401 API_KEY_REQUIREDA valid admin session was used instead of a keyUse a community API key.
403 API_KEY_PERMISSION_DENIEDThe key lacks workflowBuilderGrant the permission.
404 COMMUNITY_NOT_FOUNDThe key's community no longer existsUse a key of an existing community.
429 RATE_LIMITEDThe community's API rate limit was reachedWait for the window to reset, then retry.
500 INTERNAL_ERRORUnexpected failureRetry with bounded backoff; stop if it persists.
The catalog accepts no input, so it has no validation failure of its own.

Retry safety#

An exact retry is safe and cheap: nothing is created. The answer is derived from the deployed step definitions, so a retry that straddles a release can return a different catalog. Read available and permissions on every call rather than caching a schema for a long session.

Gotchas#

Required step options are enforced when a step is written, not by this call. A required list tells you which fields the write refuses to guess.
A platform-action field key should come from platformActionFields for the action you are using: a read action uses the get list, a write action the post list. A key outside the list is stored as sent and POST /{workflowId}/validate reports UNKNOWN_USER_FIELD as a warning, but the step reads or writes nothing, so take the key from this payload.
The label in the catalog is the one the platform fills in when a write omits a label. A label you send is kept as sent, and a read step's result is keyed by it, so the label decides how later steps must reference the step. Send the catalog's label unless you have a reason to choose another.
A community can rename its XP and coin units, so Total XP here may be Total Points there: take the label from this payload, not from an example.
platformActionFields is per community, because custom fields are. Two communities can return different lists for the same API version.
The trigger's output shape is not part of this payload. rai_get_node_schema takes a workflowId and returns triggerOutput for it; otherwise read a recorded run to see which payload paths a step can reference.
available is a capability gate for the write path. All eight step types are available: true, Code included; unavailableReason appears only when a release turns a type off.
options is null for the trigger types that take no options.
The catalog does not list a community's leaderboards, roles or email templates. Those identifiers come from the platform's other endpoints, and a leaderboard identifier must belong to the key's own community. Custom fields are the exception: they appear in platformActionFields with source: "custom".
limits.maxListLimit is the page-size ceiling for the list endpoints. A larger limit is refused rather than clamped.
The catalog says nothing about validation: it lists the shape a write accepts, not what POST /{workflowId}/validate will warn about. A step can match every schema here and still be worth a warning, and a write that matches no schema can be the one that warns.
The catalog describes authored fields only. Server-owned fields such as identifiers, ordering and run state are never accepted from a caller.

Next steps#

1.
POST / creates a workflow with its trigger.
2.
POST /{workflowId}/nodes adds a step, using this catalog's schema for its options.
3.
POST /{workflowId}/validate for the advisory check on the stored workflow before a test or a deploy.

Request

Header Params

Responses

🟢200200 Success
application/json
The step-type and trigger-type catalog.
Bodyapplication/json

🟠401401 AUTHENTICATION_REQUIRED / API_KEY_REQUIRED
🟠403403 API_KEY_PERMISSION_DENIED
🟠404404 COMMUNITY_NOT_FOUND
🟠429429 RATE_LIMITED
🔴500500 INTERNAL_ERROR
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://api.returning.ai/v1/workflow-builder/data-workflows/catalog' \
--header 'Authorization: Bearer <API_KEY>'
Response Response Example
200 - 200 Success
{
  "data": {
    "nodeTypes": [
      {
        "type": "http",
        "label": "HTTP request",
        "sideEffects": true,
        "hasBranches": false,
        "available": true,
        "schema": {
          "type": "object",
          "required": [
            "type",
            "name",
            "options"
          ]
        }
      }
    ],
    "triggerTypes": [
      {
        "type": "webhook",
        "label": "Webhook",
        "schema": {
          "type": "object",
          "required": [
            "type"
          ]
        }
      }
    ],
    "referenceSyntax": {
      "dynamicValue": {
        "template": "{{nodeId.field}}"
      },
      "triggerOutput": "The trigger node id is returned as trigger._id."
    },
    "redaction": {
      "sentinel": "__REDACTED__"
    },
    "platformActionFields": {
      "note": "Leave fields[].label empty and the API fills the canvas label, or use the label shown here. The label keys the node output, and downstream references must use that label.",
      "get": [
        {
          "key": "total_xp",
          "label": "Total XP",
          "source": "builtin"
        },
        {
          "key": "total_coins",
          "label": "Total Coins",
          "source": "builtin"
        },
        {
          "key": "xp",
          "label": "XP",
          "source": "builtin"
        },
        {
          "key": "coin",
          "label": "Coins",
          "source": "builtin"
        }
      ],
      "post": [
        {
          "key": "xp",
          "label": "XP",
          "source": "builtin"
        },
        {
          "key": "coin",
          "label": "Coins",
          "source": "builtin"
        }
      ]
    },
    "limits": {
      "maxListLimit": 100,
      "maxNodesPerImport": 200
    },
    "permissions": [
      "workflowBuilder"
    ],
    "codeNodes": {
      "writable": true,
      "description": "Code steps support create, update, duplicate, import and testing."
    }
  }
}
Modified at 2026-10-28 04:44:57
Previous
Reward members from your own system with a webhook workflow
Next
List workflows
Built with