Accounts Receivable Automation
Use Case Overview
Key Model(s) and Fields | Supported Applications |
---|---|
Invoices customerId trackingCategories totalAmount lineItems | NetSuite, QuickBooks, Microsoft Dynamics Business Central |
Customers id customer taxNumber email addresses | NetSuite, QuickBooks, Microsoft Dynamics Business Central |
Payments totalAmount vendorId trackingCategoryIds | NetSuite, QuickBooks, Microsoft Dynamics Business Central |
This is a bi-directional integration. In this example, you can GET and POST target resources to help users automate accounts receivable.
How to build this use case with Alloy's Unified API
1. Create a Connection
To get started, you'll need to first implement Alloy's Unified API and create a connection. A connection represents each time an end user links an app to Alloy's Unified API. See Getting Started in our Unified API Quickstart.
If you’ve already done this, read on!
2. Sync customers between applications
Make sure that your application and your user’s Accounting platform have a matching database of customers. You can do this by using the GET List Customers
and POST Create Customer
endpoints, which will allow you to get all customers from your user’s Accounting platform and write customers to those platforms, respectively.
Your request to the GET List Customers
endpoint should look like this:
curl --request GET \
--url 'https://embedded.runalloy.com/2024-03/one/accounting/customers?credentialId=CREDENTIAL_ID' \
--header 'Authorization: bearer YOUR_API_KEY' \
--header 'accept: application/json'
Which will return a response payload structured like this:
{
"customers": [
{
"id": "00000000-0000-0000-0000-00000000",
"remoteId": "96",
"customerName": "Rushin123 Shah",
"email": null,
"taxNumber": null,
"customerStatus": "ACTIVE",
"currency": "USD",
"companyId": null,
"addresses": [],
"phoneNumbers": [],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
},
{
"id": "00000001-0000-0000-0000-00000001",
"remoteId": "97",
"customerName": "Emily Johnson",
"email": "emily.johnson@example.com",
"taxNumber": "EJ1234567",
"customerStatus": "ACTIVE",
"currency": "USD",
"companyId": "EJCO",
"addresses": [
{
"zipCode": "10001",
"street1": "123 Broadway",
"state": "NY",
"city": "New York",
"addressType": "Billing",
"countrySubdivision": "NY"
}
],
"phoneNumbers": [
{
"phoneNumberType": "Primary",
"phoneNumber": "(212) 555-1234"
}
],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
},
{
"id": "00000002-0000-0000-0000-00000002",
"remoteId": "98",
"customerName": "John Doe",
"email": "john.doe@example.com",
"taxNumber": "JD2345678",
"customerStatus": "PENDING",
"currency": "USD",
"companyId": "JDCO",
"addresses": [
{
"zipCode": "90001",
"street1": "456 Sunset Blvd",
"state": "CA",
"city": "Los Angeles",
"addressType": "Shipping",
"countrySubdivision": "CA"
}
],
"phoneNumbers": [
{
"phoneNumberType": "Mobile",
"phoneNumber": "(323) 555-6789"
}
],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
}
]
}
To create new customers in your user’s Accounting platform, make a request to the POST Create Customer
endpoint. The request should look something like this:
curl --request POST \
--url https://embedded.runalloy.com/2023-12/one/accounting/customers?credentialId=CREDENTIAL_ID \
--header 'Authorization: bearer YOUR_API_KEY' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"addresses": {
"addressType": "Billing",
"street1": "213 Example Ave",
"city": "New York",
"state": "NY",
"country": "US",
"zipCode": "10012"
},
"phoneNumbers": {
"phoneNumberType": "PRIMARY",
"phoneNumber": "12345678901"
},
"customerName": "Hooli",
"customerStatus": "ACTIVE",
"currency": "USD"
}
'
3. Create invoices in your user’s Accounting platform
When a user creates a new invoice in your application, you’ll need to create a corresponding record in their Accounting platform. You can do this with Alloy Unified API’s POST Create Invoice
endpoint.
See the request below:
curl --request POST \
--url https://embedded.runalloy.com/2023-12/one/accounting/invoices?credentialId=CREDENTIAL_ID \
--header 'Authorization: bearer YOUR_API_KEY' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"customerId": "{customerId}",
"lineItems": [
{
"description": "November Services",
"totalAmount": "2373.45"
}
],
"invoiceNumber": "7452",
"issueDate": "2023-12-10",
"dueDate": "2023-12-27",
"currency": "USD",
"balance": 2373.45
}
As you can see, the Invoice model in Alloy’s Unified API includes lineItems
, amount
, balance
and more — customerId
will be used to associate the invoice with a user’s customer. See our API reference for a full list of properties.
4. Get payment data from a user’s Accounting platform
To close the loop and present current customer balance information in your application, you’ll need to get payments made against invoices and reflect the appropriate invoice status (open, paid etc.) in your application.
To do this, make a call to the GET List Payments
endpoint. Your request should look like this:
curl --request GET \
--url https://embedded.runalloy.com/2023-12/one/accounting/payments?credentialId=CREDENTIAL_ID \
--header 'Authorization: bearer YOUR_API_KEY' \
--header 'accept: application/json'
Which will return a response that looks like this:
{
"payments": [
{
"id": "00000000-0000-0000-0000-00000000",
"remoteId": "33",
"transactionDate": "2021-04-30",
"customerId": "a9d9e59e-d553-4d91-b62b-ee7bf70772d8",
"vendorId": null,
"accountId": null,
"currency": "USD",
"exchangeRate": 1,
"companyId": null,
"totalAmount": null,
"trackingCategoryIds": [],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
},
{
"id": "00000001-0000-0000-0000-00000001",
"remoteId": "34",
"transactionDate": "2021-05-15",
"customerId": "b0d0f60f-e654-4c2d-9c3c-fa7bf81873e9",
"vendorId": null,
"accountId": "001",
"currency": "USD",
"exchangeRate": 1,
"companyId": "COMP01",
"totalAmount": 500,
"trackingCategoryIds": ["001", "002"],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
},
{
"id": "00000002-0000-0000-0000-00000002",
"remoteId": "35",
"transactionDate": "2021-06-01",
"customerId": "c1e1g71g-f765-4f8c-9d4d-ga8cf92984fa",
"vendorId": null,
"accountId": "002",
"currency": "USD",
"exchangeRate": 1,
"companyId": "COMP02",
"totalAmount": 750,
"trackingCategoryIds": ["003"],
"remoteCreatedAt": "2023-11-19T17:00:17.000Z",
"remoteUpdatedAt": "2023-11-19T17:00:17.000Z",
"remoteDeleted": false,
"createdAt": "2024-02-22T11:17:53.264Z",
"updatedAt": "2024-02-22T13:54:03.445Z"
}
]
}
From here, you can list any invoices with a non-zero balance as “Open” in your application, while invoices with no outstanding balance can be marked as “Paid.” Your users can then reconcile payments with invoices in your application and remind customers with open invoices to pay.
Help users automate accounts receivable
Automate the accounts receivable workflow to help users avoid billing disputes, get paid faster, and expand your product’s utility.