Paso actual de un documento
curl --request GET \
--url https://api.prod.payana.cloud/public/api/v1/workflow-steps/current \
--header 'api-key: <api-key>'import requests
url = "https://api.prod.payana.cloud/public/api/v1/workflow-steps/current"
headers = {"api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'api-key': '<api-key>'}};
fetch('https://api.prod.payana.cloud/public/api/v1/workflow-steps/current', 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://api.prod.payana.cloud/public/api/v1/workflow-steps/current",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.prod.payana.cloud/public/api/v1/workflow-steps/current"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.prod.payana.cloud/public/api/v1/workflow-steps/current")
.header("api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prod.payana.cloud/public/api/v1/workflow-steps/current")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"step": {
"reference": "550e8400-e29b-41d4-a716-446655440042",
"status": "pending",
"actionable": true,
"created_at": "2026-08-01T10:00:00.000Z",
"entity": {
"type": "document",
"reference": "b4d1689c-e729-478b-a15b-339ad050192f",
"document_number": "FE-1234",
"concept": "Servicios profesionales",
"amount_cents": "1234500",
"amount_currency": "COP",
"issue_date": "2026-07-01",
"expiration_date": "2026-07-31",
"third_party": [
{
"type": "beneficiary",
"name": "ACME S.A.S.",
"reference": "a1b2c3d4-0000-4000-8000-000000000001"
}
]
},
"assignees": [
{
"email": "[email protected]",
"name": "Ana Gómez",
"acted": false
}
],
"action": "document.approval",
"decision": {
"kind": "approval",
"multiple": false,
"field_name": null,
"options": [
{
"value": "approve",
"label": "Aprobar"
},
{
"value": "reject",
"label": "Rechazar"
}
],
"options_complete": true
},
"recommendations": [
{
"value": "approve",
"confidence_level": "high",
"rationale": "El monto y el proveedor coinciden con la orden de compra."
}
]
}
}Flujos de documentos
Paso actual de un documento
Consulta en qué paso de su flujo está parado un documento y qué decisión admite.
GET
/
workflow-steps
/
current
Paso actual de un documento
curl --request GET \
--url https://api.prod.payana.cloud/public/api/v1/workflow-steps/current \
--header 'api-key: <api-key>'import requests
url = "https://api.prod.payana.cloud/public/api/v1/workflow-steps/current"
headers = {"api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'api-key': '<api-key>'}};
fetch('https://api.prod.payana.cloud/public/api/v1/workflow-steps/current', 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://api.prod.payana.cloud/public/api/v1/workflow-steps/current",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.prod.payana.cloud/public/api/v1/workflow-steps/current"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.prod.payana.cloud/public/api/v1/workflow-steps/current")
.header("api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.prod.payana.cloud/public/api/v1/workflow-steps/current")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"step": {
"reference": "550e8400-e29b-41d4-a716-446655440042",
"status": "pending",
"actionable": true,
"created_at": "2026-08-01T10:00:00.000Z",
"entity": {
"type": "document",
"reference": "b4d1689c-e729-478b-a15b-339ad050192f",
"document_number": "FE-1234",
"concept": "Servicios profesionales",
"amount_cents": "1234500",
"amount_currency": "COP",
"issue_date": "2026-07-01",
"expiration_date": "2026-07-31",
"third_party": [
{
"type": "beneficiary",
"name": "ACME S.A.S.",
"reference": "a1b2c3d4-0000-4000-8000-000000000001"
}
]
},
"assignees": [
{
"email": "[email protected]",
"name": "Ana Gómez",
"acted": false
}
],
"action": "document.approval",
"decision": {
"kind": "approval",
"multiple": false,
"field_name": null,
"options": [
{
"value": "approve",
"label": "Aprobar"
},
{
"value": "reject",
"label": "Rechazar"
}
],
"options_complete": true
},
"recommendations": [
{
"value": "approve",
"confidence_level": "high",
"rationale": "El monto y el proveedor coinciden con la orden de compra."
}
]
}
}Un documento avanza por el flujo que configuró tu compañía: aprobarlo, clasificarlo, etiquetarlo. Este endpoint te dice en cuál de esos pasos está parado ahora y qué puedes responder, sin que necesites conocer cómo está armado el flujo.
Lo que devuelve en
options es lo que aceptas enviar de vuelta. El value de cada opción es opaco: no intentes interpretarlo, devuélvelo tal cual en Resolver un paso.Las tres decisiones
El selector de ejemplos de la respuesta muestra las tres, más el caso en que no te corresponde decidir. En qué se diferencian:kind | multiple | Qué hay en options | |
|---|---|---|---|
| Aprobación | approval | false | Dos fijas: approve y reject |
| Clasificación | classification | false | Los valores activos del campo que nombra field_name |
| Etiquetado | tagging | true | Etiquetas de tu compañía |
En etiquetado revisa
options_complete. Cuando viene en false, el paso no restringe a un subconjunto: la lista es una muestra del catálogo y cualquier etiqueta de tu compañía es válida, aunque no aparezca ahí. Si tu interfaz solo ofrece lo que llegó en options, estarás recortando opciones válidas.Cuándo no hay nada que responder
Un
204 significa que el documento no tiene ningún paso pendiente: o su flujo terminó, o nunca arrancó uno.Un 200 con actionable: false y decision: null es distinto: hay un paso pendiente, pero no te corresponde. Ocurre cuando lo está resolviendo un agente, o cuando su acción no se decide desde afuera — la causación, por ejemplo, se resuelve registrando el documento en tu ERP.Quién puede resolverlo
El campoassignees lista a los miembros de tu compañía habilitados para ese paso, e indica si alguno ya decidió. Al completar debes nombrar a uno de ellos: consulta Resolver un paso.
Cuando el flujo tiene un agente configurado,
recommendations trae su sugerencia y el porqué. Puedes usarla para preseleccionar una opción en tu interfaz, o para decidir automáticamente cuando la confianza es alta.Resolver un paso
Envía la decisión que este endpoint te ofreció.
Flujos
Cómo se configuran los pasos por los que pasa un documento.