curl --request POST \
--url https://flowker.sandbox.lerian.net/v1/workflows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Payment Notification Flow",
"description": "Receives a webhook trigger and logs the payment event.",
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"name": "Webhook Trigger",
"position": {
"x": 0,
"y": 0
},
"data": {
"triggerType": "webhook",
"path": "payments/received",
"method": "POST",
"input_contract": "open",
"format": "json"
}
},
{
"id": "log-event",
"type": "action",
"name": "Log Payment Event",
"position": {
"x": 200,
"y": 0
},
"data": {
"action": "log"
}
}
],
"edges": [
{
"id": "e1",
"source": "trigger-1",
"target": "log-event"
}
],
"metadata": {
"team": "payments",
"environment": "sandbox"
}
}
'import requests
url = "https://flowker.sandbox.lerian.net/v1/workflows"
payload = {
"name": "Payment Notification Flow",
"description": "Receives a webhook trigger and logs the payment event.",
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"name": "Webhook Trigger",
"position": {
"x": 0,
"y": 0
},
"data": {
"triggerType": "webhook",
"path": "payments/received",
"method": "POST",
"input_contract": "open",
"format": "json"
}
},
{
"id": "log-event",
"type": "action",
"name": "Log Payment Event",
"position": {
"x": 200,
"y": 0
},
"data": { "action": "log" }
}
],
"edges": [
{
"id": "e1",
"source": "trigger-1",
"target": "log-event"
}
],
"metadata": {
"team": "payments",
"environment": "sandbox"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Payment Notification Flow',
description: 'Receives a webhook trigger and logs the payment event.',
nodes: [
{
id: 'trigger-1',
type: 'trigger',
name: 'Webhook Trigger',
position: {x: 0, y: 0},
data: {
triggerType: 'webhook',
path: 'payments/received',
method: 'POST',
input_contract: 'open',
format: 'json'
}
},
{
id: 'log-event',
type: 'action',
name: 'Log Payment Event',
position: {x: 200, y: 0},
data: {action: 'log'}
}
],
edges: [{id: 'e1', source: 'trigger-1', target: 'log-event'}],
metadata: {team: 'payments', environment: 'sandbox'}
})
};
fetch('https://flowker.sandbox.lerian.net/v1/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://flowker.sandbox.lerian.net/v1/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Payment Notification Flow',
'description' => 'Receives a webhook trigger and logs the payment event.',
'nodes' => [
[
'id' => 'trigger-1',
'type' => 'trigger',
'name' => 'Webhook Trigger',
'position' => [
'x' => 0,
'y' => 0
],
'data' => [
'triggerType' => 'webhook',
'path' => 'payments/received',
'method' => 'POST',
'input_contract' => 'open',
'format' => 'json'
]
],
[
'id' => 'log-event',
'type' => 'action',
'name' => 'Log Payment Event',
'position' => [
'x' => 200,
'y' => 0
],
'data' => [
'action' => 'log'
]
]
],
'edges' => [
[
'id' => 'e1',
'source' => 'trigger-1',
'target' => 'log-event'
]
],
'metadata' => [
'team' => 'payments',
'environment' => 'sandbox'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://flowker.sandbox.lerian.net/v1/workflows"
payload := strings.NewReader("{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://flowker.sandbox.lerian.net/v1/workflows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowker.sandbox.lerian.net/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2026-03-17T14:30:00Z",
"status": "draft",
"version": "1.0.0",
"workflowId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}Crear un workflow
Utiliza este endpoint para crear una nueva definición de workflow. Los nuevos workflows se crean con estado draft.
curl --request POST \
--url https://flowker.sandbox.lerian.net/v1/workflows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Payment Notification Flow",
"description": "Receives a webhook trigger and logs the payment event.",
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"name": "Webhook Trigger",
"position": {
"x": 0,
"y": 0
},
"data": {
"triggerType": "webhook",
"path": "payments/received",
"method": "POST",
"input_contract": "open",
"format": "json"
}
},
{
"id": "log-event",
"type": "action",
"name": "Log Payment Event",
"position": {
"x": 200,
"y": 0
},
"data": {
"action": "log"
}
}
],
"edges": [
{
"id": "e1",
"source": "trigger-1",
"target": "log-event"
}
],
"metadata": {
"team": "payments",
"environment": "sandbox"
}
}
'import requests
url = "https://flowker.sandbox.lerian.net/v1/workflows"
payload = {
"name": "Payment Notification Flow",
"description": "Receives a webhook trigger and logs the payment event.",
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"name": "Webhook Trigger",
"position": {
"x": 0,
"y": 0
},
"data": {
"triggerType": "webhook",
"path": "payments/received",
"method": "POST",
"input_contract": "open",
"format": "json"
}
},
{
"id": "log-event",
"type": "action",
"name": "Log Payment Event",
"position": {
"x": 200,
"y": 0
},
"data": { "action": "log" }
}
],
"edges": [
{
"id": "e1",
"source": "trigger-1",
"target": "log-event"
}
],
"metadata": {
"team": "payments",
"environment": "sandbox"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Payment Notification Flow',
description: 'Receives a webhook trigger and logs the payment event.',
nodes: [
{
id: 'trigger-1',
type: 'trigger',
name: 'Webhook Trigger',
position: {x: 0, y: 0},
data: {
triggerType: 'webhook',
path: 'payments/received',
method: 'POST',
input_contract: 'open',
format: 'json'
}
},
{
id: 'log-event',
type: 'action',
name: 'Log Payment Event',
position: {x: 200, y: 0},
data: {action: 'log'}
}
],
edges: [{id: 'e1', source: 'trigger-1', target: 'log-event'}],
metadata: {team: 'payments', environment: 'sandbox'}
})
};
fetch('https://flowker.sandbox.lerian.net/v1/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://flowker.sandbox.lerian.net/v1/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Payment Notification Flow',
'description' => 'Receives a webhook trigger and logs the payment event.',
'nodes' => [
[
'id' => 'trigger-1',
'type' => 'trigger',
'name' => 'Webhook Trigger',
'position' => [
'x' => 0,
'y' => 0
],
'data' => [
'triggerType' => 'webhook',
'path' => 'payments/received',
'method' => 'POST',
'input_contract' => 'open',
'format' => 'json'
]
],
[
'id' => 'log-event',
'type' => 'action',
'name' => 'Log Payment Event',
'position' => [
'x' => 200,
'y' => 0
],
'data' => [
'action' => 'log'
]
]
],
'edges' => [
[
'id' => 'e1',
'source' => 'trigger-1',
'target' => 'log-event'
]
],
'metadata' => [
'team' => 'payments',
'environment' => 'sandbox'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://flowker.sandbox.lerian.net/v1/workflows"
payload := strings.NewReader("{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://flowker.sandbox.lerian.net/v1/workflows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowker.sandbox.lerian.net/v1/workflows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Payment Notification Flow\",\n \"description\": \"Receives a webhook trigger and logs the payment event.\",\n \"nodes\": [\n {\n \"id\": \"trigger-1\",\n \"type\": \"trigger\",\n \"name\": \"Webhook Trigger\",\n \"position\": {\n \"x\": 0,\n \"y\": 0\n },\n \"data\": {\n \"triggerType\": \"webhook\",\n \"path\": \"payments/received\",\n \"method\": \"POST\",\n \"input_contract\": \"open\",\n \"format\": \"json\"\n }\n },\n {\n \"id\": \"log-event\",\n \"type\": \"action\",\n \"name\": \"Log Payment Event\",\n \"position\": {\n \"x\": 200,\n \"y\": 0\n },\n \"data\": {\n \"action\": \"log\"\n }\n }\n ],\n \"edges\": [\n {\n \"id\": \"e1\",\n \"source\": \"trigger-1\",\n \"target\": \"log-event\"\n }\n ],\n \"metadata\": {\n \"team\": \"payments\",\n \"environment\": \"sandbox\"\n }\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2026-03-17T14:30:00Z",
"status": "draft",
"version": "1.0.0",
"workflowId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}{
"code": "FLK-0001",
"detail": "name is a required field",
"errors": [
{
"location": "body.nodes",
"message": "expected array length >= 1",
"value": "<unknown>"
}
],
"instance": "/v1/workflows",
"status": 400,
"title": "Bad Request",
"type": "https://errors.lerian.studio/v1/FLK-0001"
}Autorizaciones
Token bearer JWT emitido por el provider de identidad. Envíalo en la cabecera Authorization como Bearer <token>.
Cuerpo
Cuerpo de la solicitud que contiene la definición del workflow.
Nombre único para el workflow.
1 - 100"Payment Notification Flow"
Descripción opcional legible por humanos del propósito del workflow.
500"Receives a webhook trigger and logs the payment event."
Conexiones entre nodes que definen el flujo de ejecución. Cada edge vincula un node de origen a un node de destino. La bifurcación se enruta por el sourceHandle del edge, que debe coincidir con el handle de resultado que produce su node condicional de origen.
200Show child attributes
Show child attributes
Pares clave-valor personalizados para etiquetar o categorizar el workflow.
Show child attributes
Show child attributes
{ "team": "payments", "environment": "sandbox" }
Los pasos que componen este workflow. Cada node es una unidad de trabajo: un trigger, una llamada a executor, una rama condicional o una acción.
100Show child attributes
Show child attributes
Respuesta
Indica que el recurso fue creado exitosamente y la operación se completó según lo esperado.
Marca de tiempo de cuando se creó el workflow.
"2026-03-17T14:30:00Z"
Estado inicial del workflow (siempre draft al crear).
"draft"
Versión de la definición del workflow.
"1.0.0"
Identificador único del workflow creado.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
¿Esta página le ayudó?

