Payroll

Request Finance allows you to pay net salaries, bonuses, or token vestings to your employees with a couple of clicks. With the API, you can create salary payments from your own tool and pay them later via the Request Finance application.
On a technical level, a payroll payment is just another type of invoice. As with invoices, payments also need to be converted to an on-chain request after they are created.

Creating an Off-Chain Payroll Payment

Creating an off-chain payroll payment is done via the same endpoint that is used to create invoices, but with some changes to the attributes (see below).
Note that while the endpoint uses the same attributes, they're handled differently in the Request Finance application. Notably:
  • meta: format must be rnf_salary to ensure that the salary payment shows up as such in the Request Finance application.
  • A sellerInfo object is included that includes information about the employee to be paid.
  • Some information can be omitted. Refer to the example request below.
post
https://api.request.finance
/invoices
Creates an off-chain payroll payment

Example Request

Let’s assume you want to pay your employee, William Dean ([email protected]), $1,000.00 using USDC on Polygon. Additionally, the salary should be created every month for the next three months.
To create a salary payment like this, you would pass the following body with the request:
{
"meta": {
"format": "rnf_salary",
"version": "0.0.3"
},
"creationDate": "2023-05-31T14:59:59.999Z",
"invoiceItems": [
{
"currency": "USD",
"name": "Salary",
"quantity": 1,
"unitPrice": "100002"
}
],
"invoiceNumber": "1",
"buyerInfo": {
"email": "[email protected]"
},
"sellerInfo": {
"email": "[email protected]",
"firstName": "William",
"lastName": "Dean"
},
"paymentTerms": {
"dueDate": "2023-06-01T14:59:59.999Z"
},
"paymentAddress": "0x4886E85E192cdBC81d42D89256a81dAb990CDD74",
"paymentCurrency": "USDC-matic",
"recurringRule": "DTSTART:20230601T074619Z\nRRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=3"
}
As with invoices, in the JSON response, you will get an id field. Please save it in a variable or in your database. You will need it to convert the payment into an on-chain request in the next section.

Converting an Off-Chain Salary Payment into an On-Chain Request

Converting a salary payment to an on-chain request to make it payable is done using the same endpoint that is used for invoices. Replace [id] with the ID of the payment you saved previously. You don’t need to pass anything in the request body.

Paying a Salary Payment

The only way to currently pay an on-chain salary payment is via the Request Finance application. Simply log in to Request Finance and navigate to the "Salaries" menu to make payments individually or in batch.

Fetching a Salary Payment

To check the status of a salary payment and understand if it has been paid, please use the same endpoint that is used for invoices. Replace [id] with the requestId of the Request (recommended), or the invoiceId.
Example Response
{
"id": "647855dc484f371e737cf593",
"paymentCurrency": "USDC-matic",
"buyerInfo": {
"email": "[email protected]",
"userId": "647804be4e8042efbde7a735"
},
"sellerInfo": {
"email": "[email protected]",
"firstName": "William",
"lastName": "Dean",
"userId": "63c4eeed02a7c1bb872cb3a1"
},
"paymentAddress": "0x4886E85E192cdBC81d42D89256a81dAb990CDD74",
"invoiceItems": [
{
"tax": {
"type": "fixed",
"amount": "0"
},
"currency": "USD",
"quantity": 1,
"unitPrice": "100002",
"name": "Salary"
}
],
"paymentTerms": {
"dueDate": "2023-06-01T14:59:59.999Z"
},
"recurringRule": "DTSTART:20230601T074619Z\nRRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=3",
"invoiceNumber": "1",
"creationDate": "2023-05-31T14:59:59.999Z",
"meta": {
"format": "rnf_salary",
"version": "0.0.3"
},
"nextOccurrence": "2023-07-01T07:46:19.000Z",
"status": "scheduled",
"createdBy": "647804be4e8042efbde7a735",
"paymentOptions": [
{
"type": "wallet",
"value": {
"currencies": [
"USDC-matic"
],
"paymentInformation": {
"paymentAddress": "0x4886E85E192cdBC81d42D89256a81dAb990CDD74",
"chain": "matic"
}
}
}
],
"type": "live",
"miscellaneous": {
"builderId": null,
"createdWith": null,
"logoUrl": null,
"variant": null,
"notifications": {
"creation": true
}
},
"role": "buyer",
"tags": [],
"events": []
}

Listing Salary Payments

To list salaries, use LIST invoices. Make sure to filter for salaries payments in your request; invoices?variant=rnf_salary.