Expenses to approve

An employee creates and submits an expense report, which is routed to the employee's manager for approval. In some cases, approvals are required from multiple users.

After approval, an expense report becomes a reimbursement request, which is processed by accounting.

List employee expenses to approve

get/objects/expenses/expense-to-approve

Returns a collection with a key, ID, and link for each expense to approve. This operation is mostly for use in testing; use query to find objects that meet certain criteria and to specify properties that are returned.

SecurityOAuth2
Responses
200

OK

400

Bad Request

Request samples
Response samples
application/json
{
  • "ia::result": [
    • {
      • "key": "101",
      • "id": "101",
      • "href": "/objects/expenses/expense-to-approve/101"
      },
    • {
      • "key": "102",
      • "id": "102",
      • "href": "/objects/expenses/expense-to-approve/102"
      },
    • {
      • "key": "103",
      • "id": "103",
      • "href": "/objects/expenses/expense-to-approve/103"
      }
    ],
  • "ia::meta": {
    • "totalCount": 3,
    • "start": 1,
    • "pageSize": 100,
    • "next": 0,
    • "previous": 0
    }
}

Get an employee expense to approve

get/objects/expenses/expense-to-approve/{key}

Returns detailed information for a specified expense to approve.

SecurityOAuth2
Request
path Parameters
key
required
string

system-assigned unique key for the expense-to-approve.

Example: 99
Responses
200

OK

400

Bad Request

Request samples
Response samples
application/json
{
  • "ia::result": {
    • "key": "124",
    • "id": "124",
    • "createdDate": "2021-01-23",
    • "employee": {
      • "key": "12345",
      • "id": "EMP-025",
      • "href": "/objects/company-config/employee/12345"
      },
    • "employeeContact": {
      • "key": "20",
      • "id": "Thomas, Glenn",
      • "firstName": "Glenn",
      • "lastName": "Thomas",
      • "href": "/objects/company-config/contact/20"
      },
    • "state": "draft",
    • "basePayment": {
      • "baseCurrency": "USD",
      • "paidDate": "2021-01-23",
      • "totalEntered": "123.45",
      • "totalPaid": "123.45",
      • "totalDue": "123.45",
      • "totalSelected": "110.00"
      },
    • "reimbursement": {
      • "reimbursementCurrency": "EUR",
      • "totalEntered": "123.16",
      • "totalPaid": "123.16",
      • "totalDue": "123.16",
      • "totalSelected": "123.16"
      },
    • "expenseReportNumber": "EXP-00001",
    • "expenseSummary": {
      • "key": "334",
      • "id": "334",
      • "title": "Expenses 2023/01/31 batch",
      • "postingDate": "2021-01-23",
      • "state": "open",
      • "preventGLPosting": false,
      • "href": "/objects/projects/employee-expense-summary/12345"
      },
    • "nonReimbursable": {
      • "baseTotalEntered": "123.45",
      • "reimbursementTotalEntered": "123.45"
      },
    • "memo": "Paid to employee",
    • "description": "Supplies for customer training",
    • "reclassificationNotes": "Classified as supplies, not travel expense",
    • "attachment": {
      • "key": "1",
      • "id": "1",
      • "href": "/objects/company-config/attachment/12345"
      },
    • "audit": {
      • "createdDateTime": "2014-01-08T11:28:12Z",
      • "modifiedDateTime": "2022-04-20T16:20:00Z",
      • "createdBy": "1",
      • "modifiedBy": "95"
      },
    • "lines": [
      • {
        }
      ]
    },
  • "ia::meta": {
    • "totalCount": 1,
    • "totalSuccess": 1,
    • "totalError": 0
    }
}

Approve an employee expense

post/workflows/expenses/expense-to-approve/approve

The approve workflow is used to set a submitted expense and its expense lines to 'approved' or 'partiallyApproved'. The submitted expense's beginning state depends on where the expense already is in the approval cycle and can include 'submitted', 'partiallyApproved', or 'partiallyDeclined'.

For example, new expenses will have a state of 'submitted', while an existing expense that's been partially approved can have a state of 'partiallyApproved' until all approvals are received. When an expense is fully approved, its state changes to 'approved'.

SecurityOAuth2
Request
Request Body schema: application/json
key
required
string

System-assigned key for the expense.

Example: "518"
expenseLineKeys
Array of strings

Array of expense entry keys.

Example: ["1","2"]
notes
string

Notes or comments from the approver.

Example: "Approved by John Smith."
glPostingDate
string

GL posting date for approved expense.

Example: "2025-08-02"
Responses
200

OK

400

Bad Request

Request samples
application/json
{
  • "key": "518",
  • "expenseLineKeys": [
    • "1",
    • "2"
    ],
  • "notes": "Approved by John Smith.",
  • "glPostingDate": "2025-08-02"
}
Response samples
application/json
{
  • "ia::result": {
    • "key": "518",
    • "id": "518",
    • "href": "/objects/expenses/expense-to-approve/518",
    • "state": "approved"
    },
  • "ia::meta": {
    • "totalCount": 3,
    • "totalSuccess": 2,
    • "totalError": 1
    }
}

Decline an employee expense

post/workflows/expenses/expense-to-approve/decline

The decline workflow is used to set a submitted expense and its expense lines to 'declined' or 'partiallyDeclined'. The submitted expense's beginning state depends on where the expense already is in the approval cycle and can include 'submitted', 'partiallyApproved', or 'partiallyDeclined'.

For example, new expenses will have a state of 'submitted', while an existing expense that's been partially approved can have a state of 'partiallyApproved' until all approvals are received. When an expense is declined, its state changes to 'declined'.

SecurityOAuth2
Request
Request Body schema: application/json
key
required
string

System-assigned key for the expense.

Example: "518"
notes
string

Notes or comments about the expense.

Example: "Declined, missing information."
expenseLineKeys
Array of strings

Array of expense entry keys.

Example: ["1","2"]
Responses
200

OK

400

Bad Request

Request samples
application/json
{
  • "key": "518",
  • "notes": "Declined, missing information.",
  • "expenseLineKeys": [
    • "1",
    • "2"
    ]
}
Response samples
application/json
{
  • "ia::result": {
    • "key": "518",
    • "id": "518",
    • "href": "/objects/expenses/expense-to-approve/518",
    • "state": "declined"
    },
  • "ia::meta": {
    • "totalCount": 3,
    • "totalSuccess": 2,
    • "totalError": 1
    }
}

Query expense to approves

post/services/core/query

Use the query service to find expense to approves that meet certain criteria and to specify the properties that are returned.

SecurityOAuth2
Responses
200

OK

400

Bad Request

Request samples
Response samples
application/json
{
  • "ia::result": {
    • "ia::error": {
      • "code": "invalidRequest",
      • "message": "A POST request requires a payload",
      • "errorId": "REST-1028",
      • "additionalInfo": {
        },
      • "supportId": "Kxi78%7EZuyXBDEGVHD2UmO1phYXDQAAAAo"
      }
    },
  • "ia::meta": {
    • "totalCount": 1,
    • "totalSuccess": 0,
    • "totalError": 1
    }
}