curl --request POST \
--url https://core.us.api.frayme.io/cases \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"workflowId": "wf_transactions_v2",
"workflowVersion": 3,
"type": "Transaction",
"payload": {
"documentNumber": "DOC-001-BR",
"documentType": "cpf",
"countryCode": "BR"
},
"metadata": {
"source": "checkout-service"
},
"subject": {
"displayName": "Maria Silva",
"transaction": {
"amount": 1250,
"currency": "BRL",
"direction": "outbound",
"type": "pix",
"externalTransactionId": "txn-9f8e7d6c",
"parties": [
{
"role": "sender",
"displayName": "Maria Silva",
"identifiers": [
{
"type": "cpf",
"value": "52998224725",
"country": "BR"
},
{
"type": "external_customer_id",
"value": "cust-00481"
}
]
},
{
"role": "receiver",
"displayName": "Acme Pagamentos Ltda",
"identifiers": [
{
"type": "pix_key",
"value": "a1b2-evp-key"
}
]
}
]
}
},
"idempotencyKey": "order-9f8e7d6c",
"eventTimestamp": "2026-05-19T14:32:00Z"
}
'import requests
url = "https://core.us.api.frayme.io/cases"
payload = {
"workflowId": "wf_transactions_v2",
"workflowVersion": 3,
"type": "Transaction",
"payload": {
"documentNumber": "DOC-001-BR",
"documentType": "cpf",
"countryCode": "BR"
},
"metadata": { "source": "checkout-service" },
"subject": {
"displayName": "Maria Silva",
"transaction": {
"amount": 1250,
"currency": "BRL",
"direction": "outbound",
"type": "pix",
"externalTransactionId": "txn-9f8e7d6c",
"parties": [
{
"role": "sender",
"displayName": "Maria Silva",
"identifiers": [
{
"type": "cpf",
"value": "52998224725",
"country": "BR"
},
{
"type": "external_customer_id",
"value": "cust-00481"
}
]
},
{
"role": "receiver",
"displayName": "Acme Pagamentos Ltda",
"identifiers": [
{
"type": "pix_key",
"value": "a1b2-evp-key"
}
]
}
]
}
},
"idempotencyKey": "order-9f8e7d6c",
"eventTimestamp": "2026-05-19T14:32:00Z"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workflowId: 'wf_transactions_v2',
workflowVersion: 3,
type: 'Transaction',
payload: {documentNumber: 'DOC-001-BR', documentType: 'cpf', countryCode: 'BR'},
metadata: {source: 'checkout-service'},
subject: {
displayName: 'Maria Silva',
transaction: {
amount: 1250,
currency: 'BRL',
direction: 'outbound',
type: 'pix',
externalTransactionId: 'txn-9f8e7d6c',
parties: [
{
role: 'sender',
displayName: 'Maria Silva',
identifiers: [
{type: 'cpf', value: '52998224725', country: 'BR'},
{type: 'external_customer_id', value: 'cust-00481'}
]
},
{
role: 'receiver',
displayName: 'Acme Pagamentos Ltda',
identifiers: [{type: 'pix_key', value: 'a1b2-evp-key'}]
}
]
}
},
idempotencyKey: 'order-9f8e7d6c',
eventTimestamp: '2026-05-19T14:32:00Z'
})
};
fetch('https://core.us.api.frayme.io/cases', 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://core.us.api.frayme.io/cases",
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([
'workflowId' => 'wf_transactions_v2',
'workflowVersion' => 3,
'type' => 'Transaction',
'payload' => [
'documentNumber' => 'DOC-001-BR',
'documentType' => 'cpf',
'countryCode' => 'BR'
],
'metadata' => [
'source' => 'checkout-service'
],
'subject' => [
'displayName' => 'Maria Silva',
'transaction' => [
'amount' => 1250,
'currency' => 'BRL',
'direction' => 'outbound',
'type' => 'pix',
'externalTransactionId' => 'txn-9f8e7d6c',
'parties' => [
[
'role' => 'sender',
'displayName' => 'Maria Silva',
'identifiers' => [
[
'type' => 'cpf',
'value' => '52998224725',
'country' => 'BR'
],
[
'type' => 'external_customer_id',
'value' => 'cust-00481'
]
]
],
[
'role' => 'receiver',
'displayName' => 'Acme Pagamentos Ltda',
'identifiers' => [
[
'type' => 'pix_key',
'value' => 'a1b2-evp-key'
]
]
]
]
]
],
'idempotencyKey' => 'order-9f8e7d6c',
'eventTimestamp' => '2026-05-19T14:32:00Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://core.us.api.frayme.io/cases"
payload := strings.NewReader("{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://core.us.api.frayme.io/cases")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.us.api.frayme.io/cases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"caseId": "<string>",
"requestId": "<string>",
"status": "<string>"
}{
"caseId": "case_01HABCXYZ",
"requestId": "req_01HABCXYZ",
"status": "received"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Submit a case
Submit a new case. Requires the cases:write scope.
The case is routed through the tenant-defined workflow you target and
produces a decision (approved, declined, or in_review).
If idempotencyKey is supplied and a case with the same key already
exists, the existing case is returned with 200 OK instead of
201 Created.
curl --request POST \
--url https://core.us.api.frayme.io/cases \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"workflowId": "wf_transactions_v2",
"workflowVersion": 3,
"type": "Transaction",
"payload": {
"documentNumber": "DOC-001-BR",
"documentType": "cpf",
"countryCode": "BR"
},
"metadata": {
"source": "checkout-service"
},
"subject": {
"displayName": "Maria Silva",
"transaction": {
"amount": 1250,
"currency": "BRL",
"direction": "outbound",
"type": "pix",
"externalTransactionId": "txn-9f8e7d6c",
"parties": [
{
"role": "sender",
"displayName": "Maria Silva",
"identifiers": [
{
"type": "cpf",
"value": "52998224725",
"country": "BR"
},
{
"type": "external_customer_id",
"value": "cust-00481"
}
]
},
{
"role": "receiver",
"displayName": "Acme Pagamentos Ltda",
"identifiers": [
{
"type": "pix_key",
"value": "a1b2-evp-key"
}
]
}
]
}
},
"idempotencyKey": "order-9f8e7d6c",
"eventTimestamp": "2026-05-19T14:32:00Z"
}
'import requests
url = "https://core.us.api.frayme.io/cases"
payload = {
"workflowId": "wf_transactions_v2",
"workflowVersion": 3,
"type": "Transaction",
"payload": {
"documentNumber": "DOC-001-BR",
"documentType": "cpf",
"countryCode": "BR"
},
"metadata": { "source": "checkout-service" },
"subject": {
"displayName": "Maria Silva",
"transaction": {
"amount": 1250,
"currency": "BRL",
"direction": "outbound",
"type": "pix",
"externalTransactionId": "txn-9f8e7d6c",
"parties": [
{
"role": "sender",
"displayName": "Maria Silva",
"identifiers": [
{
"type": "cpf",
"value": "52998224725",
"country": "BR"
},
{
"type": "external_customer_id",
"value": "cust-00481"
}
]
},
{
"role": "receiver",
"displayName": "Acme Pagamentos Ltda",
"identifiers": [
{
"type": "pix_key",
"value": "a1b2-evp-key"
}
]
}
]
}
},
"idempotencyKey": "order-9f8e7d6c",
"eventTimestamp": "2026-05-19T14:32:00Z"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
workflowId: 'wf_transactions_v2',
workflowVersion: 3,
type: 'Transaction',
payload: {documentNumber: 'DOC-001-BR', documentType: 'cpf', countryCode: 'BR'},
metadata: {source: 'checkout-service'},
subject: {
displayName: 'Maria Silva',
transaction: {
amount: 1250,
currency: 'BRL',
direction: 'outbound',
type: 'pix',
externalTransactionId: 'txn-9f8e7d6c',
parties: [
{
role: 'sender',
displayName: 'Maria Silva',
identifiers: [
{type: 'cpf', value: '52998224725', country: 'BR'},
{type: 'external_customer_id', value: 'cust-00481'}
]
},
{
role: 'receiver',
displayName: 'Acme Pagamentos Ltda',
identifiers: [{type: 'pix_key', value: 'a1b2-evp-key'}]
}
]
}
},
idempotencyKey: 'order-9f8e7d6c',
eventTimestamp: '2026-05-19T14:32:00Z'
})
};
fetch('https://core.us.api.frayme.io/cases', 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://core.us.api.frayme.io/cases",
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([
'workflowId' => 'wf_transactions_v2',
'workflowVersion' => 3,
'type' => 'Transaction',
'payload' => [
'documentNumber' => 'DOC-001-BR',
'documentType' => 'cpf',
'countryCode' => 'BR'
],
'metadata' => [
'source' => 'checkout-service'
],
'subject' => [
'displayName' => 'Maria Silva',
'transaction' => [
'amount' => 1250,
'currency' => 'BRL',
'direction' => 'outbound',
'type' => 'pix',
'externalTransactionId' => 'txn-9f8e7d6c',
'parties' => [
[
'role' => 'sender',
'displayName' => 'Maria Silva',
'identifiers' => [
[
'type' => 'cpf',
'value' => '52998224725',
'country' => 'BR'
],
[
'type' => 'external_customer_id',
'value' => 'cust-00481'
]
]
],
[
'role' => 'receiver',
'displayName' => 'Acme Pagamentos Ltda',
'identifiers' => [
[
'type' => 'pix_key',
'value' => 'a1b2-evp-key'
]
]
]
]
]
],
'idempotencyKey' => 'order-9f8e7d6c',
'eventTimestamp' => '2026-05-19T14:32:00Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://core.us.api.frayme.io/cases"
payload := strings.NewReader("{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://core.us.api.frayme.io/cases")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.us.api.frayme.io/cases")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"workflowId\": \"wf_transactions_v2\",\n \"workflowVersion\": 3,\n \"type\": \"Transaction\",\n \"payload\": {\n \"documentNumber\": \"DOC-001-BR\",\n \"documentType\": \"cpf\",\n \"countryCode\": \"BR\"\n },\n \"metadata\": {\n \"source\": \"checkout-service\"\n },\n \"subject\": {\n \"displayName\": \"Maria Silva\",\n \"transaction\": {\n \"amount\": 1250,\n \"currency\": \"BRL\",\n \"direction\": \"outbound\",\n \"type\": \"pix\",\n \"externalTransactionId\": \"txn-9f8e7d6c\",\n \"parties\": [\n {\n \"role\": \"sender\",\n \"displayName\": \"Maria Silva\",\n \"identifiers\": [\n {\n \"type\": \"cpf\",\n \"value\": \"52998224725\",\n \"country\": \"BR\"\n },\n {\n \"type\": \"external_customer_id\",\n \"value\": \"cust-00481\"\n }\n ]\n },\n {\n \"role\": \"receiver\",\n \"displayName\": \"Acme Pagamentos Ltda\",\n \"identifiers\": [\n {\n \"type\": \"pix_key\",\n \"value\": \"a1b2-evp-key\"\n }\n ]\n }\n ]\n }\n },\n \"idempotencyKey\": \"order-9f8e7d6c\",\n \"eventTimestamp\": \"2026-05-19T14:32:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"caseId": "<string>",
"requestId": "<string>",
"status": "<string>"
}{
"caseId": "case_01HABCXYZ",
"requestId": "req_01HABCXYZ",
"status": "received"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
A tenant-scoped API key provisioned by Frayme.
Body
The workflow to route this case through. Provisioned for you by Frayme.
The case type. Determines which subject sub-struct is required.
KYC, KYB, Transaction Validated against the workflow's input schema. Fields and types are dictated by the workflow you target; a payload that does not match the schema returns 400.
Typed business attributes used for entity resolution and review. Set exactly one sub-struct, and it must match type: transaction for Transaction, person for KYC, business for KYB.
Show child attributes
Show child attributes
Pin the version your client expects. If omitted, the workflow's current published version is used.
Free-form audit fields; surfaced in the portal and event log.
If provided and a case with the same key already exists, the existing case is returned with 200 OK instead of 201 Created.
ISO-8601 timestamp of the originating business event.