Download OpenAPI specification:Download
Below is an overview of our REST API, including endpoints related to our general ledger and other components of SoftLedger's accounting software.
SoftLedger has the following endpoints.
Site | Endpoint |
---|---|
Production | https://api.softledger.com/v2 |
Europe | https://eu-api.softledger.com/v2 |
Please contact support@softledger.com to request access to the API.
Previous versions documentation of the API are available at the linke below
Note that these docs are deprecated and will reach end of life on April 30th, 2024.
SoftLedger API uses OAuth2.0 to access it's API. For any request to the API, you'll need to pass a JWT.
Prior to making any API request you'll need to request an OAuth token.
After you receive a token, add the following headers to every subsequent request:
{
"Authorization": "Bearer {access_token}",
"Content-Type": "application/json"
}
Request OAuth Token
This endpoint uses the base URL without version as the request URL
https://api.softledger.com/oauth/token
https://eu-api.softledger.com/oauth/token
The following Legacy URLs will continue to be supported
https://auth.accounting-auth.com/oauth/token
https://eu.accounting-auth.com/oauth/token
grant_type required | string The OAuth grant type used to generate the toekn.
|
audience required | string API reference. Will be one of these two values
|
client_id required | string The Client ID of the OAuth client |
client_secret required | string The Client Secret of the OAuth client |
tenantUUID | string Note: This is only required for multi-tenant api keys The Tenant UUID to request data for |
{- "grant_type": "string",
- "tenantUUID": "string",
- "audience": "string",
- "client_id": "string",
- "client_secret": "string"
}
{- "access_token": "string",
- "expires_in": 0,
- "scope": "string"
}
Actions performed by the api will have their audit logs labelled with the name of the api key generated by the SoftLedger team.
Performing requests on behalf of users / Labeling audit log entries
If you would like to use an alternate label, or perform actions on behalf of a user, you can pass the x-softledger-auditlabel
header with the email of a user or a string label. This label will then be used in the audit log entry.
Requests to the SoftLedger API are rate limited to 200 requests per minute.
A rate limited request will return a HTTP Status of 429.
Every request to the API will return the following headers:
X-RateLimit-Remaining: String<integer>
- The number of api requests left during the interval.
X-RateLimit-RetryAfter: String<integer>
- The number of seconds remaining until the next interval.
The query paramaters for most GET requests limit
and cursor
allow pagination through large sets of data.
By default limit
is set to 25
In order to page forward set the cursor
query param to the cursor
value returned in the previous requests response data.
The query parameter filter
and filterType
for most GET endpoints allows you to filter on the requested data.
The filter
paramater should be a JSON.stringified key: value object.
The filterType
should be one of all
or any
. It defaults to all
.
If set to all
all results that match ALL filters are returned.
If set to any
all restults that match ANY filters are returned.
For example, if we wanted to get all Invoices that were paid, the where clause would be:
{
"status": {
"equals": "paid"
}
}
This would then be stringified prior to attaching in the URL
let tmp = JSON.stringify({
status: {
equals: "paid"
}
});
Then the request URL would look as follows
https://api.softledger.com/api/invoices?filter=tmp&filterType=any
Key | Description |
---|---|
equals | Exactly equals |
contains | Column contains. *String values only |
not | Does not equal |
gt | Greater than |
gte | Greater than or equal to |
lt | Less than |
lte | Less than or equal to |
in | Column is exactly any of the passed columns. Its value should be an array of values |
isNull | Boolean. Pass true to return columns with a null value and false to return columns with a set value. |
Get all created or approved bills posted after "2020-01-01"
{
"status": {
"in": ["created", "approved"]
},
"postingDate": {
"gt": "2020-01-01"
}
}
Get all Transactions where the reconcileId is not set. Indicating they are not reconciled
{
"reconcileId": {
"isNull": true
}
}
Successful API request responses will be described inline throughout the document 401,403,404 Messages will not contain a body as the error is implied. Other 4xx error codes will return as following:
{
error: "Error Message"
}
Webhooks allow you to subscribe to events that happen in SoftLedger. When one of those events is triggered, we'll send an HTTP POST payload to the webhook's configured URL.
Webhooks are sent with an 'at-least' once method. We recommend utilizing the uuid
field to ensure that you do not process the same webhook multiple times.
Webhook endpoints should be respond immediately with a http 200 status code. The system that receives the webhook should then process the webhook asynchronously and not wait for its work to complete prior to responding to the webhook request. If the endpoint is slow to respond or returns a non 200 status code, the webhook endpoint will be blacklisted by SoftLedger. Please contact support@softledger.com
to resolve the issue if this occurs.
The webhook payload will be sent as a JSON object with the following structure:
{
"uuid": "Unique identifier for the webhook",
"date": "ISO timestamp for when the webhook was triggered",
"tenantId": "The tenantUUID that triggered the webhook",
"objectType": "The type of object that triggered the webhook",
"objectId": "The _id of the object that triggered the webhook",
"action": "The action that triggered the webhook",
}
Each endpoint below specifies what webhooks are sent for each request. The list will contain the objectType
and action
that will be sent in the webhook payload.
Returns a list of webhooks in ascending order by uri
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "uri": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
creates a new webhook
JSON body to create new Webhook
uri required | string |
{- "uri": "string"
}
{- "_id": 0,
- "uri": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
label | ✅ | ✅ |
line1 | ✅ | ❌ |
line2 | ✅ | ❌ |
city | ✅ | ❌ |
state | ✅ | ❌ |
zip | ✅ | ❌ |
country | ✅ | ❌ |
isDefault | ✅ | ❌ |
isVerified | ✅ | ❌ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
CustomerId | ✅ | ❌ |
VendorId | ✅ | ❌ |
Customer.name | ❌ | ✅ |
Vendor.name | ❌ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
order | string Default: "label:ASC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "isVerified": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "CustomerId": 0,
- "VendorId": 0,
- "Customer": {
- "name": "string"
}, - "Vendor": {
- "name": "string"
}
}
]
}
Creates a new address
JSON body to create new Address
Only one of [CustomerId, VendorId, Customer.name, Vendor.name]
can be set
label required | string |
line1 | string |
line2 | string |
city | string |
state | string |
zip | string |
country | string |
isDefault | boolean Set this as the default address for the Customer or Vendor |
CustomerId | integer Ref: Customer._id |
VendorId | integer Ref: Vendor._id |
object | |
object |
{- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "CustomerId": 0,
- "VendorId": 0,
- "Customer": {
- "name": "string"
}, - "Vendor": {
- "name": "string"
}
}
{- "_id": 0,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "isVerified": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "CustomerId": 0,
- "VendorId": 0
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
{- "count": "string",
- "estimate": true
}
Update One Address
id required | string Address Id |
JSON body containing key and values to update
label | string |
line1 | string |
line2 | string |
city | string |
state | string |
zip | string |
country | string |
isDefault | boolean Set this as the default address for the Customer or Vendor |
CustomerId | integer Ref: Customer._id |
VendorId | integer Ref: Vendor._id |
object | |
object |
{- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "CustomerId": 0,
- "VendorId": 0,
- "Customer": {
- "name": "string"
}, - "Vendor": {
- "name": "string"
}
}
{- "_id": 0,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "isVerified": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "CustomerId": 0,
- "VendorId": 0
}
{- "_id": 0,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string",
- "isDefault": true,
- "isVerified": true,
- "CustomerId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "VendorId": 0,
- "Customer": {
- "name": "string"
}, - "Vendor": {
- "name": "string"
}
}
[- {
- "client_id": "string",
- "name": "string",
- "active": true,
- "permissions": [
- "string"
], - "audience": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
Creates a new api key
JSON body to create new api key
Ensure to record the returned client_secret as it will not be visible again.
name required | string >= 5 characters |
permissions | Array of strings |
{- "name": "string",
- "permissions": [
- "string"
]
}
{- "client_id": "string",
- "client_secret": "string",
- "audience": "string",
- "name": "string",
- "permissions": [
- "string"
], - "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Set the permissions for an api key
client_id required | string Api Key client_id |
List of full permissions to set for api key..
This list will replace the existing permission list.
permissions required | Array of strings Must have at least one permission. Duplicates ignored |
{- "permissions": [
- "string"
]
}
Returns a list of audit logs in descending order by date
Field | Filterable |
---|---|
_id | ✅ |
date | ✅ |
object | ❌ |
objectType | ✅ |
objectId | ✅ |
message | ✅ |
user | ❌ |
api | ❌ |
userType | ✅ |
userLabel | ✅ |
where | string JSON Key:Value object to filter results on |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": "string",
- "date": "2019-08-24T14:15:22Z",
- "object": { },
- "objectType": "string",
- "objectId": "string",
- "message": "string",
- "user": "string",
- "api": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "userType": "string",
- "userLabel": "string"
}
]
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
status | ✅ | ✅ |
referenceNumber | ✅ | ✅ |
postedDate | ✅ | ✅ |
paymentDate | ✅ | ✅ |
currency | ✅ | ✅ |
amount | ✅ | ✅ |
LocationId | ✅ | ❌ |
ClearingAccountId | ✅ | ❌ |
CashAccountId | ✅ | ❌ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
order | string Default: "referenceNumber:DESC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "status": "created",
- "referenceNumber": "string",
- "postedDate": "2019-08-24",
- "paymentDate": "2019-08-24",
- "memo": "string",
- "currency": "string",
- "amount": "string",
- "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ClearingAccountId": 0,
- "ClearingAccount": {
- "name": "string",
- "number": "string"
}, - "CashAccountId": 0,
- "CashAccount": {
- "name": "string",
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com"
}
]
}
creates a new Batch Payment
JSON body to create new Batch Payment
Created batch payments will be created in created
status unless the setting for Auto-Approve (AP) is enabled, then the status will be approved
paymentDate required | string <date> |
referenceNumber required | string |
CashAccountId required | integer Ref: LedgerAccount._id |
ClearingAccountId required | integer Ref: LedgerAccount._id |
required | Array of objects All bills require, "_id" and "amount". Bills must be from the same location and be in the same currency. |
postedDate | string <date> |
memo | string |
{- "paymentDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "referenceNumber": "string",
- "memo": "string",
- "CashAccountId": 0,
- "ClearingAccountId": 0,
- "Bills": [
- {
- "_id": 0,
- "amount": "string",
- "memo": "string"
}
]
}
{- "_id": 0,
- "referenceNumber": "string",
- "status": "created",
- "amount": "string",
- "paymentDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "memo": "string",
- "CashAccountId": 0,
- "ClearingAccountId": 0,
- "LocationId": 0,
- "currency": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
This endpoint returns bills for the specified batch payment. The parameters of this endpoint are the same as for Bills Search
id required | string BatchPayment._id |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "paymentAmount": "string",
- "paymentMemo": "string",
- "_id": 0,
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid",
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com",
- "reference": "string",
- "currency": "string",
- "amount": "string",
- "dueAmount": "string",
- "customFields": { },
- "SystemJobId": "string",
- "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string",
- "name": "string"
}, - "VendorId": 0,
- "Vendor": {
- "name": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "name": "string",
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
The same filters as Search can be used here.
id required | string BatchPayment._id |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
credit | boolean Default: false If true, only returns AP Credits i.e. bills with a negative amount. If false or not specified, only returns bills with a positive amount. |
{- "count": "string",
- "estimate": true
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
{- "count": "string",
- "estimate": true
}
Get one Batch Payment
id required | string BatchPayment._id |
{- "_id": 0,
- "status": "created",
- "referenceNumber": "string",
- "postedDate": "2019-08-24",
- "paymentDate": "2019-08-24",
- "memo": "string",
- "currency": "string",
- "amount": "string",
- "VendorIds": [
- 0
], - "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ClearingAccountId": 0,
- "ClearingAccount": {
- "name": "string",
- "number": "string"
}, - "CashAccountId": 0,
- "CashAccount": {
- "name": "string",
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com"
}
This endpoint returns payments for the specified batch payment. The parameters of this endpoint are the same as for Payments Search
id required | string BatchPayment._id |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "paymentAmount": "string",
- "paymentMemo": "string",
- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "externalId": "string",
- "externalCheckId": "string",
- "externalCheckBankId": "string",
- "type": "manual",
- "checkNumber": "string",
- "number": "string",
- "status": "created",
- "amount": "string",
- "paymentDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "memo": "string",
- "notes": "string",
- "currency": "string",
- "BillId": 0,
- "VendorCreditId": 0,
- "LedgerAccountId": 0,
- "CashReceiptId": 0,
- "AddressId": 0,
- "LocationId": 0,
- "InvoiceId": 0,
- "VendorId": 0,
- "CustomerId": 0,
- "BatchPaymentId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "Address": {
- "isDefault": true,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string"
}, - "Vendor": {
- "id": "string",
- "name": "string",
- "email": "user@example.com",
- "nameOnCheck": "string"
}, - "Bill": {
- "invoiceNumber": "string",
- "description": "string"
}, - "Invoice": {
- "number": "string",
- "reference": "string"
}, - "Customer": {
- "id": "string",
- "name": "string",
- "email": "user@example.com"
}, - "VendorCredit": {
- "number": "string"
}, - "CashReceipt": {
- "number": "string"
}, - "Location": {
- "id": "string",
- "name": "string"
}, - "LedgerAccount": {
- "name": "string",
- "number": "string"
}, - "BatchPayment": {
- "referenceNumber": "string"
}
}
]
}
]
}
The same filters as Search can be used here.
id required | string BatchPayment._id |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
type | string Enum: "ap" "ar" Filter by AP or AR payments If not specified, all payment types will be returned |
{- "count": "string",
- "estimate": true
}
Void Batch Payment
id required | string BatchPayment._id |
JSON body containing void details. Can only void a batch in "approved" status
description | string |
voidDate | string <date> Date of the void. Defaults to today. Must be today or earlier. |
{- "description": "string",
- "voidDate": "2019-08-24"
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
invoiceNumber | ✅ | ✅ |
externalId | ✅ | ✅ |
description | ✅ | ✅ |
invoiceDate | ✅ | ✅ |
postedDate | ✅ | ✅ |
dueDate | ✅ | ✅ |
dueAmount | ✅ | ✅ |
amount | ✅ | ✅ |
VendorId | ✅ | ❌ |
Vendor.name | ❌ | ✅ |
customFields | ✅ | ❌ |
currency | ✅ | ✅ |
LocationId | ✅ | ❌ |
ICLocationId | ✅ | ❌ |
status | ✅ | ✅ |
approvalStatus | ✅ | ✅ |
paymentStatus | ✅ | ✅ |
PurchaseOrderId | ✅ | ❌ |
APAccountId | ✅ | ❌ |
SystemJobId | ✅ | ❌ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
order | string Default: "number:ASC" Order to return results in. ex "date:desc" |
credit | boolean Default: false If true, only returns AP Credits i.e. bills with a negative amount. If false or not specified, only returns bills with a positive amount. |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid",
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com",
- "reference": "string",
- "currency": "string",
- "amount": "string",
- "dueAmount": "string",
- "customFields": { },
- "SystemJobId": "string",
- "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string",
- "name": "string"
}, - "VendorId": 0,
- "Vendor": {
- "name": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "name": "string",
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
creates a new Bill
JSON body to create new Bill
One of [Vendor.name, VendorId]
is Required
One of [Location.id, LocationId]
is Required
One of [APAccount.number, APAccountId]
is Required
invoiceDate required | string <date> | |||||||||||||||||||||||||||||||||||
postingDate required | string <date> | |||||||||||||||||||||||||||||||||||
VendorId required | integer Ref: Vendor._id | |||||||||||||||||||||||||||||||||||
LocationId required | integer Ref: Location._id | |||||||||||||||||||||||||||||||||||
APAccountId required | integer Ref: LedgerAccount._id | |||||||||||||||||||||||||||||||||||
currency required | string <ISO4217 3 Char Code> | |||||||||||||||||||||||||||||||||||
externalId | string | |||||||||||||||||||||||||||||||||||
dueDate | string <date> | |||||||||||||||||||||||||||||||||||
notes | string | |||||||||||||||||||||||||||||||||||
attachments | Array of strings <uri> [ items <uri > ] Links to any attached documents | |||||||||||||||||||||||||||||||||||
description | string | |||||||||||||||||||||||||||||||||||
customFields | object Default: {} Key -> Value hash of custom fields, must be defined via the UI to show up in the UI | |||||||||||||||||||||||||||||||||||
object | ||||||||||||||||||||||||||||||||||||
ICLocationId | integer Ref: Location._id | |||||||||||||||||||||||||||||||||||
object | ||||||||||||||||||||||||||||||||||||
object | ||||||||||||||||||||||||||||||||||||
object | ||||||||||||||||||||||||||||||||||||
PurchaseOrderId | integer Ref: PurchaseOrder._id | |||||||||||||||||||||||||||||||||||
object | ||||||||||||||||||||||||||||||||||||
Array of objects Handling of LedgerAccountId:
** If LedgerAccountId is set, it will override the LedgerAccount.number ** Tax Logic:
|
{- "externalId": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "description": "string",
- "currency": "string",
- "customFields": { },
- "LocationId": 0,
- "Location": {
- "id": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string"
}, - "VendorId": 0,
- "Vendor": {
- "name": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}, - "BillLineItems": [
- {
- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "TaxCode": {
- "code": "string"
}, - "ItemId": 0,
- "Item": {
- "number": "string"
}, - "CostCenterId": 0,
- "CostCenter": {
- "id": "string"
}, - "JobId": 0,
- "Job": {
- "number": "string"
}, - "ProductId": 0,
- "Product": {
- "id": "string"
}, - "Custom1Id": 0,
- "Custom1": {
- "id": "string"
}, - "Custom2Id": 0,
- "Custom2": {
- "id": "string"
}, - "Custom3Id": 0,
- "Custom3": {
- "id": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string"
}
}
]
}
{- "_id": 0,
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "description": "string",
- "currency": "string",
- "amount": "string",
- "customFields": { },
- "LocationId": 0,
- "ICLocationId": 0,
- "VendorId": 0,
- "APAccountId": 0,
- "PurchaseOrderId": 0,
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid"
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
idx | ✅ | ✅ |
description | ✅ | ✅ |
amount | ✅ | ✅ |
quantity | ✅ | ✅ |
taxAmount | ✅ | ✅ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
BillId | ✅ | ❌ |
Bill.invoiceNumber | ✅ | ✅ |
Bill.status | ✅ | ✅ |
Bill.approvalStatus | ✅ | ✅ |
Bill.paymentStatus | ✅ | ✅ |
Bill.currency | ✅ | ✅ |
Bill.description | ✅ | ✅ |
Bill.invoiceDate | ✅ | ✅ |
Bill.postingDate | ✅ | ✅ |
Bill.dueDate | ✅ | ✅ |
Bill.customFields | ✅ | ❌ |
Bill.createdAt | ✅ | ✅ |
Bill.updatedAt | ✅ | ✅ |
Bill.VendorId | ✅ | ❌ |
Bill.APAccountId | ✅ | ❌ |
Bill.LocationId | ✅ | ❌ |
Bill.ICLocationId | ✅ | ❌ |
APAccount.number | ❌ | ✅ |
BillAccount.number | ❌ | ✅ |
LedgerAccountId | ✅ | ❌ |
LedgerAccount.number | ❌ | ✅ |
Vendor.name | ❌ | ✅ |
Vendor.is1099 | ✅ | ✅ |
Location.name | ❌ | ✅ |
ICLocation.name | ❌ | ✅ |
TaxCodeId | ✅ | ❌ |
TaxCode.code | ❌ | ✅ |
ItemId | ✅ | ❌ |
Item.name | ❌ | ✅ |
Item.salePrice | ✅ | ✅ |
Item.purchasePrice | ✅ | ✅ |
Custom1Id | ✅ | ❌ |
Custom2Id | ✅ | ❌ |
Custom3Id | ✅ | ❌ |
CostCenterId | ✅ | ❌ |
CostCenter.id | ❌ | ✅ |
ProductId | ✅ | ❌ |
Product.id | ❌ | ✅ |
JobId | ✅ | ❌ |
Job.number | ❌ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
order | string Default: "Bill.invoiceNumber:ASC" Order to return results in. ex "date:desc" |
credit | boolean Filter by credit status of the Bill. Operates as follows:
|
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "idx": 0,
- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "total": "string",
- "BillId": 0,
- "Bill": {
- "invoiceNumber": "string",
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid",
- "currency": "string",
- "description": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "customFields": { },
- "createdAt": "2019-08-24",
- "updatedAt": "2019-08-24",
- "APAccountId": 0,
- "VendorId": 0,
- "LocationId": 0,
- "ICLocationId": 0
}, - "APAccount": {
- "name": "string",
- "number": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "name": "string",
- "number": "string"
}, - "Vendor": {
- "id": "string",
- "name": "string",
- "is1099": true
}, - "Location": {
- "id": "string",
- "name": "string"
}, - "ICLocation": {
- "id": "string",
- "name": "string"
}, - "TaxCodeId": 0,
- "TaxCode": {
- "code": "string"
}, - "ItemId": 0,
- "Item": {
- "name": "string",
- "number": "string",
- "sku": "string",
- "salePrice": "string",
- "purchasePrice": "string",
- "BillAccount": {
- "name": "string",
- "number": "string"
}
}, - "CostCenterId": 0,
- "CostCenter": {
- "id": "string",
- "name": "string"
}, - "JobId": 0,
- "Job": {
- "number": "string",
- "name": "string"
}, - "ProductId": 0,
- "Product": {
- "id": "string",
- "name": "string"
}, - "Custom1Id": 0,
- "Custom1": {
- "id": "string",
- "name": "string"
}, - "Custom2Id": 0,
- "Custom2": {
- "id": "string",
- "name": "string"
}, - "Custom3Id": 0,
- "Custom3": {
- "id": "string",
- "name": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
This endpoint returns unpaid bills/credits.
The parameters of this endpoint are the same as for Bills Search
The following parameters are also supported in addition to the ones listed in Bills Search
filterCurrency | string Provide this to only show unpaid bills in the specified currency. This parameter is optional. |
filterLocationId | string <number> Ref: "Location"._id Provide this to only show unpaid bills from the specified location. Bills from child locations of the provided location are not included. This parameter is optional. |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid",
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com",
- "reference": "string",
- "currency": "string",
- "amount": "string",
- "dueAmount": "string",
- "customFields": { },
- "SystemJobId": "string",
- "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string",
- "name": "string"
}, - "VendorId": 0,
- "Vendor": {
- "name": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "name": "string",
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
credit | boolean Default: false If true, only returns AP Credits i.e. bills with a negative amount. If false or not specified, only returns bills with a positive amount. |
{- "count": "string",
- "estimate": true
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
credit | boolean Filter by credit status of the Bill. Operates as follows:
|
{- "count": "string",
- "estimate": true
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
filterCurrency | string Provide this to only show unpaid bills in the specified currency. This parameter is optional. |
filterLocationId | string <number> Ref: "Location"._id Provide this to only show unpaid bills from the specified location. Bills from child locations of the provided location are not included. This parameter is optional. |
{- "count": "string",
- "estimate": true
}
creates a new Bill Line
id required | string Bill._id |
amount required | string <number> |
quantity required | string <number> |
description | string Required if ItemId is not set |
taxAmount | string <number> |
TaxCodeId | integer Ref: TaxCode._id |
object | |
ItemId | integer Ref: Item._id |
object | |
CostCenterId | integer Ref: Cost Center._id |
object | |
JobId | integer Ref: Job._id |
object | |
ProductId | integer Ref: Product._id |
object | |
Custom1Id | integer Ref: Custom1._id |
object | |
Custom2Id | integer Ref: Custom2._id |
object | |
Custom3Id | integer Ref: Custom3._id |
object | |
LedgerAccountId | integer Ref: LedgerAccount._id |
object |
{- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "TaxCode": {
- "code": "string"
}, - "ItemId": 0,
- "Item": {
- "number": "string"
}, - "CostCenterId": 0,
- "CostCenter": {
- "id": "string"
}, - "JobId": 0,
- "Job": {
- "id": "string"
}, - "ProductId": 0,
- "Product": {
- "id": "string"
}, - "Custom1Id": 0,
- "Custom1": {
- "id": "string"
}, - "Custom2Id": 0,
- "Custom2": {
- "id": "string"
}, - "Custom3Id": 0,
- "Custom3": {
- "id": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string"
}
}
{- "_id": 0,
- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "ItemId": 0,
- "CostCenterId": 0,
- "JobId": 0,
- "ProductId": 0,
- "Custom1Id": 0,
- "Custom2Id": 0,
- "Custom3Id": 0,
- "LedgerAccountId": 0
}
{- "_id": 0,
- "status": "created",
- "approvalStatus": "unapproved",
- "paymentStatus": "unpaid",
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "approved_on": "2019-08-24",
- "approved_name": "string",
- "approved_email": "user@example.com",
- "description": "string",
- "currency": "string",
- "amount": "string",
- "dueAmount": "string",
- "customFields": { },
- "SystemJobId": "string",
- "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string",
- "name": "string"
}, - "VendorId": 0,
- "Vendor": {
- "id": "string",
- "name": "string",
- "email": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "name": "string",
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "BillLineItems": [
- {
- "_id": 0,
- "idx": 0,
- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "TaxCode": {
- "code": "string",
- "LedgerAccountId": 0
}, - "ItemId": 0,
- "Item": {
- "name": "string",
- "number": "string",
- "sku": "string",
- "salePrice": "string",
- "BillAccountId": 0,
- "BillAccount": {
- "name": "string",
- "number": 0
}
}, - "CostCenterId": 0,
- "CostCenter": {
- "id": "string",
- "name": "string"
}, - "JobId": 0,
- "Job": {
- "number": "string",
- "name": "string"
}, - "ProductId": 0,
- "Product": {
- "id": "string",
- "name": "string"
}, - "Custom1Id": 0,
- "Custom1": {
- "id": "string",
- "name": "string"
}, - "Custom2Id": 0,
- "Custom2": {
- "id": "string",
- "name": "string"
}, - "Custom3Id": 0,
- "Custom3": {
- "id": "string",
- "name": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "name": "string",
- "number": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
Update One Bill
id required | string Bill Id |
JSON body containing key and values to update
Can only update an bill with "created" status
externalId | string |
invoiceDate | string <date> |
postingDate | string <date> |
dueDate | string <date> |
notes | string |
attachments | Array of strings <uri> [ items <uri > ] Links to any attached documents |
description | string |
currency | string <ISO4217 3 Char Code> |
customFields | object Default: {} Key -> Value hash of custom fields, must be defined via the UI to show up in the UI |
LocationId | integer Ref: Location._id |
object | |
ICLocationId | integer Ref: Location._id |
object | |
VendorId | integer Ref: Vendor._id |
object | |
APAccountId | integer Ref: LedgerAccount._id |
object | |
PurchaseOrderId | integer Ref: PurchaseOrder._id |
object |
{- "externalId": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "description": "string",
- "currency": "string",
- "customFields": { },
- "LocationId": 0,
- "Location": {
- "id": "string"
}, - "ICLocationId": 0,
- "ICLocation": {
- "id": "string"
}, - "VendorId": 0,
- "Vendor": {
- "name": "string"
}, - "APAccountId": 0,
- "APAccount": {
- "number": "string"
}, - "PurchaseOrderId": 0,
- "PurchaseOrder": {
- "number": "string"
}
}
{- "_id": 0,
- "externalId": "string",
- "invoiceNumber": "string",
- "invoiceDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "dueDate": "2019-08-24",
- "notes": "string",
- "description": "string",
- "amount": "string",
- "dueAmount": "string",
- "currency": "string",
- "customFields": { },
- "LocationId": 0,
- "ICLocationId": 0,
- "VendorId": 0,
- "APAccountId": 0,
- "PurchaseOrderId": 0
}
Update a Bill Line
id required | string BillLineItem._id |
description | string Required if ItemId is not set |
amount | string <number> |
quantity | string <number> |
taxAmount | string <number> |
TaxCodeId | integer Ref: TaxCode._id |
object | |
ItemId | integer Ref: Item._id |
object | |
CostCenterId | integer Ref: Cost Center._id |
object | |
JobId | integer Ref: Job._id |
object | |
ProductId | integer Ref: Product._id |
object | |
Custom1Id | integer Ref: Custom1._id |
object | |
Custom2Id | integer Ref: Custom2._id |
object | |
Custom3Id | integer Ref: Custom3._id |
object | |
LedgerAccountId | integer Ref: LedgerAccount._id |
object |
{- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "TaxCode": {
- "code": "string"
}, - "ItemId": 0,
- "Item": {
- "number": "string"
}, - "CostCenterId": 0,
- "CostCenter": {
- "id": "string"
}, - "JobId": 0,
- "Job": {
- "id": "string"
}, - "ProductId": 0,
- "Product": {
- "id": "string"
}, - "Custom1Id": 0,
- "Custom1": {
- "id": "string"
}, - "Custom2Id": 0,
- "Custom2": {
- "id": "string"
}, - "Custom3Id": 0,
- "Custom3": {
- "id": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string"
}
}
{- "_id": 0,
- "description": "string",
- "amount": "string",
- "quantity": "string",
- "taxAmount": "string",
- "TaxCodeId": 0,
- "ItemId": 0,
- "CostCenterId": 0,
- "JobId": 0,
- "ProductId": 0,
- "Custom1Id": 0,
- "Custom2Id": 0,
- "Custom3Id": 0,
- "LedgerAccountId": 0
}
This endpoint returns only payments for the specified bill. The response and parameters of this endpoint are the same as for Payments Search
id required | string Bill._id |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "externalId": "string",
- "externalCheckId": "string",
- "externalCheckBankId": "string",
- "type": "manual",
- "checkNumber": "string",
- "number": "string",
- "status": "created",
- "amount": "string",
- "paymentDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "memo": "string",
- "notes": "string",
- "currency": "string",
- "BillId": 0,
- "VendorCreditId": 0,
- "LedgerAccountId": 0,
- "CashReceiptId": 0,
- "AddressId": 0,
- "LocationId": 0,
- "InvoiceId": 0,
- "VendorId": 0,
- "CustomerId": 0,
- "BatchPaymentId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "Address": {
- "isDefault": true,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string"
}, - "Vendor": {
- "id": "string",
- "name": "string",
- "email": "user@example.com",
- "nameOnCheck": "string"
}, - "Bill": {
- "invoiceNumber": "string",
- "description": "string"
}, - "Invoice": {
- "number": "string",
- "reference": "string"
}, - "Customer": {
- "id": "string",
- "name": "string",
- "email": "user@example.com"
}, - "VendorCredit": {
- "number": "string"
}, - "CashReceipt": {
- "number": "string"
}, - "Location": {
- "id": "string",
- "name": "string"
}, - "LedgerAccount": {
- "name": "string",
- "number": "string"
}, - "BatchPayment": {
- "referenceNumber": "string"
}
}
]
}
Void Bill
id required | string Bill._id |
Bills with linked payments cannot be voided
Bills in created or voided status cannot be voided
description | string |
postingDate | string <date> |
{- "description": "string",
- "postingDate": "2019-08-24"
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
number | ✅ | ✅ |
externalId | ✅ | ✅ |
type | ✅ | ✅ |
amount | ✅ | ✅ |
unused | ✅ | ✅ |
description | ✅ | ✅ |
currency | ✅ | ✅ |
receiveDate | ✅ | ✅ |
postingDate | ✅ | ✅ |
status | ✅ | ✅ |
applyToInvoices | ✅ | ❌ |
CustomerId | ✅ | ❌ |
LedgerAccountId | ✅ | ❌ |
UnappliedCashAccountId | ✅ | ❌ |
LocationId | ✅ | ❌ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
order | string Default: "number:ASC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "unused": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "status": "created",
- "applyToInvoices": true,
- "CustomerId": 0,
- "Customer": {
- "id": "string",
- "name": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string",
- "name": "string"
}, - "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "UnappliedCashAccountId": 0,
- "UnappliedCashAccount": {
- "number": "string",
- "name": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}
Creates a new Cash Receipt
JSON body to create new Cash Receipt
Only one of [Customer.id, CustomerId]
can be set
Only one of [LedgerAccount.number, LedgerAccountId]
can be set
Only one of [Location.id, LocationId]
can be set
Only one of [UnappliedCashAccount.number, UnappliedCashAccountId]
can be set
number required | string |
type required | string Enum: "charge" "check" "ach" "wire" "cash" |
amount required | string <number> Must be > 0 |
currency required | string Ref: Currency.code |
receiveDate required | string <date> |
postingDate required | string <date> |
externalId | string |
description | string |
applyToInvoices | boolean Default: false |
attachments | Array of strings <uri> [ items <uri > ] Links to any attached documents |
CustomerId | number Ref: Customer._id |
object | |
LedgerAccountId | number Ref: LedgerAccount._id |
object | |
LocationId | number Ref: Location._id |
object | |
UnappliedCashAccountId | number Ref: LedgerAccount._id |
object |
{- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "applyToInvoices": false,
- "CustomerId": 0,
- "Customer": {
- "id": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string"
}, - "LocationId": 0,
- "Location": {
- "id": "string"
}, - "UnappliedCashAccountId": 0,
- "UnappliedCashAccount": {
- "number": "string"
}
}
{- "_id": 0,
- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "unused": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "status": "created",
- "applyToInvoices": true,
- "CustomerId": 0,
- "LedgerAccountId": 0,
- "LocationId": 0,
- "UnappliedCashAccountId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
The same filters as Search can be used here.
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
LocationId | number Will include items from this Location and its children Filters on LocationId can further limit data. |
{- "count": "string",
- "estimate": true
}
Get one Cash Receipt
id required | string Cash Receipt Id |
{- "_id": 0,
- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "unused": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "status": "created",
- "applyToInvoices": true,
- "CustomerId": 0,
- "Customer": {
- "id": "string",
- "name": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string",
- "name": "string"
}, - "LocationId": 0,
- "Location": {
- "id": "string",
- "name": "string"
}, - "UnappliedCashAccountId": 0,
- "UnappliedCashAccount": {
- "number": "string",
- "name": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Update One Cash Receipt
id required | string Cash Receipt Id |
JSON body containing key and values to update
Cannot update a Cash Receipt if an unapplied cash journal entry was created
Only one of [Customer.id, CustomerId]
can be set
Only one of [LedgerAccount.number, LedgerAccountId]
can be set
Only one of [Location.id, LocationId]
can be set
number | string |
externalId | string |
type | string Enum: "charge" "check" "ach" "wire" "cash" |
amount | string <number> Must be > 0 |
description | string |
currency | string Ref: Currency.code |
receiveDate | string <date> |
postingDate | string <date> |
attachments | Array of strings <uri> [ items <uri > ] Links to any attached documents |
CustomerId | number Ref: Customer._id |
object | |
LedgerAccountId | number Ref: LedgerAccount._id |
object | |
LocationId | number Ref: Location._id |
object |
{- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "CustomerId": 0,
- "Customer": {
- "id": "string"
}, - "LedgerAccountId": 0,
- "LedgerAccount": {
- "number": "string"
}, - "LocationId": 0,
- "Location": {
- "id": "string"
}
}
{- "_id": 0,
- "number": "string",
- "externalId": "string",
- "type": "charge",
- "amount": "string",
- "unused": "string",
- "description": "string",
- "currency": "string",
- "receiveDate": "2019-08-24",
- "postingDate": "2019-08-24",
- "status": "created",
- "applyToInvoices": true,
- "CustomerId": 0,
- "LedgerAccountId": 0,
- "LocationId": 0,
- "UnappliedCashAccountId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
This endpoint returns only payments for the specified cash receipt. The response and parameters of this endpoint are the same as for Payments Search
id required | string CashReceipt._id |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "externalId": "string",
- "externalCheckId": "string",
- "externalCheckBankId": "string",
- "type": "manual",
- "checkNumber": "string",
- "number": "string",
- "status": "created",
- "amount": "string",
- "paymentDate": "2019-08-24",
- "postedDate": "2019-08-24",
- "memo": "string",
- "notes": "string",
- "currency": "string",
- "BillId": 0,
- "VendorCreditId": 0,
- "LedgerAccountId": 0,
- "CashReceiptId": 0,
- "AddressId": 0,
- "LocationId": 0,
- "InvoiceId": 0,
- "VendorId": 0,
- "CustomerId": 0,
- "BatchPaymentId": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "Address": {
- "isDefault": true,
- "label": "string",
- "line1": "string",
- "line2": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country": "string"
}, - "Vendor": {
- "id": "string",
- "name": "string",
- "email": "user@example.com",
- "nameOnCheck": "string"
}, - "Bill": {
- "invoiceNumber": "string",
- "description": "string"
}, - "Invoice": {
- "number": "string",
- "reference": "string"
}, - "Customer": {
- "id": "string",
- "name": "string",
- "email": "user@example.com"
}, - "VendorCredit": {
- "number": "string"
}, - "CashReceipt": {
- "number": "string"
}, - "Location": {
- "id": "string",
- "name": "string"
}, - "LedgerAccount": {
- "name": "string",
- "number": "string"
}, - "BatchPayment": {
- "referenceNumber": "string"
}
}
]
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
symbol | ✅ | ✅ |
name | ✅ | ✅ |
impair | ✅ | ✅ |
hidden | ✅ | ✅ |
isFiat | ✅ | ✅ |
rateSymbol | ✅ | ✅ |
rateId | ❌ | ❌ |
rateSource | ❌ | ❌ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
order | string Default: "symbol:ASC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "symbol": "string",
- "name": "string",
- "impair": true,
- "hidden": true,
- "isFiat": true,
- "rateSymbol": "string",
- "rateId": "string",
- "rateSource": "nomics",
- "customFields": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "AssetAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "FeeAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "LTGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "STGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}
}
]
}
Creates a new Coin
JSON body to create new Coin
symbol required | string |
name required | string |
impair | boolean Default: false |
isFiat | boolean Default: false If set true
|
rateId | string Required if coin will use automatic rates |
customFields | object Key->Value hash of custom field names and values |
{- "symbol": "string",
- "name": "string",
- "impair": false,
- "isFiat": false,
- "rateId": "string",
- "customFields": { }
}
{- "_id": 0,
- "symbol": "string",
- "name": "string",
- "impair": true,
- "hidden": true,
- "isFiat": true,
- "rateSymbol": "string",
- "rateId": "string",
- "rateSource": "coinmarketcap",
- "customFields": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "AssetAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "FeeAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "LTGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "STGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}
}
List of Coin Crypto Transactions. Not orderable.
Field | Filterable |
---|---|
_id | ✅ |
CostCenterId | ✅ |
createdAt | ✅ |
currency | ✅ |
Custom1Id | ✅ |
Custom2Id | ✅ |
Custom3Id | ✅ |
CustomerId | ✅ |
externalId | ✅ |
externalSource | ✅ |
fCoinId | ✅ |
fPrice | ✅ |
fQty | ✅ |
fWalletId | ✅ |
isJournalStale | ✅ |
JobId | ✅ |
JournalId | ✅ |
Journal.number | ✅ |
LedgerAccountId | ✅ |
locked | ✅ |
notes | ✅ |
ProductId | ✅ |
rCoinId | ✅ |
reference | ✅ |
rPrice | ✅ |
rQty | ✅ |
rWalletId | ✅ |
sCoinId | ✅ |
sPrice | ✅ |
sQty | ✅ |
sWalletId | ✅ |
SystemJobId | ✅ |
txHash | ✅ |
type | ✅ |
updatedAt | ✅ |
VendorId | ✅ |
CoinId required | string Coin._id |
walletId | string Wallet._id Limits results to transactions that involve the specified wallet |
LocationId | string Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set. |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": "string",
- "date": "2019-08-24T14:15:22Z",
- "type": "deposit",
- "txHash": "string",
- "currency": "string",
- "currencyRate": "1",
- "reference": "string",
- "notes": "string",
- "sCostBasis": 0,
- "fCostBasis": 0,
- "externalSource": "string",
- "isJournalStale": true,
- "SystemJobId": "string",
- "locked": true,
- "qtyPicked": "1",
- "error": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "rCoinId": "string",
- "rWalletId": "string",
- "rQty": "1",
- "rPrice": "1",
- "sCoinId": "string",
- "sWalletId": "string",
- "sQty": "1",
- "sPrice": "1",
- "fCoinId": "string",
- "fWalletId": "string",
- "fPrice": "1",
- "JournalId": 0,
- "LedgerAccountId": 0,
- "CustomerId": 0,
- "VendorId": 0,
- "CostCenterId": 0,
- "ProductId": 0,
- "JobId": 0,
- "rCoin": {
- "symbol": "string"
}, - "rWallet": {
- "name": "string"
}, - "sCoin": {
- "symbol": "string"
}, - "sWallet": {
- "name": "string"
}, - "fCoin": {
- "symbol": "string"
}, - "fWallet": {
- "name": "string"
}, - "Journal": {
- "number": 0
}, - "LedgerAccount": {
- "number": 0,
- "name": "string"
}, - "Customer": {
- "id": "string",
- "name": "string"
}, - "Vendor": {
- "id": "string",
- "name": "string"
}, - "CostCenter": {
- "id": "string",
- "name": "string"
}, - "Product": {
- "id": "string",
- "name": "string"
}, - "Job": {
- "number": "string",
- "name": "string"
}, - "balance": "string"
}
]
}
List of Coins with balance details by wallet
Field | Filterable | Orderable |
---|---|---|
_id | ✅ | ✅ |
name | ✅ | ✅ |
rate | ❌ | ❌ |
value | ❌ | ❌ |
gainLoss | ❌ | ❌ |
isFiat | ❌ | ❌ |
rateSymbol | ❌ | ❌ |
custom | ❌ | ❌ |
impair | ❌ | ❌ |
quantity | ❌ | ❌ |
totalCostBasis | ❌ | ❌ |
CoinId required | string Coin._id |
hideZero | boolean exclude zero balance coins |
date | string <date-time> date to filter by. defaults to "now" ISO DateTime |
LocationId | string Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set. |
consolidated | boolean True = match on the Location & its children. False = match only wallets in this location. |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
order | string Default: "name:ASC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": "string",
- "name": "string",
- "quantity": "1",
- "value": "1",
- "gainLoss": "1",
- "totalCostBasis": "1",
- "rate": {
- "PRICE": "1",
- "CHANGEPCT24HOUR": "1"
}
}
]
}
Returns a count of transactions based on the passed filters for a single coin. If a significantly large amount of transactions, it is possible an estimated value will be returned.
See /crypto-transactions/coin/search for filterable fields.
CoinId required | string Coin._id value |
LocationId | string Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set. |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
{- "count": 0,
- "estimate": true
}
{- "_id": "string",
- "symbol": "string",
- "name": "string",
- "impair": true,
- "hidden": true,
- "isFiat": true,
- "rateSymbol": "string",
- "rateId": "string",
- "rateSource": "nomics",
- "customFields": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "AssetAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "FeeAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "LTGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}, - "STGainLossAccount": {
- "_id": 0,
- "number": "string",
- "name": "string"
}
}
Update One Coin
id required | string Coin Id |
JSON body containing key and values to update
name | string |
impair | boolean |
hidden | boolean |
rateId | string |
rateSource | string Value: "coinmarketcap" Required if rateId is set |
customFields | object Key->Value hash of custom field names and values |
{- "name": "string",
- "impair": true,
- "hidden": true,
- "rateId": "string",
- "rateSource": "coinmarketcap",
- "customFields": { }
}
{- "_id": 0,
- "symbol": "string",
- "name": "string",
- "impair": true,
- "hidden": true,
- "isFiat": true,
- "rateSymbol": "string",
- "rateId": "string",
- "rateSource": "coinmarketcap",
- "customFields": { },
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
Returns the 100 coins of the list of coins that SoftLedger can provide automatic rates for ordered by rank ascending. To see more, filter by symbol or name.
filter | string Case Insensitive filter for symbol or name of coin |
[- {
- "cmc_id": "string",
- "symbol": "string",
- "name": "string",
- "rank": 0,
- "logo_url": "string"
}
]
Returns the 'open' rate of the coin in the for the passed date in the fiat currency.
id required | string _id of Coin to get rate for Ref: Coin._id |
date required | string <date> Date to provide rate on |
fiat | string Default: "USD" Fiat currency to show rate in Ref: Currency.code |
"string"
Returns a list of coins with balance descriptions
Field | Filterable | Orderable |
---|---|---|
_id | ✅ | ✅ |
name | ✅ | ✅ |
symbol | ✅ | ✅ |
rate | ❌ | ❌ |
value | ❌ | ❌ |
gainLoss | ❌ | ❌ |
isFiat | ✅ | ❌ |
rateSymbol | ✅ | ✅ |
custom | ❌ | ❌ |
impair | ❌ | ❌ |
quantity | ❌ | ❌ |
totalCostBasis | ❌ | ❌ |
showHidden | boolean include hidden coins |
hideZero | boolean exclude zero balance coins |
date | string <date> date to filter by. defaults to "now" ISO Date |
LocationId | string Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set. |
consolidated | boolean True = match on the Location & its children. False = match only wallets in this location. |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
order | string Default: "name:ASC" Order to return results in. ex "date:desc" |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": "string",
- "name": "string",
- "symbol": "string",
- "rateId": "string",
- "rateSource": "coinmarketcap",
- "rateSymbol": "string",
- "isFiat": true,
- "custom": true,
- "impair": true,
- "quantity": "1",
- "value": "1",
- "gainLoss": "1",
- "totalCostBasis": "1",
- "rate": {
- "PRICE": "1",
- "CHANGEPCT24HOUR": "1"
}, - "customFields": { }
}
]
}
Field | Filterable | Sortable |
---|---|---|
_id | ✅ | ✅ |
AccountingPeriodId | ✅ | ❌ |
ChildId | ✅ | ❌ |
ParentId | ✅ | ❌ |
AccountingPeriod.end | ❌ | ✅ |
createdAt | ✅ | ✅ |
updatedAt | ✅ | ✅ |
filter | string JSON Key:Value object to filter results on |
filterType | string Default: "all" Enum: "all" "any" Results will match "all" filters or just "any" of the passed filters |
cursor | string Cursor key to page forwards from. Must be populated from the result of a previous query call. |
limit | integer [ 1 .. 1000 ] Default: 25 Maximum number of records to return. |
order | string Default: "number:ASC" Order to return results in. ex "date:desc" |
LocationId | number Will include data from this Parent Location and its children only |
{- "hasNextPage": true,
- "cursor": "string",
- "data": [
- {
- "_id": 0,
- "AccountingPeriodId": 0,
- "ChildId": 0,
- "ParentId": 0,
- "spotRate": "string",
- "wavgRate": "string",
- "historicalRate": "string",
- "userSet": true,
- "AccountingPeriod": {
- "start": "2019-08-24",
- "end": "2019-08-24"
}, - "Child": {
- "id": "string",
- "name": "string",
- "currency": "string"
}, - "Parent": {
- "id": "string",
- "name": "string",
- "currency": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}