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

Authentication

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

Request

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoNumber of records to return. Min 1, Max 100, Default 30.
cursorstringNoCursor for pagination. Use the nextCursor value returned by the previous response.
dateTypestringNoType of date to filter by. Default reimbursement_date. Possible values: reimbursement_date, payment_date, date_created, approved_date.
startDatestringNoStart date for filtering (ISO 8601 UTC format: YYYY-MM-DDTHH:mm:ssZ).
endDatestringNoEnd date for filtering (ISO 8601 UTC format: YYYY-MM-DDTHH:mm:ssZ).
statearrayNoReimbursement states to filter by. Allowed values: DRAFTED, APPROVAL_PENDING, APPROVED, PAID, ARCHIVED.
reimbursementNumberstringNoFilter by reimbursement number.
reimbursementDatestringNoFilter by a specific reimbursement date (YYYY-MM-DD format).
userIdstringNoFilter by the id of the user the reimbursement belongs to.
tagIdintegerNoFilter reimbursements containing this organization tag id.
amountnumberNoFilter reimbursements with amount greater than or equal to this value.
itemsTypestringNoFilter by the type of items in the reimbursement. Possible values: ALL_EXPENSE, ALL_MILEAGE, MIXED.

Code Examples

curl -X GET "https://api.pazy.io/v1.0/reimbursements?limit=30&state=APPROVED" \
  -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 list response data
data.reimbursementsarrayList of reimbursements
data.reimbursements[].idstringUnique identifier (slug) for the reimbursement
data.reimbursements[].reimbursementNumberstringReimbursement number
data.reimbursements[].sequenceNumberstringSystem-generated sequence number with organization prefix
data.reimbursements[].descriptionstringDescription of the reimbursement
data.reimbursements[].reimbursementDatestringReimbursement date (ISO 8601 format)
data.reimbursements[].dateCreatedstringDate the reimbursement was created in the system (ISO 8601 format)
data.reimbursements[].amountnumber or stringTotal amount of the reimbursement
data.reimbursements[].currencystringCurrency code (e.g., INR)
data.reimbursements[].remarksstringNotes / remarks on the reimbursement
data.reimbursements[].statestringCurrent state of the reimbursement. Possible values: DRAFTED, APPROVAL_PENDING, APPROVED, PAID, ARCHIVED
data.reimbursements[].sourcestringSource of the reimbursement. Manual entries are returned as WEB; other possible values include EMAIL, SLACK
data.reimbursements[].userobjectThe user the reimbursement belongs to
data.reimbursements[].user.idstringUnique slug identifier of the user
data.reimbursements[].user.namestringFull name of the user
data.contextobjectPagination metadata
data.context.countnumberTotal number of reimbursements matching the filters
data.context.hasMorebooleanIndicates whether there are more reimbursements to fetch
data.context.nextCursorstring or nullCursor to fetch the next page. null when there are no more results

Reimbursement State Values

ValueDescription
DRAFTEDReimbursement is in draft state
APPROVAL_PENDINGReimbursement is pending approval
APPROVEDReimbursement has been approved
PAIDReimbursement has been paid
ARCHIVEDReimbursement has been archived

Response Example

{
  "ok": true,
  "data": {
    "reimbursements": [
      {
        "id": "reimbursement_identifier",
        "reimbursementNumber": "REIM-2026-001",
        "sequenceNumber": "PZY/2026-27/REIM/0001",
        "description": "January travel reimbursement",
        "reimbursementDate": "2026-01-31",
        "dateCreated": "2026-01-31T10:30:00Z",
        "amount": 5200.00,
        "currency": "INR",
        "remarks": "Approved",
        "state": "APPROVED",
        "source": "WEB",
        "user": {
          "id": "user_identifier",
          "name": "John Doe"
        }
      }
    ],
    "context": {
      "count": 42,
      "hasMore": true,
      "nextCursor": "30"
    }
  }
}

Error Responses

Authentication and permission failures are returned in the standard structured format shown below. Business-logic errors (such as access being denied) are returned with an HTTP 200 OK status and a string error message: { "ok": false, "error": "<message>" }.

Access Denied

HTTP Status: 200 OK
{
  "ok": false,
  "error": "Access denied: You can only view vendors you own"
}

Validation Error

HTTP Status: 400 Bad Request
{
  "ok": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Validation failed: /query/state: must be equal to one of the allowed values"
  }
}

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 cursor and limit together to paginate; pass the nextCursor from the response as the cursor value for the next call
  • startDate and endDate are interpreted against the column specified by dateType — change dateType to filter by payment, created, or approval date instead of the reimbursement date
  • Use the id from the response as the input to the Reimbursement Details API for full reimbursement information
  • 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