curl --request POST \
--url https://flowker.sandbox.lerian.net/v1/xsd-schemas \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file='@example-file' \
--form name=pain-001 \
--form version=v1.0.0 \
--form 'imports=<string>'import requests
url = "https://flowker.sandbox.lerian.net/v1/xsd-schemas"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"name": "pain-001",
"version": "v1.0.0",
"imports": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('name', 'pain-001');
form.append('version', 'v1.0.0');
form.append('imports', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://flowker.sandbox.lerian.net/v1/xsd-schemas', 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/xsd-schemas",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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/xsd-schemas"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/xsd-schemas")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowker.sandbox.lerian.net/v1/xsd-schemas")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"byteSize": 4096,
"contentHash": "sha256:9f2c8b1a4d7e0f3c6b5a8d2e1f4c7b0a3d6e9f2c5b8a1d4e7f0c3b6a9d2e5f8c",
"createdAt": "2026-01-15T10:30:00Z",
"createdBy": "user@example.com",
"id": "018f3e2a-1c4d-7b9e-a1b2-c3d4e5f6a7b8",
"imports": [
"urn:iso:std:iso:20022:tech:xsd:head.001.001.02"
],
"name": "pain.001",
"targetNamespace": "urn:iso:std:iso:20022:tech:xsd:pain.001.001.09",
"version": "1"
}{
"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"
}Upload an XSD Schema
Use this endpoint to upload an XSD schema file as multipart/form-data. The file must not exceed 1 MiB.
curl --request POST \
--url https://flowker.sandbox.lerian.net/v1/xsd-schemas \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form file='@example-file' \
--form name=pain-001 \
--form version=v1.0.0 \
--form 'imports=<string>'import requests
url = "https://flowker.sandbox.lerian.net/v1/xsd-schemas"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"name": "pain-001",
"version": "v1.0.0",
"imports": "<string>"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('name', 'pain-001');
form.append('version', 'v1.0.0');
form.append('imports', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://flowker.sandbox.lerian.net/v1/xsd-schemas', 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/xsd-schemas",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$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/xsd-schemas"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/xsd-schemas")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://flowker.sandbox.lerian.net/v1/xsd-schemas")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\npain-001\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\nv1.0.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"imports\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"byteSize": 4096,
"contentHash": "sha256:9f2c8b1a4d7e0f3c6b5a8d2e1f4c7b0a3d6e9f2c5b8a1d4e7f0c3b6a9d2e5f8c",
"createdAt": "2026-01-15T10:30:00Z",
"createdBy": "user@example.com",
"id": "018f3e2a-1c4d-7b9e-a1b2-c3d4e5f6a7b8",
"imports": [
"urn:iso:std:iso:20022:tech:xsd:head.001.001.02"
],
"name": "pain.001",
"targetNamespace": "urn:iso:std:iso:20022:tech:xsd:pain.001.001.09",
"version": "1"
}{
"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"
}Authorizations
JWT bearer token issued by the identity provider. Send it in the Authorization header as Bearer <token>.
Headers
Bearer token forwarded to the XSD validator sidecar for import resolution.
Body
Response
Indicates that the resource was successfully created and the operation was completed as expected.
Size of the schema content in bytes.
4096
Hash of the schema content for integrity verification.
"sha256:9f2c8b1a4d7e0f3c6b5a8d2e1f4c7b0a3d6e9f2c5b8a1d4e7f0c3b6a9d2e5f8c"
Creation timestamp (RFC 3339).
"2026-01-15T10:30:00Z"
Identity that uploaded the schema.
"user@example.com"
XSD schema identifier.
"018f3e2a-1c4d-7b9e-a1b2-c3d4e5f6a7b8"
Namespaces imported/included by this schema.
[
"urn:iso:std:iso:20022:tech:xsd:head.001.001.02"
]
Schema name.
"pain.001"
XSD targetNamespace declared by the schema.
"urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"
Schema version.
"1"
Was this page helpful?

