curl --request POST \
--url https://api.cadanapay.com/v1/reimbursements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Client dinner",
"currency": "USD",
"destinationCurrency": "USD",
"entries": [
{
"description": "Dinner with client",
"amount": {
"currency": "USD",
"value": "1000.00"
},
"category": "Meals",
"date": "2025-11-28",
"fileIds": [
"f1e2d3c4-5678-9012-cdef-345678901234"
]
}
],
"userId": "a3b4c5d6-e7f8-9012-abcd-ef3456789012",
"personId": "c5d6e7f8-9012-3456-cdef-789012345678"
}
'import requests
url = "https://api.cadanapay.com/v1/reimbursements"
payload = {
"title": "Client dinner",
"currency": "USD",
"destinationCurrency": "USD",
"entries": [
{
"description": "Dinner with client",
"amount": {
"currency": "USD",
"value": "1000.00"
},
"category": "Meals",
"date": "2025-11-28",
"fileIds": ["f1e2d3c4-5678-9012-cdef-345678901234"]
}
],
"userId": "a3b4c5d6-e7f8-9012-abcd-ef3456789012",
"personId": "c5d6e7f8-9012-3456-cdef-789012345678"
}
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({
title: 'Client dinner',
currency: 'USD',
destinationCurrency: 'USD',
entries: [
{
description: 'Dinner with client',
amount: {currency: 'USD', value: '1000.00'},
category: 'Meals',
date: '2025-11-28',
fileIds: ['f1e2d3c4-5678-9012-cdef-345678901234']
}
],
userId: 'a3b4c5d6-e7f8-9012-abcd-ef3456789012',
personId: 'c5d6e7f8-9012-3456-cdef-789012345678'
})
};
fetch('https://api.cadanapay.com/v1/reimbursements', 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.cadanapay.com/v1/reimbursements",
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([
'title' => 'Client dinner',
'currency' => 'USD',
'destinationCurrency' => 'USD',
'entries' => [
[
'description' => 'Dinner with client',
'amount' => [
'currency' => 'USD',
'value' => '1000.00'
],
'category' => 'Meals',
'date' => '2025-11-28',
'fileIds' => [
'f1e2d3c4-5678-9012-cdef-345678901234'
]
]
],
'userId' => 'a3b4c5d6-e7f8-9012-abcd-ef3456789012',
'personId' => 'c5d6e7f8-9012-3456-cdef-789012345678'
]),
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://api.cadanapay.com/v1/reimbursements"
payload := strings.NewReader("{\n \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\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://api.cadanapay.com/v1/reimbursements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/reimbursements")
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 \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\n}"
response = http.request(request)
puts response.read_body{
"id": "d1e2f3a4-5678-9012-cdef-345678901234"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Create Reimbursement
Create a reimbursement for a worker in your business. The reimbursement is created in a pending status and must be reviewed (via POST /v1/reimbursements/{reimbursementId}/review) before it is paid out. Each entry may optionally reference one or more fileIds of previously uploaded files to attach proof (e.g. receipts).
curl --request POST \
--url https://api.cadanapay.com/v1/reimbursements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Client dinner",
"currency": "USD",
"destinationCurrency": "USD",
"entries": [
{
"description": "Dinner with client",
"amount": {
"currency": "USD",
"value": "1000.00"
},
"category": "Meals",
"date": "2025-11-28",
"fileIds": [
"f1e2d3c4-5678-9012-cdef-345678901234"
]
}
],
"userId": "a3b4c5d6-e7f8-9012-abcd-ef3456789012",
"personId": "c5d6e7f8-9012-3456-cdef-789012345678"
}
'import requests
url = "https://api.cadanapay.com/v1/reimbursements"
payload = {
"title": "Client dinner",
"currency": "USD",
"destinationCurrency": "USD",
"entries": [
{
"description": "Dinner with client",
"amount": {
"currency": "USD",
"value": "1000.00"
},
"category": "Meals",
"date": "2025-11-28",
"fileIds": ["f1e2d3c4-5678-9012-cdef-345678901234"]
}
],
"userId": "a3b4c5d6-e7f8-9012-abcd-ef3456789012",
"personId": "c5d6e7f8-9012-3456-cdef-789012345678"
}
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({
title: 'Client dinner',
currency: 'USD',
destinationCurrency: 'USD',
entries: [
{
description: 'Dinner with client',
amount: {currency: 'USD', value: '1000.00'},
category: 'Meals',
date: '2025-11-28',
fileIds: ['f1e2d3c4-5678-9012-cdef-345678901234']
}
],
userId: 'a3b4c5d6-e7f8-9012-abcd-ef3456789012',
personId: 'c5d6e7f8-9012-3456-cdef-789012345678'
})
};
fetch('https://api.cadanapay.com/v1/reimbursements', 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.cadanapay.com/v1/reimbursements",
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([
'title' => 'Client dinner',
'currency' => 'USD',
'destinationCurrency' => 'USD',
'entries' => [
[
'description' => 'Dinner with client',
'amount' => [
'currency' => 'USD',
'value' => '1000.00'
],
'category' => 'Meals',
'date' => '2025-11-28',
'fileIds' => [
'f1e2d3c4-5678-9012-cdef-345678901234'
]
]
],
'userId' => 'a3b4c5d6-e7f8-9012-abcd-ef3456789012',
'personId' => 'c5d6e7f8-9012-3456-cdef-789012345678'
]),
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://api.cadanapay.com/v1/reimbursements"
payload := strings.NewReader("{\n \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\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://api.cadanapay.com/v1/reimbursements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/reimbursements")
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 \"title\": \"Client dinner\",\n \"currency\": \"USD\",\n \"destinationCurrency\": \"USD\",\n \"entries\": [\n {\n \"description\": \"Dinner with client\",\n \"amount\": {\n \"currency\": \"USD\",\n \"value\": \"1000.00\"\n },\n \"category\": \"Meals\",\n \"date\": \"2025-11-28\",\n \"fileIds\": [\n \"f1e2d3c4-5678-9012-cdef-345678901234\"\n ]\n }\n ],\n \"userId\": \"a3b4c5d6-e7f8-9012-abcd-ef3456789012\",\n \"personId\": \"c5d6e7f8-9012-3456-cdef-789012345678\"\n}"
response = http.request(request)
puts response.read_body{
"id": "d1e2f3a4-5678-9012-cdef-345678901234"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Required when using a Platform API token. The tenant key identifying which business to operate on.
Body
Create reimbursement request payload. Identify the worker with exactly one of userId or personId.
A short title describing the reimbursement.
"Client dinner"
The currency the entry amounts are denominated in.
"USD"
The currency the worker is reimbursed in.
"USD"
The individual line items that make up the reimbursement.
Show child attributes
Show child attributes
The worker the reimbursement is for. Provide either userId or personId.
"a3b4c5d6-e7f8-9012-abcd-ef3456789012"
The worker the reimbursement is for, identified by their personId within the tenant. Provide either userId or personId.
"c5d6e7f8-9012-3456-cdef-789012345678"
Response
The created reimbursement's id