Reimbursement Details API
curl --request GET \
--url https://api.pazy.io/v1.0/reimbursement/:reimbursementIdimport requests
url = "https://api.pazy.io/v1.0/reimbursement/:reimbursementId"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.pazy.io/v1.0/reimbursement/:reimbursementId', 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.pazy.io/v1.0/reimbursement/:reimbursementId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.pazy.io/v1.0/reimbursement/:reimbursementId"
req, _ := http.NewRequest("GET", url, nil)
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.pazy.io/v1.0/reimbursement/:reimbursementId")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pazy.io/v1.0/reimbursement/:reimbursementId")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyReimbursement APIs
Reimbursement Details API
Retrieve detailed information for a single reimbursement including items, mileage trips, and tax breakdown
Reimbursement Details API
curl --request GET \
--url https://api.pazy.io/v1.0/reimbursement/:reimbursementIdimport requests
url = "https://api.pazy.io/v1.0/reimbursement/:reimbursementId"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.pazy.io/v1.0/reimbursement/:reimbursementId', 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.pazy.io/v1.0/reimbursement/:reimbursementId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.pazy.io/v1.0/reimbursement/:reimbursementId"
req, _ := http.NewRequest("GET", url, nil)
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.pazy.io/v1.0/reimbursement/:reimbursementId")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pazy.io/v1.0/reimbursement/:reimbursementId")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyAuthentication
All requests require an API key in the request headers. Headers:Authorization: Api-Key YOUR_API_KEY
Request
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
reimbursementId | string | Yes | The unique slug identifier of the reimbursement |
Code Examples
curl -X GET https://api.pazy.io/v1.0/reimbursement/reimbursement_identifier \
-H "Authorization: Api-Key YOUR_API_KEY"
const response = await fetch('https://api.pazy.io/v1.0/reimbursement/reimbursement_identifier', {
method: 'GET',
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
});
const result = await response.json();
import requests
url = "https://api.pazy.io/v1.0/reimbursement/reimbursement_identifier"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
result = response.json()
Success Response
HTTP Status:200 OK
Response Fields:
| Field | Type | Description |
|---|---|---|
ok | boolean | Indicates whether the request was successful |
data | object | Contains the reimbursement details |
data.id | string | Unique identifier (slug) for the reimbursement |
data.reimbursementNumber | string | Reimbursement number |
data.description | string | Description of the reimbursement |
data.reimbursementDate | string | Reimbursement date (ISO 8601 format) |
data.dateCreated | string | Date the reimbursement was created in the system (ISO 8601 format) |
data.amount | number or string | Total amount of the reimbursement |
data.amountPaid | number or string | Amount that has been paid against the reimbursement |
data.currency | string | Currency code (e.g., INR) |
data.state | string | Current state of the reimbursement. Possible values: DRAFTED, PENDING, APPROVED, PAID, ARCHIVED. This endpoint returns the raw PENDING value for pending approval, whereas the Reimbursement List API normalizes it to APPROVAL_PENDING |
data.itemsType | string | Type of items in the reimbursement. Possible values: ALL_EXPENSE, ALL_MILEAGE, MIXED |
data.itemCount | number | Number of items in the reimbursement |
data.remarks | string | Notes / remarks on the reimbursement |
data.tax | object | Tax summary for the reimbursement |
data.tax.subTotal | number or string | Amount before taxes |
data.tax.gst | number or string | Total GST amount |
data.tax.tds | number or string | Total TDS (withholding) amount |
data.items | array | Items that make up the reimbursement |
data.items[].type | string | Item type. Possible values: EXPENSE, MILEAGE |
data.items[].item_type | string | Item type (same value as type) |
data.items[].amount | number or string | Amount for the item |
data.items[].description | string | Description of the item |
data.items[].dateCreated | string | Date the item was created (ISO 8601 format) |
data.items[].reimbursementDate | string | Reimbursement date associated with the item |
data.items[].trip | object | Mileage trip details. Present only for MILEAGE items that have an associated trip |
data.items[].trip.location | object | Trip location details (internal identifiers such as place id and coordinates are omitted) |
data.items[].trip.rate | number | Mileage rate applied to the trip |
data.items[].trip.distance | string | Trip distance in meters, suffixed with m (e.g., 12500m) |
data.user | object | The user the reimbursement belongs to |
data.user.id | string | Unique slug identifier of the user |
data.user.name | string | Full name of the user |
data.accountingDate | string | Accounting date for the reimbursement (ISO 8601 format) |
data.approvedDate | string | Date the reimbursement was approved (ISO 8601 format) |
data.paymentDate | string | Date the reimbursement was paid (ISO 8601 format) |
data.accountingPlatform | string | Name of the connected accounting platform. Present only when an accounting integration is connected |
Response Example
{
"ok": true,
"data": {
"id": "reimbursement_identifier",
"reimbursementNumber": "REIM-2026-001",
"description": "January travel reimbursement",
"reimbursementDate": "2026-01-31",
"dateCreated": "2026-01-31T10:30:00Z",
"amount": 5200.00,
"amountPaid": 5200.00,
"currency": "INR",
"state": "APPROVED",
"itemsType": "MIXED",
"itemCount": 2,
"remarks": "Approved by manager",
"tax": {
"subTotal": 5000.00,
"gst": 200.00,
"tds": 0
},
"items": [
{
"type": "EXPENSE",
"item_type": "EXPENSE",
"amount": 1200.00,
"description": "Client dinner",
"dateCreated": "2026-01-20T19:00:00Z",
"reimbursementDate": "2026-01-31"
},
{
"type": "MILEAGE",
"item_type": "MILEAGE",
"amount": 4000.00,
"description": "Site visit",
"dateCreated": "2026-01-22T08:00:00Z",
"reimbursementDate": "2026-01-31",
"trip": {
"location": {
"from": { "name": "Office" },
"to": { "name": "Client Site" }
},
"rate": 12,
"distance": "12500m"
}
}
],
"user": {
"id": "user_identifier",
"name": "John Doe"
},
"accountingDate": "2026-01-31",
"approvedDate": "2026-02-01T09:00:00Z",
"paymentDate": "2026-02-02T11:00:00Z"
}
}
Error Responses
Authentication and permission failures are returned in the standard structured format shown below. Business-logic errors (such as the reimbursement not being found or access being denied) are returned with an HTTP
200 OK status and a string error message: { "ok": false, "error": "<message>" }.Reimbursement Not Found
HTTP Status:200 OK
{
"ok": false,
"error": "Reimbursement not found"
}
Access Denied
HTTP Status:200 OK
{
"ok": false,
"error": "Access denied: You can only view your own reimbursements"
}
Authentication Errors
HTTP Status:401 Unauthorized
{
"ok": false,
"error": {
"code": "MISSING_CREDENTIALS",
"message": "Missing Credentials"
}
}
{
"ok": false,
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid API Key"
}
}
Permission Errors
HTTP Status:403 Forbidden
{
"ok": false,
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Permission check failed - PERMISSION_CHECK_FAILED"
}
}
Best Practices
- Use the
idreturned by the Reimbursement List API as thereimbursementIdpath parameter tripis only present onMILEAGEitems that have an associated trip;distanceis reported in meters with anmsuffix- Always check the
okflag in the response body in addition to the HTTP status code, since business-logic errors are returned with an HTTP200 OKstatus - Access is limited to users with reimbursement read permission and an admin or bookkeeper role
Was this page helpful?