Skip to main content
Version: 1.2.0

Accounts Receivable Automation

Use Case Overview

Key Model(s) and FieldsSupported 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
Data Flow: Your App <-> ERP/Accounting Platform

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.

Your end-users authenticate integrations using the Alloy Modal.

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
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:

JSON
{
"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
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
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
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:

JSON
{
"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.