Skip to main content
Reimbursement Details API
curl --request GET \
  --url https://api.pazy.io/v1.0/reimbursement/:reimbursementId

Authentication

All requests require an API key in the request headers. Headers:
Authorization: Api-Key YOUR_API_KEY

Request

Path Parameters

ParameterTypeRequiredDescription
reimbursementIdstringYesThe 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"

Success Response

HTTP Status: 200 OK Response Fields:
FieldTypeDescription
okbooleanIndicates whether the request was successful
dataobjectContains the reimbursement details
data.idstringUnique identifier (slug) for the reimbursement
data.reimbursementNumberstringReimbursement number
data.descriptionstringDescription of the reimbursement
data.reimbursementDatestringReimbursement date (ISO 8601 format)
data.dateCreatedstringDate the reimbursement was created in the system (ISO 8601 format)
data.amountnumber or stringTotal amount of the reimbursement
data.amountPaidnumber or stringAmount that has been paid against the reimbursement
data.currencystringCurrency code (e.g., INR)
data.statestringCurrent 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.itemsTypestringType of items in the reimbursement. Possible values: ALL_EXPENSE, ALL_MILEAGE, MIXED
data.itemCountnumberNumber of items in the reimbursement
data.remarksstringNotes / remarks on the reimbursement
data.taxobjectTax summary for the reimbursement
data.tax.subTotalnumber or stringAmount before taxes
data.tax.gstnumber or stringTotal GST amount
data.tax.tdsnumber or stringTotal TDS (withholding) amount
data.itemsarrayItems that make up the reimbursement
data.items[].typestringItem type. Possible values: EXPENSE, MILEAGE
data.items[].item_typestringItem type (same value as type)
data.items[].amountnumber or stringAmount for the item
data.items[].descriptionstringDescription of the item
data.items[].dateCreatedstringDate the item was created (ISO 8601 format)
data.items[].reimbursementDatestringReimbursement date associated with the item
data.items[].tripobjectMileage trip details. Present only for MILEAGE items that have an associated trip
data.items[].trip.locationobjectTrip location details (internal identifiers such as place id and coordinates are omitted)
data.items[].trip.ratenumberMileage rate applied to the trip
data.items[].trip.distancestringTrip distance in meters, suffixed with m (e.g., 12500m)
data.userobjectThe user the reimbursement belongs to
data.user.idstringUnique slug identifier of the user
data.user.namestringFull name of the user
data.accountingDatestringAccounting date for the reimbursement (ISO 8601 format)
data.approvedDatestringDate the reimbursement was approved (ISO 8601 format)
data.paymentDatestringDate the reimbursement was paid (ISO 8601 format)
data.accountingPlatformstringName 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 id returned by the Reimbursement List API as the reimbursementId path parameter
  • trip is only present on MILEAGE items that have an associated trip; distance is reported in meters with an m suffix
  • Always check the ok flag in the response body in addition to the HTTP status code, since business-logic errors are returned with an HTTP 200 OK status
  • Access is limited to users with reimbursement read permission and an admin or bookkeeper role