SoftLedger Accounting API v2 (1.0.0)

Download OpenAPI specification:Download

Introduction

Below is an overview of our REST API, including endpoints related to our general ledger and other components of SoftLedger's accounting software.

Endpoints

SoftLedger has the following endpoints.

Site Endpoint
Production https://api.softledger.com/v2
Europe https://eu-api.softledger.com/v2

Access to the Accounting API

Please contact support@softledger.com to request access to the API.

Authentication

OAuth v2.0

SoftLedger API uses OAuth2.0 to access it's API. For any request to the API, you'll need to pass a JWT.

Authorization

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 Token

Request OAuth Token

This endpoint uses the base URL without version as the request URL

  • For Production, URL for this request should be https://api.softledger.com/oauth/token
  • For Europe, URL for this request should be https://eu-api.softledger.com/oauth/token

The following Legacy URLs will continue to be supported

  • For Production, URL for this request should be https://auth.accounting-auth.com/oauth/token
  • For Europe, URL for this request should be https://eu.accounting-auth.com/oauth/token
Authorizations:
OAuth2
Request Body schema: application/json
required
grant_type
required
string

The OAuth grant type used to generate the toekn.

  • Should be set to client_credentials
audience
required
string

API reference. Will be one of these two values

  • For Production, this should be set to https://sl-prod.softledger.com/api
  • For Europe, this should be set to https://api.softledger.com
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

Responses

Request samples

Content type
application/json
{
  • "grant_type": "string",
  • "tenantUUID": "string",
  • "audience": "string",
  • "client_id": "string",
  • "client_secret": "string"
}

Response samples

Content type
application/json
{
  • "access_token": "string",
  • "expires_in": 0,
  • "scope": "string"
}

Auditing

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.

  • The audit entry will still retain information to know that this was an API request and not performed directly by a user in the SoftLedger UI.
  • This header is ignored for tokens generated by a user initiated OAuth flow.

Rate Limiting

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.

Request and Responses

Pagination

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.

Filtering

Building the filter statement

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

Available Filter Options

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.

Example

Get all created or approved bills posted after "2020-01-01"

{
  "status": {
    "in": ["created", "approved"]
  },
  "postingDate": {
    "gt": "2020-01-01"
  }
}

Example 2

Get all Transactions where the reconcileId is not set. Indicating they are not reconciled

{
  "reconcileId": {
    "isNull": true
  }
}

Errors

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

Webhooks

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.

Webhook Payload

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",
}

What webhooks are sent?

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.

Search

Returns a list of webhooks in ascending order by uri

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

creates a new webhook

Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Webhook

uri
required
string

Responses

Request samples

Content type
application/json
{
  • "uri": "string"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "uri": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Webhook

Authorizations:
OAuth2
path Parameters
id
required
string

Webhook Id

Responses

Addresses

Addresses

Search

Field Filterable Sortable
_id
label
line1
line2
city
state
zip
country
isDefault
isVerified
createdAt
updatedAt
CustomerId
VendorId
Customer.name
Vendor.name
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new address

Webhooks

Address CREATE
Authorizations:
OAuth2
Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "label": "string",
  • "line1": "string",
  • "line2": "string",
  • "city": "string",
  • "state": "string",
  • "zip": "string",
  • "country": "string",
  • "isDefault": true,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "Customer": {
    },
  • "Vendor": {
    }
}

Response samples

Content type
application/json
{
  • "_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
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Address

Webhooks

Address DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Address Id

Responses

Update

Update One Address

Webhooks

Address UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Address Id

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "label": "string",
  • "line1": "string",
  • "line2": "string",
  • "city": "string",
  • "state": "string",
  • "zip": "string",
  • "country": "string",
  • "isDefault": true,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "Customer": {
    },
  • "Vendor": {
    }
}

Response samples

Content type
application/json
{
  • "_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
}

One

Get one Address

Authorizations:
OAuth2
path Parameters
id
required
string

Address Id

Responses

Response samples

Content type
application/json
{
  • "_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": {
    },
  • "Vendor": {
    }
}

API Keys

API Keys

All

Returns a list of api keys in ascending order by name

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create

Creates a new api key

Authorizations:
OAuth2
Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "permissions": [
    ]
}

Response samples

Content type
application/json
{
  • "client_id": "string",
  • "client_secret": "string",
  • "audience": "string",
  • "name": "string",
  • "permissions": [
    ],
  • "active": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Api Key

Authorizations:
OAuth2
path Parameters
client_id
required
string

Api Key client_id

Responses

All Permissions

Returns a list of permissions that can be associated with an api key

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "permissions": [
    ]
}

Update Permissions

Set the permissions for an api key

Authorizations:
OAuth2
path Parameters
client_id
required
string

Api Key client_id

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "permissions": [
    ]
}

Audit Logs

Audit Logs

Search

Returns a list of audit logs in descending order by date

Field Filterable
_id
date
object
objectType
objectId
message
user
api
userType
userLabel
Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Banks

Banks

Create Account

Creates a new Bank Account

Name and number must be unique for bank accounts.

Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new bank account

providerName
required
string

Name of the institution / account provider

accountName
required
string
accountNumber
required
string >= 4 characters
accountType
required
string
Enum: "investment" "credit" "depository" "loan" "brokerage" "other"

Responses

Request samples

Content type
application/json
{
  • "providerName": "string",
  • "accountName": "string",
  • "accountNumber": "string",
  • "accountType": "investment"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "providerName": "string",
  • "accountName": "string",
  • "accountNumber": "string",
  • "accountType": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Account Transactions

Returns a list of bank transactions for this account.

Also returns the possible and exact matches of a transaction with Journals or Cash Receipts.

The transactions are sorted by date in descending order.

Authorizations:
OAuth2
path Parameters
id
required
string

BankAccount.id

query Parameters
startDate
required
string <date>

Date to start the search from

endDate
required
string <date>

Date to end the search to

offset
integer
Default: 0

number of records to skip

limit
integer [ 1 .. 1000 ]
Default: 25

Maximum number of records to return.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "totalItems": 0
}

Batch Payments

Batch Payments

Search

Field Filterable Sortable
_id
status
referenceNumber
postedDate
paymentDate
currency
amount
LocationId
ClearingAccountId
CashAccountId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

creates a new Batch Payment

Webhooks

BatchPayment CREATE
Authorizations:
OAuth2
Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "paymentDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "referenceNumber": "string",
  • "memo": "string",
  • "CashAccountId": 0,
  • "ClearingAccountId": 0,
  • "Bills": [
    ]
}

Response samples

Content type
application/json
{
  • "_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"
}

Approve

Approve batch payment

Webhooks

BatchPayment APPROVE
Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

Responses

Bills

This endpoint returns bills for the specified batch payment. The parameters of this endpoint are the same as for Bills Search

Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Bills Count

The same filters as Search can be used here.

Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Batch Payment

Webhooks

BatchPayment DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Batch Payment Id

Responses

One

Get one Batch Payment

Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "status": "created",
  • "referenceNumber": "string",
  • "postedDate": "2019-08-24",
  • "paymentDate": "2019-08-24",
  • "memo": "string",
  • "currency": "string",
  • "amount": "string",
  • "VendorIds": [
    ],
  • "LocationId": 0,
  • "Location": {
    },
  • "ClearingAccountId": 0,
  • "ClearingAccount": {
    },
  • "CashAccountId": 0,
  • "CashAccount": {
    },
  • "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"
}

Payments

This endpoint returns payments for the specified batch payment. The parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Payments Count

The same filters as Search can be used here.

Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Void

Void Batch Payment

Webhooks

BatchPayment VOID
Authorizations:
OAuth2
path Parameters
id
required
string

BatchPayment._id

Request Body schema: application/json

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.

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "voidDate": "2019-08-24"
}

Bills

Bills

Search

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
Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

creates a new Bill

Webhooks

Bill CREATE
Authorizations:
OAuth2
Request Body schema: application/json

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:

ItemId set LedgerAccountId Set Result
Yes Yes Use LedgerAccountId
Yes No Use Item.BillAccountId
No Yes Use LedgerAccountId
No No Error is thrown

** If LedgerAccountId is set, it will override the LedgerAccount.number **

Tax Logic:

TaxCodeId set TaxAmount set Result Tax LedgerAccount
Yes Yes Use TaxAmount, even if set to 0 TaxCode.LedgerAccountId
Yes No taxAmount = (amount * quantity) * (TaxCode.rate / 100) TaxCode.LedgerAccountId
No Yes Use TaxAmount Settings.defaultSalesTaxId
No No No Tax Set No Tax Line Added

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "invoiceDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "description": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "APAccountId": 0,
  • "APAccount": {
    },
  • "PurchaseOrderId": 0,
  • "PurchaseOrder": {
    },
  • "BillLineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "_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,
  • "attachments": [],
  • "status": "created",
  • "approvalStatus": "unapproved",
  • "paymentStatus": "unpaid"
}

Line Search

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
Authorizations:
OAuth2
query Parameters
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:

  • If 'credit' is false, lines from Bills that have 'Bill.amount' greater than or equal to zero will be returned
  • If 'credit' is true, lines from Bills that have 'Bill.amount' less than zero will be returned
  • If 'credit' is not provided, all lines will be returned

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Unpaid Bills

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

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Approve

Approve Bill

Webhooks

Bill APPROVE
Authorizations:
OAuth2
path Parameters
id
required
string

Bill._id

Responses

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Line Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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:

  • If 'credit' is false, lines from Bills that have 'Bill.amount' greater than or equal to zero will be returned
  • If 'credit' is true, lines from Bills that have 'Bill.amount' less than zero will be returned
  • If 'credit' is not provided, all lines will be returned

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count Unpaid

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create Line

creates a new Bill Line

Webhooks

BillLineItem CREATE
Authorizations:
OAuth2
path Parameters
id
required
string

Bill._id

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_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
}

Delete

Delete one Bill

Webhooks

Bill DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Bill Id

Responses

One

Get one Bill

Authorizations:
OAuth2
path Parameters
id
required
string

Bill._id

Responses

Response samples

Content type
application/json
{
  • "_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",
  • "attachments": [],
  • "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": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "APAccountId": 0,
  • "APAccount": {
    },
  • "PurchaseOrderId": 0,
  • "PurchaseOrder": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "BillLineItems": [
    ]
}

Update

Update One Bill

Webhooks

Bill DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Bill Id

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "invoiceDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "description": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "APAccountId": 0,
  • "APAccount": {
    },
  • "PurchaseOrderId": 0,
  • "PurchaseOrder": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "invoiceNumber": "string",
  • "invoiceDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "description": "string",
  • "amount": "string",
  • "dueAmount": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "VendorId": 0,
  • "APAccountId": 0,
  • "PurchaseOrderId": 0
}

Delete Line

Deletes an Bill Line

Can only delete a line from an unapproved bill

Webhooks

BillLineItem DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

BillLine._id

Responses

Update Line

Update a Bill Line

Webhooks

BillLineItem UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

BillLineItem._id

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_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
}

Payments

This endpoint returns only payments for the specified bill. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

Bill._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Void

Void Bill

Webhooks

Bill VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Bill._id

Request Body schema: application/json

Bills with linked payments cannot be voided

Bills in created or voided status cannot be voided

description
string
postingDate
string <date>

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "postingDate": "2019-08-24"
}

Cash Receipts

Cash Receipts

Search

Field Filterable Sortable
_id
number
externalId
type
amount
unused
description
currency
receiveDate
postingDate
status
applyToInvoices
CustomerId
LedgerAccountId
UnappliedCashAccountId
LocationId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Cash Receipt

Webhooks

CashReceipt CREATE
Authorizations:
OAuth2
Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "externalId": "string",
  • "type": "charge",
  • "amount": "string",
  • "description": "string",
  • "currency": "string",
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "applyToInvoices": false,
  • "attachments": [],
  • "CustomerId": 0,
  • "Customer": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "UnappliedCashAccountId": 0,
  • "UnappliedCashAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_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,
  • "attachments": [],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Cash Receipt

Cannot delete if there are linked journal entries.

Webhooks

CashReceipt DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Cash Receipt Id

Responses

One

Get one Cash Receipt

Authorizations:
OAuth2
path Parameters
id
required
string

Cash Receipt Id

Responses

Response samples

Content type
application/json
{
  • "_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": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "UnappliedCashAccountId": 0,
  • "UnappliedCashAccount": {
    },
  • "attachments": [],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update One Cash Receipt

Webhooks

CashReceipt UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Cash Receipt Id

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "externalId": "string",
  • "type": "charge",
  • "amount": "string",
  • "description": "string",
  • "currency": "string",
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "attachments": [],
  • "CustomerId": 0,
  • "Customer": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    }
}

Response samples

Content type
application/json
{
  • "_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,
  • "attachments": [],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Payments

This endpoint returns only payments for the specified cash receipt. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

CashReceipt._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Void

Void one Cash Receipt

Voided cash receipts with journals will post a voided journal

Cannot void if there are any unvoided payments linked

Webhooks

CashReceipt VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Cash Receipt Id

Responses

Coins

Coins

Search

Field Filterable Sortable
_id
symbol
name
impair
hidden
isFiat
rateSymbol
rateId
rateSource
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Coin

Webhooks

Coin CREATE
LedgerAccount CREATE - four ledger accounts are created for each coin created
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Coin

symbol
required
string
name
required
string
impair
boolean
Default: false
isFiat
boolean
Default: false

If set true

  • rateId must be a Ref: Currency.Code
rateId
string

Required if coin will use automatic rates

customFields
object

Key->Value hash of custom field names and values

Responses

Request samples

Content type
application/json
{
  • "symbol": "string",
  • "name": "string",
  • "impair": false,
  • "isFiat": false,
  • "rateId": "string",
  • "customFields": { }
}

Response samples

Content type
application/json
{
  • "_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": {
    },
  • "FeeAccount": {
    },
  • "LTGainLossAccount": {
    },
  • "STGainLossAccount": {
    }
}

Crypto Transactions

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
Authorizations:
OAuth2
path Parameters
CoinId
required
string

Coin._id

query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Id Summary

List of Coins with balance details by wallet

Field Filterable Orderable
_id
name
rate
value
gainLoss
isFiat
rateSymbol
custom
impair
quantity
totalCostBasis
Authorizations:
OAuth2
path Parameters
CoinId
required
string

Coin._id

query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Count

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.

Authorizations:
OAuth2
path Parameters
CoinId
required
string

Coin._id value

query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": 0,
  • "estimate": true
}

Delete

Delete one Coin

Webhooks

Coin DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Coin Id

Responses

One

Get one Coin

Authorizations:
OAuth2
path Parameters
id
required
string

Coin Id

Responses

Response samples

Content type
application/json
{
  • "_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": {
    },
  • "FeeAccount": {
    },
  • "LTGainLossAccount": {
    },
  • "STGainLossAccount": {
    }
}

Update

Update One Coin

Webhooks

Coin UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Coin Id

Request Body schema: application/json

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

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "impair": true,
  • "hidden": true,
  • "rateId": "string",
  • "rateSource": "coinmarketcap",
  • "customFields": { }
}

Response samples

Content type
application/json
{
  • "_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"
}

Known Coin

Returns Known Coin by rateId

Authorizations:
OAuth2
path Parameters
rateId
string

RateId for the Coin

Responses

Response samples

Content type
application/json
{
  • "cmc_id": "string",
  • "symbol": "string",
  • "name": "string",
  • "rank": 0,
  • "logo_url": "string"
}

Known Coins

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.

Authorizations:
OAuth2
query Parameters
filter
string

Case Insensitive filter for symbol or name of coin

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Coin Rate

Returns the 'open' rate of the coin in the for the passed date in the fiat currency.

Authorizations:
OAuth2
path Parameters
id
required
string

_id of Coin to get rate for Ref: Coin._id

query Parameters
date
required
string <date>

Date to provide rate on

fiat
string
Default: "USD"

Fiat currency to show rate in Ref: Currency.code

Responses

Response samples

Content type
application/json
"string"

Summary

Returns a list of coins with balance descriptions

Field Filterable Orderable
_id
name
symbol
rate
value
gainLoss
isFiat
rateSymbol
custom
impair
quantity
totalCostBasis
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Consolidation Rates

Consolidation Rates

Search

Field Filterable Sortable
_id
AccountingPeriodId
ChildId
ParentId
AccountingPeriod.end
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Upsert

Upsert consolidation rates

Authorizations:
OAuth2
Request Body schema: application/json

JSON body of consolidation rates to create or update

One of ChildId or Child.id must be provided

One of ParentId or Parent.id must be provided

Parent.currency and Child.currency must be different

Will throw an error if the Accounting Year associated with any of the provided rates is closed.

Webhooks

Consolidation Rate UPSERT
Array
spotRate
required
string <number>

Must be > 0

wavgRate
required
string <number>

Must be > 0

AccountingPeriodId
required
number

Ref: AccountingPeriod._id

ChildId
required
number

Ref: Location._id

ParentId
required
number

Ref: Location._id

historicalRate
string <number>

Must be > 0

object
object

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "_id": 0,
  • "AccountingPeriodId": 0,
  • "ChildId": 0,
  • "ParentId": 0,
  • "spotRate": "string",
  • "wavgRate": "string",
  • "historicalRate": "string"
}

Delete

Delete one Consolidation Rate

A Consolidation Rate can ony be deleted if the following are true:

  • There are no further child locations associated with the child location of this rate

  • There are no Journal Lines associated with the child location of this rate

  • The Accounting Year this consolidation rate falls under is not closed

Webhooks

Consolidation Rate DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Consolidation Rate Id

Responses

One

Gets one rate record.

Authorizations:
OAuth2
path Parameters
id
required
string

ConsolidationRate._id

query Parameters
system
boolean
Default: false

Set this to true to return the system generated rate values for this record

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "AccountingPeriodId": 0,
  • "ChildId": 0,
  • "ParentId": 0,
  • "spotRate": "string",
  • "wavgRate": "string",
  • "historicalRate": "string",
  • "userSet": true,
  • "AccountingYear": {
    },
  • "AccountingPeriod": {
    },
  • "Child": {
    },
  • "Parent": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Populate

Populates consolidation rates

Authorizations:
OAuth2
Request Body schema: application/json

JSON body of period to populate rates for

Only missing Child/Parent rates will be populated for the period.

Safe to run multiple times for the same period and it will not overwrite your manually entered rates.

Will throw an error if the Accounting Year associated with this period is closed.

Weighted average rate is calculated using journal entries posted from the start of the fiscal year to the end of the specified accounting period.

Webhooks

Consolidation Rate POPULATE
AccountingPeriodId
required
number

Ref: AccountingPeriod._id

Responses

Request samples

Content type
application/json
{
  • "AccountingPeriodId": 0
}

Reset Rate

Reset consolidation rate to system generated values

Will throw an error if the Accounting Year associated with this rate is closed.

Weighted average rate is calculated using journal entries posted from the start of the fiscal year to the end of the specified accounting period.

This will overwrite any manually entered rates on this record.

Webhooks

Consolidation Rate RESET
Authorizations:
OAuth2
path Parameters
id
required
string

ConsolidationRate._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "AccountingPeriodId": 0,
  • "ChildId": 0,
  • "ParentId": 0,
  • "spotRate": "string",
  • "wavgRate": "string",
  • "historicalRate": "string",
  • "userSet": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Contacts

Contacts

Search

Field Filterable Sortable
_id
name
email
phone
isPrimary
createdAt
updatedAt
CustomerId
VendorId
Customer.name
Vendor.name
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Contact

Webhooks

Contact CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Contact

Only one of [CustomerId, VendorId, Customer.name, Vendor.name] can be set

name
required
string
email
string
phone
string
isPrimary
boolean

Set this as the primary contact for the Customer or Vendor

CustomerId
integer

Ref: Customer._id

VendorId
integer

Ref: Vendor._id

object
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "isPrimary": true,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "Customer": {
    },
  • "Vendor": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "isPrimary": true,
  • "CustomerId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "VendorId": 0
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Contact

Webhooks

Contact DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Contact Id

Responses

One

Get one Contact

Authorizations:
OAuth2
path Parameters
id
required
string

Contact Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "isPrimary": true,
  • "CustomerId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "VendorId": 0,
  • "Customer": {
    },
  • "Vendor": {
    }
}

Update

Update One Contact

Webhooks

Contact UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Contact Id

Request Body schema: application/json

JSON body containing key and values to update

name
string
email
string
phone
string
isPrimary
boolean

Set this as the primary contact for the Customer or Vendor

CustomerId
integer

Ref: Customer._id

VendorId
integer

Ref: Vendor._id

object
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "isPrimary": true,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "Customer": {
    },
  • "Vendor": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "email": "string",
  • "phone": "string",
  • "isPrimary": true,
  • "CustomerId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "VendorId": 0
}

Cost Centers

Cost Centers

Search

Field Filterable Sortable
_id
id
name
description
inactive
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create Cost Center

Webhooks

CostCenter CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body

id
required
string
name
required
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Cost Center

Webhooks

CostCenter DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Cost Center Id

Responses

One

Get one Cost Center

Authorizations:
OAuth2
path Parameters
id
required
string

Cost Center Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update Cost Center

Webhooks

CostCenter UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Cost Center Id

Request Body schema: application/json

JSON body containing key and values to update

id
string
name
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Crypto Transactions

Crypto Transactions

Cost Basis

Cancel running costbasis process

Authorizations:
OAuth2

Responses

Cost Basis

Get next date cost basis will run from

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "nextCostBasisDate": "2019-08-24T14:15:22Z"
}

Cost Basis

Start costbasis process

Authorizations:
OAuth2

Responses

Cost Layers

Returns a list of cost layers in descending order

Authorizations:
OAuth2
path Parameters
id
required
string

Transaction id to get cost layers for

query Parameters
type
required
string
Enum: "s" "f"

Type of cost layers to return

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Count

Returns a count of transactions based on the passed filters. If a significantly large amount of transactions, it is possible an estimated value will be returned.

See /crypto-transactions/search for filterable fields.

Authorizations:
OAuth2
query Parameters
coinId
string

Coin._id Limits results to the specified coin

walletId
string

Wallet._id Limits results to the specified wallet

LocationId
string

Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set.

costLayers
boolean
Default: false

Only returns Crypto Transactions that have unused cost layers.

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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create

Create new Crypto Transaction. See below for respective tables containing required fields and fields that are not allowed for each type of transaction.

Field Deposit Withdrawal Trade Transfer
rCoinId
rWalletId
rQty
rPrice ✔️ ✔️
sCoinId
sWalletId
sQty ✔️
sPrice ✔️ --
LedgerAccountId
Fee Fields ✔️ ✔️ ✔️ ✔️

✅ - Required    ❌ - Not Allowed    ✔️ - Optional

Price fields will pull from rate provider if set to null

sPrice is Ignored for Trades as is autocalculated from rPrice

sQty may be set to 0 if fQty > 0, this allows "fee only" transactions

Fee Fields
fCoinId
fWalletId
fQty
fPrice ✔️

Setting fCoinId indicates that a fee should be added

Webhooks

CryptoTransaction CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Crypto Transaction

date
required
string <date-time>
type
required
string
Enum: "deposit" "trade" "transfer" "withdrawal"
currency
required
string

ISO-4217 Currency Code ex "USD" or "GBP". This specifies which currency rPrice/sPrice/fPrice uses.

rCoinId
string

ref: Coins._id

sCoinId
string

ref: Coins._id

fCoinId
string

ref: Coins._id

rWalletId
string

ref: Wallets._id

sWalletId
string

ref: Wallets._id

fWalletId
string

ref: Wallets._id

rQty
string <number>
sQty
string <number>
fQty
string <number>
sPrice
string <number>
rPrice
string <number>
fPrice
string <number>
notes
string
reference
string
externalId
string
externalSource
string
txHash
string
LedgerAccountId
integer

ref: LedgerAccounts._id

CustomerId
integer

ref: Customers._id

VendorId
integer

ref: Vendors._id

CostCenterId
integer

ref: CostCenters._id

ProductId
integer

ref: Products._id

JobId
integer

ref: Jobs._id

Custom1Id
integer

ref: Custom1._id

Custom2Id
integer

ref: Custom2._id

Custom3Id
integer

ref: Custom3._id

Responses

Request samples

Content type
application/json
{
  • "date": "2019-08-24T14:15:22Z",
  • "rCoinId": "string",
  • "sCoinId": "string",
  • "fCoinId": "string",
  • "rWalletId": "string",
  • "sWalletId": "string",
  • "fWalletId": "string",
  • "rQty": "1",
  • "sQty": "1",
  • "fQty": "1",
  • "type": "deposit",
  • "sPrice": "1",
  • "rPrice": "1",
  • "fPrice": "1",
  • "notes": "string",
  • "reference": "string",
  • "currency": "string",
  • "externalId": "string",
  • "externalSource": "string",
  • "txHash": "string",
  • "LedgerAccountId": 0,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "CostCenterId": 0,
  • "ProductId": 0,
  • "JobId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "date": "2019-08-24T14:15:22Z",
  • "rQty": "1",
  • "sQty": "1",
  • "fQty": "1",
  • "qtyPicked": "1",
  • "type": "deposit",
  • "sCostBasis": 0,
  • "fCostBasis": 0,
  • "sPrice": "1",
  • "rPrice": "1",
  • "fPrice": "1",
  • "locked": true,
  • "error": { },
  • "notes": "string",
  • "reference": "string",
  • "currency": "string",
  • "currencyRate": "1",
  • "externalId": "string",
  • "externalSource": "string",
  • "txHash": "string",
  • "SystemJobId": "string",
  • "rCoinId": "string",
  • "sCoinId": "string",
  • "fCoinId": "string",
  • "rWalletId": "string",
  • "sWalletId": "string",
  • "fWalletId": "string",
  • "LedgerAccountId": 0,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "JournalId": 0,
  • "CostCenterId": 0,
  • "ProductId": 0,
  • "JobId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0
}

Search

Field Filterable Sortable
_id
CostCenter.id
CostCenterId
createdAt
currency
Custom1Id
Custom1.id
Custom2Id
Custom2.id
Custom3Id
Custom3.id
Customer.id
CustomerId
date
externalId
externalSource
fCoin.symbol
fCoinId
fPrice
fQty
fWallet.name
fWalletId
isJournalStale
Job.number
JobId
Journal.number
JournalId
LedgerAccount.number
LedgerAccountId
locked
notes
Product.id
ProductId
rCoin.symbol
rCoinId
reference
rPrice
rQty
rWallet.name
rWalletId
sCoin.symbol
sCoinId
sPrice
sQty
sWallet.name
sWalletId
SystemJobId
txHash
type
updatedAt
Vendor.id
VendorId
Authorizations:
OAuth2
query Parameters
coinId
string

Coin._id Limits results to the specified coin

walletId
string

Wallet._id Limits results to the specified wallet

LocationId
string

Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set.

costLayers
boolean
Default: false

Only returns Crypto Transactions that have unused cost layers.

journalErrorsOnly
boolean
Default: false

Set to true to only return Crypto Transactions that have journal errors.

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: "date:DESC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Delete

Delete one Crypto Transaction

Webhooks

Cryptotransaction DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Crypto Transaction Id

Responses

One

Get one Crypto Transaction

Authorizations:
OAuth2
path Parameters
id
required
string

Crypto Transaction Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "date": "2019-08-24T14:15:22Z",
  • "rQty": 0,
  • "sQty": 0,
  • "fQty": 0,
  • "qtyPicked": "string",
  • "type": "deposit",
  • "sCostBasis": 0,
  • "fCostBasis": 0,
  • "sPrice": 0,
  • "rPrice": 0,
  • "fPrice": 0,
  • "locked": true,
  • "error": { },
  • "notes": "string",
  • "reference": "string",
  • "currency": "string",
  • "currencyRate": "string",
  • "externalId": "string",
  • "externalSource": "string",
  • "txHash": "string",
  • "SystemJobId": "string",
  • "rCoinId": "string",
  • "sCoinId": "string",
  • "fCoinId": "string",
  • "rWalletId": "string",
  • "sWalletId": "string",
  • "fWalletId": "string",
  • "LedgerAccountId": 0,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "JournalId": 0,
  • "CostCenterId": 0,
  • "ProductId": 0,
  • "JobId": 0,
  • "rCoin": {
    },
  • "rWallet": {
    },
  • "sCoin": {
    },
  • "sWallet": {
    },
  • "fCoin": {
    },
  • "fWallet": {
    },
  • "Customer": {
    },
  • "Vendor": {
    },
  • "LedgerAccount": {
    },
  • "Journal": {
    },
  • "CostCenter": {
    },
  • "Product": {
    },
  • "Job": {
    }
}

Update

Update One Crypto Transaction. See Create for allowed fields.

Webhooks

CryptoTransaction UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Crypto Transaction Id

Request Body schema: application/json

JSON body containing key and values to update

date
string <date-time>
rCoinId
string

Ref: Coins._id

sCoinId
string

Ref: Coins._id

fCoinId
string

Ref: Coins._id

rWalletId
string

Ref: Wallets._id

sWalletId
string

Ref: Wallets._id

fWalletId
string

Ref: Wallets._id

rQty
string <number>
sQty
string <number>
fQty
string <number>
qtyPicked
string <number>
type
string
Enum: "deposit" "trade" "transfer" "withdrawal"
sPrice
string <number>
rPrice
string <number>
fPrice
string <number>
notes
string
reference
string
LedgerAccountId
integer

Ref: LedgerAccount._id

CustomerId
integer

Ref: Customer._id

currency
string

ISO-4217 Currency Code ex "USD" or "GBP". This specifies which currency rPrice/sPrice/fPrice uses.

currencyRate
string <number>
externalId
string
externalSource
string
txHash
string
VendorId
integer

Ref: Vendor._id

Responses

Request samples

Content type
application/json
{
  • "date": "2019-08-24T14:15:22Z",
  • "rCoinId": "string",
  • "sCoinId": "string",
  • "fCoinId": "string",
  • "rWalletId": "string",
  • "sWalletId": "string",
  • "fWalletId": "string",
  • "rQty": "1",
  • "sQty": "1",
  • "fQty": "1",
  • "qtyPicked": "1",
  • "type": "deposit",
  • "sPrice": "1",
  • "rPrice": "1",
  • "fPrice": "1",
  • "notes": "string",
  • "reference": "string",
  • "LedgerAccountId": 0,
  • "CustomerId": 0,
  • "currency": "string",
  • "currencyRate": "string",
  • "externalId": "string",
  • "externalSource": "string",
  • "txHash": "string",
  • "VendorId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "date": "2019-08-24T14:15:22Z",
  • "rQty": "1",
  • "sQty": "1",
  • "fQty": "1",
  • "qtyPicked": "1",
  • "type": "deposit",
  • "sCostBasis": 0,
  • "fCostBasis": 0,
  • "sPrice": "1",
  • "rPrice": "1",
  • "fPrice": "1",
  • "locked": true,
  • "error": { },
  • "notes": "string",
  • "reference": "string",
  • "currency": "string",
  • "currencyRate": "1",
  • "externalId": "string",
  • "externalSource": "string",
  • "txHash": "string",
  • "SystemJobId": "string",
  • "rCoinId": "string",
  • "sCoinId": "string",
  • "fCoinId": "string",
  • "rWalletId": "string",
  • "sWalletId": "string",
  • "fWalletId": "string",
  • "LedgerAccountId": 0,
  • "CustomerId": 0,
  • "VendorId": 0,
  • "JournalId": 0,
  • "rCoin": {
    },
  • "rWallet": {
    },
  • "sCoin": {
    },
  • "sWallet": {
    },
  • "fCoin": {
    },
  • "fWallet": {
    },
  • "Customer": {
    },
  • "Vendor": {
    },
  • "LedgerAccount": {
    },
  • "Journal": {
    }
}

Merge

Merges a deposit and withdrawal crypto transaction into a transfer transaction.

The deposit and withdrawal transactions will both be deleted and a single transfer transaction will be created. Any linked journals will be destroyed.

The fee from the withdrawal will be added to the transfer transaction.

The rCoin of the deposit and the sCoin of the withdrawal must match.

The rWallet of the deposit and the sWallet of the withdrawal must match.

The rQty of the deposit and the sQty of the withdrawal must match.

The txHash of the deposit and the txHash of the withdrawal must match.

The currency of the deposit and the currency of the withdrawal must match.

Authorizations:
OAuth2
Request Body schema: application/json

Merge deposit and withdrawal crypto transactions into a transfer transaction.

depositId
required
string

Ref: CryptoTransaction._id

withdrawalId
required
string

Ref: CryptoTransaction._id

useDepositMetaData
boolean
Default: false

Set True to use deposit meta data to populate new transfer transaction.

Set False to use withdrawal meta data to populate new transfer transaction.

The metadata includes [date, reference, notes, dimensions, attachments, externalId, externalSource]

Responses

Request samples

Content type
application/json
{
  • "depositId": "string",
  • "withdrawalId": "string",
  • "useDepositMetaData": false
}

Response samples

Content type
application/json
{
  • "_id": 0
}

Create Journals

Start create journal process

Authorizations:
OAuth2

Responses

Currencies

Currencies

Create

Create new currency

Webhooks

Currency CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create a new currency

code
required
string
symbol
required
string
name
required
string
rounding_method
number
Default: 1
fraction
number
Default: 2
custom
boolean

Responses

Request samples

Content type
application/json
{
  • "code": "string",
  • "symbol": "string",
  • "name": "string",
  • "rounding_method": 1,
  • "fraction": 2,
  • "custom": true
}

Response samples

Content type
application/json
{
  • "code": "string",
  • "fraction": 0,
  • "rounding_method": 0,
  • "symbol": "string",
  • "name": "string",
  • "custom": false
}

Search

Gets all currency

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Search

Gets FX rates for currency

Authorizations:
OAuth2
path Parameters
code
required
string

Currency Code

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get one

Gets one currency

Authorizations:
OAuth2
path Parameters
code
required
string

Currency Code

Responses

Response samples

Content type
application/json
{
  • "fraction": 0,
  • "rounding_method": 0,
  • "code": "string",
  • "name": "string",
  • "symbol": "string",
  • "custom": false
}

Delete

Delete a Currency

Webhooks

Currency DELETE
Authorizations:
OAuth2
path Parameters
code
required
string

Currency Code

Responses

Update

Update a currency

Webhooks

Currency UPDATE
Authorizations:
OAuth2
path Parameters
code
required
string

Currency Code

Request Body schema: application/json

JSON object containing key and values to update

symbol
string
rounding_method
number
fraction
number
code
string
name
string

Responses

Request samples

Content type
application/json
{
  • "symbol": "string",
  • "rounding_method": 0,
  • "fraction": 0,
  • "code": "string",
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "code": "string",
  • "fraction": 0,
  • "rounding_method": 0,
  • "symbol": "string",
  • "name": "string",
  • "custom": false
}

Custom Dimensions

Each SoftLedger tenant can have up to 3 custom dimensions.

All of the resources below are for custom dimensions and are accessed based on the name of the custom dimension. The {name} parameter should be populated with the custom dimension name.

Search

Field Filterable Sortable
_id
id
name
description
inactive
createdAt
updatedAt
Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create Custom Dimension

Webhooks

CustomDimension DELETE
Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

Request Body schema: application/json

JSON body

id
required
string
name
required
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Custom Dimension

Webhooks

CustomDimension DELETE
Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

id
required
string

Custom Dimension Id

Responses

One

Get one Custom Dimension

Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

id
required
string

Custom Dimension Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update Custom Dimension

Webhooks

CustomDimension UPDATE
Authorizations:
OAuth2
path Parameters
name
required
string

Custom Dimension Object Type Name

id
required
string

Custom Dimension Id

Request Body schema: application/json

JSON body containing key and values to update

id
string
name
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Custom Fields

Custom Fields

Delete

Delete property in custom field

Webhooks

CustomField DELETE
Authorizations:
OAuth2
path Parameters
type
required
string

Type for custom field

property
required
string

Property in the custom field

Responses

Search

Search for custom fields

Authorizations:
OAuth2
path Parameters
type
required
string

Type for custom field

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Upsert

Create or Update a custom field

Webhooks

CustomField UPSERT
Authorizations:
OAuth2
path Parameters
type
required
string
Enum: "bill" "coin" "customer" "item" "invoiceType" "invoiceLineItems" "purchaseOrder" "poLineItems" "vendor" "invoiceLevel" "salesOrder"

Type for custom field

Request Body schema: application/json

JSON body to create or update Custom Field

type
required
string
Enum: "text" "number" "checkbox" "date" "select"
label
string

Name for the custom field, useful for UI

property
string

used for internal use

Responses

Request samples

Content type
application/json
{
  • "label": "string",
  • "property": "string",
  • "type": "text"
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "property": "string",
  • "required": true,
  • "label": "string",
  • "type": "text",
  • "data": [ ]
}

Customers

Customers

Search

Field Filterable Sortable
_id
id
name
externalId
email
description
terms
customFields
inactive
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Customer

Webhooks

Customer CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Customer

name
required
string
externalId
string
email
string <email>
description
string
terms
string
defaultDaysDue
integer >= 1
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

customFields
object
Default: {}

Key->Value store of custom fields

inactive
boolean
Default: false
object

Default address for customer

object

Primary contact for customer

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "description": "string",
  • "terms": "string",
  • "defaultDaysDue": 1,
  • "notes": "string",
  • "attachments": [],
  • "customFields": { },
  • "inactive": false,
  • "Address": {
    },
  • "Contacts": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "description": "string",
  • "terms": "string",
  • "defaultDaysDue": 0,
  • "notes": true,
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Customer

Webhooks

Customer DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Customer Id

Responses

One

Get one Customer

Authorizations:
OAuth2
path Parameters
id
required
string

Customer Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "description": "string",
  • "terms": "string",
  • "defaultDaysDue": 1,
  • "notes": "string",
  • "attachments": [],
  • "customFields": { },
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "Addresses": [
    ],
  • "Contacts": [
    ]
}

Update

Update One Customer

Webhooks

Customer UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Customer Id

Request Body schema: application/json

JSON body containing key and values to update

externalId
string
name
string
email
string <email>
description
string
terms
string
defaultDaysDue
integer >= 1
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

customFields
object
Default: {}

Key->Value store of custom fields

inactive
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "description": "string",
  • "terms": "string",
  • "defaultDaysDue": 1,
  • "notes": "string",
  • "attachments": [],
  • "customFields": { },
  • "inactive": false
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "email": "user@example.com",
  • "description": "string",
  • "terms": "string",
  • "defaultDaysDue": 0,
  • "notes": true,
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Invoices

This endpoint returns only invoices for the specified customer. The response and parameters of this endpoint are the same as for Invoices Search

Authorizations:
OAuth2
path Parameters
id
required
string

Customer._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Invoices Count

This endpoint counts only invoices for the specified customer.

The parameters of this endpoint are the same as for Invoices Search

Authorizations:
OAuth2
path Parameters
id
required
string

Customer._id

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Payments

This endpoint returns only payments for the specified customer. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

Customer._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Email Statement

Email Statement to Customers email addresss

Authorizations:
OAuth2
path Parameters
id
required
string

Customer._id

Responses

Statement PDF

Customer Statement PDF

Authorizations:
OAuth2
path Parameters
id
required
string

Customer._id

Responses

Emails

Emails

All

Get a list of all emails

Authorizations:
OAuth2
query Parameters
objectType
required
string
Enum: "Invoice" "PurchaseOrder" "SalesOrder"

Dimension Object Type

objectId
required
integer

Dimension Object Id

offset
integer
Default: 0

number of records to skip

limit
integer [ 1 .. 1000 ]
Default: 25

Maximum number of records to return.

Responses

Response samples

Content type
application/json
{
  • "totalItems": "string",
  • "data": [
    ]
}

Message Details

Get one Emails details

Authorizations:
OAuth2
path Parameters
messageid
required
string

Message id

Responses

Response samples

Content type
application/json
{
  • "TextBody": "string",
  • "HtmlBody": "string",
  • "Body": "string",
  • "MessageEvents": [
    ]
}

Financials

Financials

Account Balance by Currency Deprecated

This endpoint is deprecated. Please use the new GET /reports/trial-balance-by-currency endpoint instead.

For the new endpoint documentation, refer to: GET /reports/trial-balance-by-currency

Returns the consolidated balance of the Ledger Account passed broken down by currency. Balance Sheet accounts include all transactions until endDate Income Statement accounts include all transactions from start of accounting year until endDate

Authorizations:
OAuth2
Request Body schema: application/json

Account Balance Request

LocationId
required
integer
LedgerAccountId
required
integer
endDate
required
string <date>
accountType
required
string
Enum: "Asset" "Revenue" "Expense" "Liability" "Equity"
status
string
Enum: "posted" "draft"

Journal status, if not set, all journals used

startDate
string <date>

Only used if accountType is Revenue/Expense

consolidated
boolean

If true, returns consolidated balance of all locations, false returns balance just for that location

Responses

Request samples

Content type
application/json
{
  • "status": "posted",
  • "LocationId": 0,
  • "LedgerAccountId": 0,
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "accountType": "Asset",
  • "consolidated": true
}

Response samples

Content type
application/json
[
  • {
    }
]

AP Aging Bills

Returns list of approved but not fully paid bills for the specified Vendor.

Authorizations:
OAuth2
Request Body schema: application/json

AP Aging Bill Request

locationId
required
integer
vendorId
required
integer
date
required
string <date>

return all bills with postedDate <= date

offset
integer
Default: 0
limit
integer
Default: 25

min 1, max 100

consolidated
boolean
Default: false
includeDraft
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "locationId": 0,
  • "vendorId": 0,
  • "date": "2019-08-24",
  • "offset": 0,
  • "limit": 25,
  • "consolidated": false,
  • "includeDraft": false
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "totalItems": 0
}

AR Aging Invoices

Returns list of issued but not fully paid invoices for the specified Customer/Agent.

Authorizations:
OAuth2
Request Body schema: application/json

AR Aging Invoice Request

locationId
required
integer
customerId
required
integer

Customer/Agent "_id"

date
required
string <date>

return all invoices with invoiceDate <= date

offset
integer
Default: 0
limit
integer
Default: 25

min 1, max 100

consolidated
boolean
Default: false
includeDraft
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "locationId": 0,
  • "customerId": 0,
  • "date": "2019-08-24",
  • "offset": 0,
  • "limit": 25,
  • "consolidated": false,
  • "includeDraft": false
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "totalItems": 0
}

AP Aging

Returns list of approved but not fully paid bills. Grouped by date range

Authorizations:
OAuth2
Request Body schema: application/json

AP Aging request

locationId
required
integer
currency
required
string

currency to display results in

start
required
string <date>
consolidated
boolean
Default: true
includeDraft
boolean
Default: true

Responses

Request samples

Content type
application/json
{
  • "locationId": 0,
  • "currency": "USD",
  • "start": "2019-08-24",
  • "consolidated": true,
  • "includeDraft": true
}

Response samples

Content type
application/json
[
  • {
    }
]

AR Aging

Returns list of issued but not fully paid invoices. Grouped by date range

Authorizations:
OAuth2
Request Body schema: application/json

AR Aging request

locationId
required
integer
currency
required
string

currency to display results in

start
required
string <date>
consolidated
boolean
Default: true
includeDraft
boolean
Default: true

Responses

Request samples

Content type
application/json
{
  • "locationId": 0,
  • "currency": "USD",
  • "start": "2019-08-24",
  • "consolidated": true,
  • "includeDraft": true
}

Response samples

Content type
application/json
[
  • {
    }
]

Current Period Income Deprecated

This endpoint is deprecated. Please use the new GET /financials/balance-sheet endpoint instead.

For the new endpoint documentation, refer to: GET /financials/balance-sheet

Returns current period income calculation for specified report type for the startDate -> endDate.

Authorizations:
OAuth2
Request Body schema: application/json

Current Period Income Request

colType
required
string
Enum: "Location" "Month" "CostCenter" "Product" "Job" "Customer" "Vendor" "Custom1" "Custom2" "Custom3"
startDate
required
string <date>
endDate
required
string <date>
currency
required
string

currency to return value in

formulaType
required
string
Value: "currentPeriodIncome"
colIds
Array of strings
LocationId
integer
status
string
Enum: "draft" "posted"

Responses

Request samples

Content type
application/json
{
  • "formulaType": "currentPeriodIncome",
  • "colType": "Location",
  • "colIds": [
    ],
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "LocationId": 0,
  • "status": "draft",
  • "currency": "USD"
}

Response samples

Content type
application/json
{ }

Entity Report Deprecated

This endpoint is deprecated. Please use the new GET /financials/balance-sheet endpoint instead.

For the new endpoint documentation, refer to: GET /financials/balance-sheet

Financial Entity report data of account balances by dimension

Authorizations:
OAuth2
Request Body schema: application/json

Entity Report Request

startDate
required
string <date>
endDate
required
string <date>
LocationId
required
integer
currency
required
string
status
string
Enum: "posted" "draft"

Journal status to return

Responses

Request samples

Content type
application/json
{
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "LocationId": 0,
  • "currency": "USD",
  • "status": "posted"
}

Response samples

Content type
application/json
[
  • {
    }
]

Dimension Report Deprecated

This endpoint is deprecated. Please use the new GET /reports/ledger-account-by-dimension endpoint instead.

For the new endpoint documentation, refer to: GET /reports/ledger-account-by-dimension

Financial Dimension report data of account balances by dimension

Authorizations:
OAuth2
Request Body schema: application/json

Financial Dimension report data request

startDate
required
string <date>
endDate
required
string <date>
LocationId
required
integer
type
required
string
Enum: "Customer" "Vendor" "CostCenter" "Product" "Job" "Custom1" "Custom2" "Custom3"
objectIds
required
Array of integers
currency
required
string
status
string
Enum: "posted" "draft"

Journal status to return

Responses

Request samples

Content type
application/json
{
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "currency": "USD",
  • "LocationId": 0,
  • "status": "posted",
  • "type": "Customer",
  • "objectIds": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

General Ledger Deprecated

This endpoint is deprecated. Please use the new GET /general-ledger endpoint instead.

For the new endpoint documentation, refer to: GET /general-ledger

Returns General Ledger Balances for Date Range passed

Authorizations:
OAuth2
Request Body schema: application/json

General Ledger Request

currency
required
string

Currency to return results in

LocationId
required
integer

Location to consolidate results for

startDate
required
string <date>
endDate
required
string <date>
status
string
Enum: "posted" "draft" "all"

Journal status

consolidated
boolean

Show consolidated balance by Location

offset
integer
Default: 0
limit
integer [ 1 .. 99 ]
order
string
Default: "number:DESC"
object

Responses

Request samples

Content type
application/json
{
  • "status": "posted",
  • "currency": "USD",
  • "LocationId": 0,
  • "consolidated": true,
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "offset": 0,
  • "limit": 1,
  • "order": "number:DESC",
  • "where": {
    }
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "totalItems": 0
}

Trial Balance Deprecated

This endpoint is deprecated. Please use the new GET /trial-balance endpoint instead.

For the new endpoint documentation, refer to: GET /trial-balance

Returns Trial Balance for Date Ranges passed Balance Sheet accounts include all transactions until endDate Income Statement accounts include all transactions from start of accounting year until endDate

Authorizations:
OAuth2
Request Body schema: application/json

Trial Balance Request

currency
required
string

Currency to return results in

LocationId
required
integer

Location to consolidate results for

required
Array of objects
status
string
Enum: "posted" "draft" "all"

Journal status

offset
integer
Default: 0
limit
integer [ 1 .. 99 ]
order
string
Default: "number:DESC"
object
DimensionType
string
Enum: "CostCenter" "Product" "Job" "Customer" "Vendor" "Custom1" "Custom2" "Custom3"
DimensionId
integer
consolidated
boolean

If true, returns consolidated balance of all locations, false returns balance just for that location

Responses

Request samples

Content type
application/json
{
  • "status": "posted",
  • "currency": "USD",
  • "LocationId": 0,
  • "dateRanges": [
    ],
  • "offset": 0,
  • "limit": 1,
  • "order": "number:DESC",
  • "where": {
    },
  • "DimensionType": "CostCenter",
  • "DimensionId": 0,
  • "consolidated": true
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "totalItems": 0
}

FX Remeasure

FX Remeasure

Delete Journals

Delete remeasurement journals and reopens FX for the period.

If the FX remeasurement process is already running, this endpoint will return an error.

Accounting Period FX status must be "closed" but the period should still be "open".

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
string

AccountPeriod._id

Responses

Post Journals

Posts remeasurement journals for the period.

The journals are posted asynchronously, this endpoint will return a 202 Accepted response, and queue the background job to run.

If the remeasurement process is already running, this endpoint will return an error.

Accounting Period must not be in "closed" state and should have ended i.e. period's end date should be in the past.

If remeasurement rates have not been set for the period, this endpoint will return an error.

The background job will post the remeasurements and close FX for the period.

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
string

AccountPeriod._id

Responses

Get Balances

Return the balances for the accounting period remeasurement

Field Filterable Sortable
LedgerAccountId
LocationId
currency
Location_currency
LedgerAccount_number
Location_name
Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
string

AccountPeriod._id

query Parameters
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: "currency:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Get Rates

Returns current rates set for the accouting period remeasurement

The results are a list of all currencies and their end of period rate

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
string

AccountPeriod._id

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Upsert Rates

Update/Insert the rates for the accounting period

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
string

AccountPeriod._id

Request Body schema: application/json

Base currency and fx rate currency pairs

Array
baseCurrency
string

example "USD"

toCurrency
string

example "EUR"

rate
number

Responses

Request samples

Content type
application/json
[
  • {
    }
]

FX Revalue

FX Revalue

Get Rates

Returns current rates set for the accouting period revaluation The results are a list of all currencies and their end of period rate (example results are two possible currencies)

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
integer

AccountingPeriod._id value

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Save Rates

Save the rates for the accounting period Example shows rates for two possible currencies. Currencies to save rates for should be obtained from GET fx-revalue/rates/:id

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
integer

AccountingPeriod._id value

Request Body schema: application/json

Base currency and fx rate currency pairs

currency
required
string

example "USD"

required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "currency": "string",
  • "rates": [
    ]
}

Post Adjustments

Post FX Revaluation entries for the period

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
integer

AccountingPeriod._id value

Responses

Delete Adjustments

Delete FX Revaluation entries for the period

Authorizations:
OAuth2
path Parameters
AccountingPeriodId
required
integer

AccountingPeriod._id value

Responses

Invoices

Invoices

Search

Field Filterable Sortable
_id
number
externalId
type
reference
invoiceDate
postedDate
dueDate
amountPayable
amount
CustomerId
Customer.name
customFields
currency
LocationId
ICLocationId
status
SalesOrderId
SystemJobId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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:DESC"

Order to return results in. ex "date:desc"

credit
boolean
Default: false

If true, only returns AR Credits i.e. invoices with a negative amount.

If false or not specified, only returns invoice with a positive amount.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Invoice

Webhooks

Invoice CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Invoice

One of [Customer.name, CustomerId] is Required One of [Location.id, LocationId] is Required One of [ARAccount.number, ARAccountId] is Required

invoiceDate
required
string <date>
postedDate
required
string <date>
CustomerId
required
integer

Ref: Customer._id

LocationId
required
integer

Ref: Location._id

ARAccountId
required
integer

Ref: LedgerAccount._id

currency
required
string <ISO4217 3 Char Code>
externalId
string
type
string
dueDate
string <date>
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

reference
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
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

object
TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

SalesOrderId
integer

Ref: SalesOrder._id

object
Array of objects

Handling of LedgerAccountId:

ItemId set LedgerAccountId Set Result
Yes Yes Use LedgerAccountId
Yes No Use Item.InvoiceAccountId
No Yes Use LedgerAccountId
No No Error is thrown

** If LedgerAccountId is set, it will override the LedgerAccount.number **

Tax Logic:

TaxCodeId set TaxAmount set Result Tax LedgerAccount
Yes Yes Use TaxAmount, even if set to 0 TaxCode.LedgerAccountId
Yes No taxAmount = (unitAmount * quantity) * (TaxCode.rate / 100) TaxCode.LedgerAccountId
No Yes Use TaxAmount Settings.defaultSalesTaxId
No No No Tax Set No Tax Line Added

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "type": "string",
  • "invoiceDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "reference": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "ARAccountId": 0,
  • "ARAccount": {
    },
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "SalesOrderId": 0,
  • "SalesOrder": {
    },
  • "InvoiceLineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "type": "string",
  • "number": "string",
  • "invoiceDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "reference": "string",
  • "currency": "string",
  • "amount": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "CustomerId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "ARAccountId": 0,
  • "TemplateId": 0,
  • "SalesOrderId": 0,
  • "attachments": []
}

Search Lines

Field Filterable Sortable
_id
description
unitAmount
taxAmount
quantity
customFields
createdAt
updatedAt
InvoiceId
Invoice.status
Invoice.invoiceDate
Invoice.AgentId
Invoice.LocationId
Invoice.ICLocationId
Invoice.createdAt
Invoice.updatedAt
Invoice.number
CostCenterId
ItemId
Item.salePrice
Item.purchasePrice
JobId
LedgerAccountId
ProductId
Custom1Id
Custom2Id
Custom3Id
TaxCodeId
LedgerAccount.name
Location.name
ICLocation.name
TaxCode.code
Customer.name
Product.id
CostCenter.id
Job.number
Authorizations:
OAuth2
query Parameters
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: "Invoice.invoiceDate:DESC"

Order to return results in. ex "date:desc"

credit
boolean

Filter by credit status of the Invoice. Operates as follows:

  • If 'credit' is false, lines from Invoices that have 'Invoice.amount' greater than or equal to zero will be returned
  • If 'credit' is true, lines from Invoices that have 'Invoice.amount' less than zero will be returned
  • If 'credit' is not provided, all lines will be returned

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Count Lines

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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 Invoice. Operates as follows:

  • If 'credit' is false, lines from Invoices that have 'Invoice.amount' greater than or equal to zero will be returned
  • If 'credit' is true, lines from Invoices that have 'Invoice.amount' less than zero will be returned
  • If 'credit' is not provided, all lines will be returned

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Unpaid Invoices

This endpoint returns unpaid invoices/credits.

The parameters of this endpoint are the same as for Invoices Search

The following parameters are also supported in addition to the ones listed in Invoices Search

Authorizations:
OAuth2
query Parameters
filterCurrency
string

Provide this to only show unpaid invoices in the specified currency.

This parameter is optional.

filterLocationId
string <number>

Ref: "Location"._id

Provide this to only show unpaid invoices from the specified location.

Invoices from child locations of the provided location are not included.

This parameter is optional.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Unpaid Invoices Count

This endpoint counts unpaid invoices/credits.

The parameters of this endpoint are the same as for Invoices Search

The following parameters are also supported in addition to the ones listed in Invoices Search

Authorizations:
OAuth2
query Parameters
filterCurrency
string

Provide this to only count unpaid invoices in the specified currency.

This parameter is optional.

filterLocationId
string <number>

Ref: "Location"._id

Provide this to only count unpaid invoices from the specified location.

Invoices from child locations of the provided location are not included.

This parameter is optional.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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 counts AR Credits i.e. invoices with a negative amount.

If false or not specified, only counts invoice with a positive amount.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create Line

creates a new Invoice Line

Webhooks

InvoiceLineItem CREATE
Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Request Body schema: application/json
unitAmount
required
string <number>
quantity
required
string <number>
description
string

Required if ItemId is not set

customFields
object
Default: {}

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

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

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "unitAmount": "string",
  • "quantity": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "description": "string",
  • "unitAmount": "string",
  • "quantity": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "LedgerAccountId": 0
}

Delete

Delete one Invoice

Webhooks

Invoice DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Invoice Id

Responses

Update

Update One Invoice

Webhooks

Invoice UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Invoice Id

Request Body schema: application/json

JSON body containing key and values to update

Can only update an invoice with "created" status

externalId
string
type
string
invoiceDate
string <date>
postedDate
string <date>
dueDate
string <date>
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

reference
string
currency
string <ISO4217 3 Char Code>
customFields
object

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
CustomerId
integer

Ref: Customer._id

object
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

ARAccountId
integer

Ref: LedgerAccount._id

object
TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

SalesOrderId
integer

Ref: SalesOrder._id

object

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "type": "string",
  • "invoiceDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "reference": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "ARAccountId": 0,
  • "ARAccount": {
    },
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "SalesOrderId": 0,
  • "SalesOrder": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "type": "string",
  • "number": "string",
  • "invoiceDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "reference": "string",
  • "currency": "string",
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "CustomerId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "ARAccountId": 0,
  • "TemplateId": 0,
  • "SalesOrderId": 0
}

Delete Line

Deletes an Invoice Line

Can only delete a line from an invoice with "created" status

Webhooks

InvoiceLineItem DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

InvoiceLine._id

Responses

Update Line

Update an Invoice Line

Webhooks

InvoiceLineItem UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

InvoiceLineItem._id

Request Body schema: application/json
description
string

Required if ItemId is not set

unitAmount
string <number>
quantity
string <number>
customFields
object
Default: {}

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

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

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "unitAmount": "string",
  • "quantity": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "description": "string",
  • "unitAmount": "string",
  • "quantity": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "LedgerAccountId": 0
}

Email

Email Invoice to Customers email addresss

Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Responses

Issue

Issue Invoice

Webhooks

Invoice ISSUE
Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Responses

One

Get one Invoice

Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "status": "created",
  • "externalId": "string",
  • "type": "string",
  • "number": "string",
  • "invoiceDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "dueDate": "2019-08-24",
  • "notes": "string",
  • "attachments": [],
  • "approved_on": "2019-08-24",
  • "approved_name": "string",
  • "approved_email": "user@example.com",
  • "reference": "string",
  • "currency": "string",
  • "amount": "string",
  • "amountPayable": "string",
  • "customFields": { },
  • "SystemJobId": "string",
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "ShippingAddress": {
    },
  • "BillingAddressId": 0,
  • "BillingAddress": {
    },
  • "ARAccountId": 0,
  • "ARAccount": {
    },
  • "TemplateId": 0,
  • "SalesOrderId": 0,
  • "SalesOrder": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "InvoiceLineItems": [
    ]
}

Payments

This endpoint returns only payments for the specified invoice. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

PDF

Invoice PDF

Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Responses

Void

Void Invoice

Webhooks

Invoice VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Invoice._id

Request Body schema: application/json

Optional body to set data on void journal entry

description
string
postedDate
string <date>
Default: "NOW"

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "postedDate": "NOW"
}

Items

Items

Search

Field Filterable Sortable
_id
externalIds
number
name
sku
type
description
inactive
salePrice
purchasePrice
customFields
InvoiceAccountId
BillAccountId
InventoryAccountId
CogsAccountId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "number:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Item

Webhooks

Item CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Item

name
required
string
externalIds
string
salePrice
string <number>
Default: "0"
purchasePrice
string <number>
description
string
sku
string

Must be unique if given

type
string
Default: "inventory"
Enum: "inventory" "consumable" "direct"
inactive
boolean
Default: false
customFields
object

Key->Value hash of custom field names and values. Custom fields must be defined via the UI to be visible in the UI

InvoiceAccountId
integer
Default: "Settings.defaultItemInvoiceAccountId"

Ref: Ledger Account._id

object
BillAccountId
integer
Default: "Settings.defaultItemInventoryAccrualId"

Ref: Ledger Account._id

object
InventoryAccountId
integer
Default: "Settings.defaultItemInventoryAssetId"

Ref: Ledger Account._id

object
CogsAccountId
integer
Default: "Settings.defaultItemCOGSId"

Ref: Ledger Account._id

object

Responses

Request samples

Content type
application/json
{
  • "externalIds": "string",
  • "name": "string",
  • "salePrice": "0",
  • "purchasePrice": "string",
  • "description": "string",
  • "sku": "string",
  • "type": "inventory",
  • "inactive": false,
  • "customFields": { },
  • "InvoiceAccountId": "Settings.defaultItemInvoiceAccountId",
  • "InvoiceAccount": {
    },
  • "BillAccountId": "Settings.defaultItemInventoryAccrualId",
  • "BillAccount": {
    },
  • "InventoryAccountId": "Settings.defaultItemInventoryAssetId",
  • "InventoryAccount": {
    },
  • "CogsAccountId": "Settings.defaultItemCOGSId",
  • "CogsAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "externalIds": "string",
  • "salePrice": "string",
  • "purchasePrice": "string",
  • "description": "string",
  • "sku": "string",
  • "type": "inventory",
  • "customFields": { },
  • "InvoiceAccountId": 0,
  • "BillAccountId": 0,
  • "InventoryAccountId": 0,
  • "CogsAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Item

Webhooks

Item DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Item Id

Responses

One

Get one Item

Authorizations:
OAuth2
path Parameters
id
required
string

Item Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "externalIds": "string",
  • "salePrice": "string",
  • "purchasePrice": "string",
  • "description": "string",
  • "sku": "string",
  • "type": "inventory",
  • "customFields": { },
  • "inactive": true,
  • "InvoiceAccountId": 0,
  • "BillAccountId": 0,
  • "InventoryAccountId": 0,
  • "CogsAccountId": 0,
  • "InvoiceAccount": {
    },
  • "BillAccount": {
    },
  • "InventoryAccount": {
    },
  • "CogsAccount": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update One Item

Webhooks

Item UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Item Id

Request Body schema: application/json

JSON body containing key and values to update

externalIds
string
name
string
salePrice
string <number>
purchasePrice
string <number>
description
string
sku
string

Must be unique if given

type
string
Enum: "inventory" "consumable"

If an item is direct, type cannot be updated. Type cannot be updated to direct.

inactive
boolean
Default: false
customFields
object

Key->Value hash of custom field names and values. Custom fields must be defined via the UI to be visible in the UI

InvoiceAccountId
integer

Ref: Ledger Account._id

object
BillAccountId
integer

Ref: Ledger Account._id

object
InventoryAccountId
integer

Ref: Ledger Account._id

object
CogsAccountId
integer

Ref: Ledger Account._id

object

Responses

Request samples

Content type
application/json
{
  • "externalIds": "string",
  • "name": "string",
  • "salePrice": "string",
  • "purchasePrice": "string",
  • "description": "string",
  • "sku": "string",
  • "type": "inventory",
  • "inactive": false,
  • "customFields": { },
  • "InvoiceAccountId": 0,
  • "InvoiceAccount": {
    },
  • "BillAccountId": 0,
  • "BillAccount": {
    },
  • "InventoryAccountId": 0,
  • "InventoryAccount": {
    },
  • "CogsAccountId": 0,
  • "CogsAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "externalIds": "string",
  • "salePrice": "string",
  • "purchasePrice": "string",
  • "description": "string",
  • "sku": "string",
  • "type": "inventory",
  • "customFields": { },
  • "InvoiceAccountId": 0,
  • "BillAccountId": 0,
  • "InventoryAccountId": 0,
  • "CogsAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Summary

Summary of items

Authorizations:
OAuth2
path Parameters
id
required
string

Item Id

query Parameters
childWh
boolean

Determine if the summary balances include stock from child warehouses

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Jobs

Jobs

Search

Field Filterable Sortable
_id
name
number
description
status
inactive
CustomerId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "number:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create Job

Webhooks

Job CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body

number
required
string
name
required
string
CustomerId
required
number
status
required
string
Enum: "quoted" "inProgress" "completed" "closed"
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "name": "string",
  • "status": "quoted",
  • "CustomerId": 0,
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "description": "string",
  • "status": "quoted",
  • "CustomerId": 0,
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Job

Webhooks

Job DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Job Id

Responses

One

Get one Job

Authorizations:
OAuth2
path Parameters
id
required
string

Job Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "description": "string",
  • "status": "quoted",
  • "inactive": true,
  • "CustomerId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "Customer": {
    }
}

Update

Update Job

Webhooks

Job UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Job Id

Request Body schema: application/json

JSON body containing key and values to update

number
string
name
string
description
string
status
string
Enum: "quoted" "inProgress" "completed" "closed"
inactive
boolean
CustomerId
number

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "name": "string",
  • "description": "string",
  • "status": "quoted",
  • "inactive": true,
  • "CustomerId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "name": "string",
  • "description": "string",
  • "status": "quoted",
  • "inactive": true,
  • "CustomerId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Journals

Journals

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "draft" "editable" "icdoc" "posted"

editable counts draft journals that can be edited directly.

icdoc counts draft intercompany document journals that can be edited directly.

draft counts journals that aren't posted.

posted counts journals that are posted.

Not set counts all journals.

LocationId
number

Will include transactions from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create

Create new Journal

Webhooks

Journal CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Journal

status
required
string
Enum: "draft" "posted"
entryType
required
string
Enum: "Standard" "Reversing"
sourceLedger
required
string
Enum: "Financial" "AR" "AP"
reference
required
string
currency
required
string <ISO4217 3 Char Code>

Ref: Currency.code

required
Array of objects

Minimum 2 rows required. SUM(debits) = SUM(credits).

customCurrencyRate
string <number>
Deprecated

Must be > 0.

Should only be set if currency is a non ISO4217 currency.

This rate is the value of "currency" -> "USD".

This overrides customForexRates.

Array of objects

Custom forex rates for all the posted currency to reported currency pairs in this Journal.

If posted currency is a non ISO4217 currency, rates are Required for all posted currency to reported currency pairs up the entity structure for this Journal.

For ISO4217 currencies, this is optional. When not provided, the system will use the forex rates for the transactionDate of this Journal.

notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

reverseDate
string <date>
Default: "First day of month after posted date."

If entryType = 'Reversing', then this date will be used as the postedDate for the reversing Transaction Lines.

icDoc
boolean

True if this is an Intercompany Document Journal Entry.

Not currently recommended to create these via API.

Responses

Request samples

Content type
application/json
{
  • "status": "draft",
  • "entryType": "Standard",
  • "sourceLedger": "Financial",
  • "reference": "string",
  • "currency": "string",
  • "customCurrencyRate": "string",
  • "customForexRates": [
    ],
  • "notes": "string",
  • "attachments": [],
  • "reverseDate": "First day of month after posted date.",
  • "icDoc": true,
  • "Transactions": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Search

Field Filterable Sortable
_id
currency
entryType
ICLocationId
LocationId
number
postedDate
reference
reportingCurrency
reverseDate
sourceLedger
status
SystemJobId
transactionDate
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "draft" "editable" "icdoc" "posted"

editable returns draft journals that can be edited directly.

icdoc returns draft intercompany document journals that can be edited directly.

draft returns journals that aren't posted.

posted returns journals that are posted.

Not set returns all journals.

order
string
Default: "number:ASC"

Order to return results in. ex "date:desc"

LocationId
number

Will include transactions from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Delete

Delete one Journal

Journal can only be deleted in the following conditions:

  • Journal is in draft status
  • Journal sourceLedger is Financial, AP or AR
  • Journal is not linked to any documents (Bills / Invoices / Cash Receipts / Vendor Credits / Batch Payments)
  • Journal does not have any transactions with txn_type other than standard

Webhooks

Journal DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Journal Id

Responses

One

Get one Journal

Authorizations:
OAuth2
path Parameters
id
required
string

Journal _id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": 0,
  • "status": "draft",
  • "entryType": "Standard",
  • "sourceLedger": "Financial",
  • "reference": "string",
  • "notes": "string",
  • "attachments": [],
  • "reverseDate": "2019-08-24",
  • "icDoc": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "AccountingPeriodId": 0,
  • "CryptoTransactionId": 0,
  • "Transactions": [
    ]
}

Update

Update one Journal

Journal can only be updated in the following conditions:

  • Journal is in draft status
  • Journal sourceLedger is Financial, AP or AR
  • Journal is not linked to any documents (Bills / Invoices / Cash Receipts / Vendor Credits / Batch Payments)
  • Journal does not have any transactions with txn_type other than standard

Webhooks

Journal UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Journal Id

Request Body schema: application/json

JSON object containing key and values to update

Cannot update posted journal

Transaction lines are replaced with the new lines provided. So new Transaction._id values will be generated for each line, and old Transactions will be deleted.

entryType
string
Enum: "Standard" "Reversing"
sourceLedger
string
Enum: "Financial" "AR" "AP"
reference
string
currency
string <ISO4217 3 Char Code>

Ref: Currency.code

customCurrencyRate
string <number>
Deprecated

Must be > 0.

Should only be set if currency is a non ISO4217 currency.

This rate is the value of "currency" -> "USD".

Array of objects

Custom forex rates for all the posted currency to reported currency pairs in this Journal.

If posted currency is a non ISO4217 currency, rates are Required for all posted currency to reported currency pairs up the entity structure for this Journal.

For ISO4217 currencies, this is optional. When not provided, the system will use the forex rates for the transactionDate of this Journal.

notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

reverseDate
string <date>
Default: "First day of month after posted date."

If entryType = 'Reversing', then this date will be used as the postedDate for the reversing Transaction Lines.

icDoc
boolean

True if this is an Intercompany Document Journal Entry. Not currently recommended to create these via API.

Array of objects

Minimum 2 rows required. SUM(debits) = SUM(credits).

Responses

Request samples

Content type
application/json
{
  • "entryType": "Standard",
  • "sourceLedger": "Financial",
  • "reference": "string",
  • "currency": "string",
  • "customCurrencyRate": "string",
  • "customForexRates": [
    ],
  • "notes": "string",
  • "attachments": [],
  • "reverseDate": "First day of month after posted date.",
  • "icDoc": true,
  • "Transactions": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Search Lines

Field Filterable Sortable
_id
elim2
BillId
elimination
CashReceiptId
CostCenterId
currency
Custom1Id
Custom2Id
Custom3Id
CustomerId
description
InvoiceId
ICAccountId
ICLocationId
JobId
JournalId
Journal_entryType
Journal_notes
Journal_number
Journal_reference
Journal_status
Journal_sourceLedger
Journal_AccountingPeriodId
LedgerAccount_type
LedgerAccount_subtype
LedgerAccountId
Location_currency_rate
Location_currency_debit
Location_currency_credit
LocationId
SalesOrderId
ProductId
postedDate
transactionDate
reconcileId
reversing
SystemJobId
VendorId
VendorCreditId
BatchPaymentId
PaymentId
CryptoTxnId
credit
debit
txn_type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "postedDate:ASC"

Order to return results in. ex "date:desc"

LocationId
number

Will include transactions from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Lines Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Post

Post a journal

Can only Post a Journal in status "draft"

Can only Post a Journal with sourceLedger in ["Financial", "AR", "AP", "Inventory"]

Webhooks

Journal POSTED
Authorizations:
OAuth2
path Parameters
id
required
string

Journal Id

Responses

Ledger Accounts

Ledger Accounts

Search

Field Filterable Sortable
_id
name
number
naturalBalance
description
includeLocationChildren
type
subtype
canDelete
revalue_fx
inactive
createdAt
updatedAt
LocationId
Location.id
ICAccountId
ICAccount.number
useHistoricalConsolidationRate
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "number:ASC"

Order to return results in. ex "date:desc"

type
string
Enum: "Asset" "Liability" "Equity" "Revenue" "Expense"

Filter accounts by type (optional), if not provided all types will be returned

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create new Ledger Account

Webhooks

LedgerAccount CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Ledger Account

One of [LocationId, Location.id] is required

Only one of [ICAccountId, ICAccount.number] can be set

name
required
string
number
required
string <integer>
naturalBalance
required
string
Enum: "Debit" "Credit"
type
required
string
Enum: "Asset" "Liability" "Equity" "Revenue" "Expense"
subtype
required
string

Case in-sensitive

reportGroup
string
Enum: "Cash" "Accounts Receivable" "Other Current Assets" "Fixed Assets" "Other Assets" "Accounts Payable" "Other Current Liability" "Long Term Liability" "Equity" "Retained Earnings" "Revenue" "Other Income" "Operating Expense" "Cost of Revenue" "Other Expense" "Income Tax Expense"
description
string
includeLocationChildren
boolean
Default: false
canDelete
boolean
Default: true
revalue_fx
boolean
Default: false
inactive
boolean
Default: false
useHistoricalConsolidationRate
boolean
Default: false

If true, the account will use the historical consolidation rate

Can only be enabled for type = 'Equity' accounts

LocationId
integer

Ref: Location._id

ICAccountId
integer

Ref: LedgerAccount._id

object
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "number": "string",
  • "naturalBalance": "Debit",
  • "type": "Asset",
  • "reportGroup": "Cash",
  • "subtype": "string",
  • "description": "string",
  • "includeLocationChildren": false,
  • "canDelete": true,
  • "revalue_fx": false,
  • "inactive": false,
  • "useHistoricalConsolidationRate": false,
  • "LocationId": 0,
  • "ICAccountId": 0,
  • "Location": {
    },
  • "ICAccount": {
    }
}

Response samples

Content type
application/json
[
  • {
    }
]

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

type
string
Enum: "Asset" "Liability" "Equity" "Revenue" "Expense"

Filter accounts by type (optional), if not provided all types will be returned

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete a Ledger Account

Webhooks

LedgerAccount DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Ledger Account Id

Responses

One

Get one Ledger Account

Authorizations:
OAuth2
path Parameters
id
required
string

Ledger Account Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "number": "string",
  • "naturalBalance": "Debit",
  • "type": "Asset",
  • "subtype": "string",
  • "reportGroup": "Cash",
  • "description": "string",
  • "includeLocationChildren": true,
  • "canDelete": true,
  • "revalue_fx": true,
  • "inactive": true,
  • "useHistoricalConsolidationRate": true,
  • "LocationId": 0,
  • "ICAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "Location": {
    },
  • "ICAccount": {
    }
}

Update

Update one Ledger Account

Webhooks

Ledger Account UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Ledger Account Id

Request Body schema: application/json

JSON object containing key and values to update

Only one of [LocationId, Location.id] can be set

Only one of [ICAccountId, ICAccount.number] can be set

name
string
number
string <integer>
naturalBalance
string
Enum: "Debit" "Credit"
type
string
Enum: "Asset" "Liability" "Equity" "Revenue" "Expense"
reportGroup
string
Enum: "Cash" "Accounts Receivable" "Other Current Assets" "Fixed Assets" "Other Assets" "Accounts Payable" "Other Current Liability" "Long Term Liability" "Equity" "Retained Earnings" "Revenue" "Other Income" "Operating Expense" "Cost of Revenue" "Other Expense" "Income Tax Expense"
subtype
string

Case in-sensitive

description
string
includeLocationChildren
boolean
Default: false
revalue_fx
boolean
Default: false
inactive
boolean
Default: false
useHistoricalConsolidationRate
boolean
Default: false
LocationId
integer

Ref: Location._id

ICAccountId
integer

Ref: LedgerAccount._id

object
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "number": "string",
  • "naturalBalance": "Debit",
  • "type": "Asset",
  • "reportGroup": "Cash",
  • "subtype": "string",
  • "description": "string",
  • "includeLocationChildren": false,
  • "revalue_fx": false,
  • "inactive": false,
  • "useHistoricalConsolidationRate": false,
  • "LocationId": 0,
  • "ICAccountId": 0,
  • "Location": {
    },
  • "ICAccount": {
    }
}

Response samples

Content type
application/json
[
  • {
    }
]

Delete Subtype

Delete a Subtype

Authorizations:
OAuth2
path Parameters
param
required
string

subtype

Responses

Get All Subtypes for type

Authorizations:
OAuth2
path Parameters
param
required
string

Ledger Account Type

Responses

Response samples

Content type
application/json
[
  • "string"
]

Get All Subtypes

Returns a list of all defined ledger account subtypes

Authorizations:
OAuth2
query Parameters
mapgroups
boolean

If provided, will return subtypes with group mappings as a collection;

If not provided, will return all subtypes as an array of strings;

Responses

Response samples

Content type
application/json
[ ]

Upsert Subtypes

Upsert subtype to report group mappings

Authorizations:
OAuth2
Request Body schema: application/json

Existing subtypes will be updated, new subtypes will be created.

The subtype field is case insensitive and must be unique.

Array
subtype
required
string

Must be unique and is case insensitive

reportGroup
required
string
Enum: "Cash" "Accounts Receivable" "Other Current Assets" "Fixed Assets" "Other Assets" "Accounts Payable" "Other Current Liability" "Long Term Liability" "Equity" "Retained Earnings" "Revenue" "Other Income" "Operating Expense" "Cost of Revenue" "Other Expense" "Income Tax Expense"

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Locations

Locations

Search Accounts

Field Filterable Sortable
_id
number
name
Authorizations:
OAuth2
path Parameters
id
required
string

Location _id

query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Search

Field Filterable Sortable
_id
id
name
description
currency
externalId
externalSource
parent_id
Parent.id
FXGLAccountId
Authorizations:
OAuth2
query Parameters
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: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Location

Webhooks

Location CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Location

One of [Parent.id, parent_id] must be set

Only one of [FXGLAccount.number, FXGLAccountId] can be set

id
required
string
name
required
string
currency
required
string

Ref: Currency.code

description
string
imageURL
string <url>
entityName
string
entityEmail
string
entityPhone
string
createdAt
string <date-time>
updatedAt
string <date-time>
parent_id
integer

Ref: Location._id

externalId
string
externalSource
string
FXGLAccountId
integer

Ref: LedgerAccount._id

object
object
object

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "description": "string",
  • "imageURL": "string",
  • "entityName": "string",
  • "entityEmail": "string",
  • "entityPhone": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "parent_id": 0,
  • "externalId": "string",
  • "externalSource": "string",
  • "FXGLAccountId": 0,
  • "Address": {
    },
  • "Parent": {
    },
  • "FXGLAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "description": "string",
  • "imageURL": "string",
  • "entityName": "string",
  • "entityEmail": "string",
  • "entityPhone": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "parent_id": 0,
  • "parent_path": [
    ],
  • "externalId": "string",
  • "externalSource": "string",
  • "AddressId": 0,
  • "FXGLAccountId": 0
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Location

Webhooks

Location DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Location Id

Responses

One

Get one Location

Authorizations:
OAuth2
path Parameters
id
required
string

Location _id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "description": "string",
  • "imageURL": "string",
  • "entityName": "string",
  • "entityEmail": "string",
  • "entityPhone": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "parent_id": 0,
  • "parent_path": [
    ],
  • "externalId": "string",
  • "externalSource": "string",
  • "AddressId": 0,
  • "FXGLAccountId": 0,
  • "Address": {
    },
  • "Parent": {
    },
  • "FXGLAccount": {
    }
}

Update

Update One Location

Webhooks

Location UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Location Id

Request Body schema: application/json

JSON body containing key and values to update

Only one of [Parent.id, parent_id] can be set

Only one of [FXGLAccount.number, FXGLAccountId] can be set

id
string
name
string
currency
string

Ref: Currency.code

description
string
imageURL
string <url>
entityName
string
entityEmail
string
entityPhone
string
createdAt
string <date-time>
updatedAt
string <date-time>
parent_id
integer

Ref: Location._id

externalId
string
externalSource
string
FXGLAccountId
integer

Ref: LedgerAccount._id

object
object
object

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "description": "string",
  • "imageURL": "string",
  • "entityName": "string",
  • "entityEmail": "string",
  • "entityPhone": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "parent_id": 0,
  • "externalId": "string",
  • "externalSource": "string",
  • "FXGLAccountId": 0,
  • "Address": {
    },
  • "Parent": {
    },
  • "FXGLAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "description": "string",
  • "imageURL": "string",
  • "entityName": "string",
  • "entityEmail": "string",
  • "entityPhone": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "parent_id": 0,
  • "parent_path": [
    ],
  • "externalId": "string",
  • "externalSource": "string",
  • "AddressId": 0,
  • "FXGLAccountId": 0
}

Descendants

Get Location with Descendants (children, grandchildren, etc) in a nested tree.

Authorizations:
OAuth2
path Parameters
id
required
string

Location Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "children": [
    ]
}

Me

Get My Location Tree

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "currency": "string",
  • "children": [
    ]
}

Part Numbers

Part Numbers

Create

Create new Part Number

Webhooks

Part Number CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Part Number

VendorId
required
number
ItemId
required
number
partNumber
required
string

Responses

Request samples

Content type
application/json
{
  • "VendorId": 0,
  • "ItemId": 0,
  • "partNumber": "string"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "VendorId": 0,
  • "ItemId": 0,
  • "partNumber": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Search

Field Filterable Sortable
_id
VendorId
ItemId
partNumber
Item.name
Vendor.name
Authorizations:
OAuth2
query Parameters
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

order
string
Default: "_id:ASC"

Order to return results in. ex "date:desc"

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

One

Get one Part Number

Authorizations:
OAuth2
path Parameters
id
required
string

Part Number Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "VendorId": 0,
  • "ItemId": 0,
  • "partNumber": "string",
  • "Item": {
    },
  • "Vendor": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Part Number

Webhooks

PartNumber DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Part Number Id

Responses

Update

Update one Part Number

Webhooks

Part Number UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Part Number Id

Request Body schema: application/json

JSON object containing key and values to update

partNumber
string

Responses

Request samples

Content type
application/json
{
  • "partNumber": "string"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "VendorId": 0,
  • "ItemId": 0,
  • "partNumber": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Payments

Payments

Search

Field Filterable Sortable
_id
externalId
type
checkNumber
status
amount
paymentDate
postedDate
memo
notes
currency
BillId
VendorId
CustomerId
VendorCreditId
LedgerAccountId
CashReceiptId
LocationId
BatchPaymentId
InvoiceId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "_id:ASC"

Order to return results in. ex "date:desc"

type
string
Enum: "ap" "ar"

Filter by AP or AR payments

If not specified, all payment types will be returned

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Payment

Webhooks

Payment CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Payment

Depending on the type different fields are required.

This table defines which fields are required or not allowed based on the type.

Fields not mentioned here are optional

Field manual vendorcredit cashreceipt refund ap_refund
amount
paymentDate
BillId
VendorCreditId
LedgerAccountId
CashReceiptId
InvoiceId

✅ - Field required for type

❌ - Field not allowed for type

Created payments will be created in created status unless the setting for Auto-Approve (AR/AP) is enabled, then the status will be approved

type
required
string
Enum: "manual" "vendorcredit" "cashreceipt" "refund" "ap_refund"
amount
required
string <number>
paymentDate
required
string <date>
externalId
string
externalCheckId
string
externalCheckBankId
string
checkNumber
string
postedDate
string <date>

Defaults to paymentDate

memo
string
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

BillId
integer

Ref: Bill._id

VendorCreditId
integer

Ref: VendorCredit._id

LedgerAccountId
integer

Ref: LedgerAccount._id

CashReceiptId
integer

Ref: CashReceipt._id

AddressId
integer

Ref: Address._id

InvoiceId
integer

Ref: Invoice._id

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "externalCheckId": "string",
  • "externalCheckBankId": "string",
  • "type": "manual",
  • "checkNumber": "string",
  • "amount": "string",
  • "paymentDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "memo": "string",
  • "notes": "string",
  • "attachments": [],
  • "BillId": 0,
  • "VendorCreditId": 0,
  • "LedgerAccountId": 0,
  • "CashReceiptId": 0,
  • "AddressId": 0,
  • "InvoiceId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "externalCheckId": "string",
  • "externalCheckBankId": "string",
  • "type": "manual",
  • "number": "string",
  • "checkNumber": "string",
  • "status": "created",
  • "amount": "string",
  • "paymentDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "memo": "string",
  • "notes": "string",
  • "attachments": [],
  • "currency": "string",
  • "BillId": 0,
  • "VendorCreditId": 0,
  • "LedgerAccountId": 0,
  • "CashReceiptId": 0,
  • "AddressId": 0,
  • "LocationId": 0,
  • "InvoiceId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Approve

Approve one Payment

Only created status payments can be approved

Authorizations:
OAuth2
path Parameters
id
required
string

Payment Id

Responses

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Payment

Only created status payments can be deleted

Webhooks

Payment DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Payment Id

Responses

One

Get one Payment

Authorizations:
OAuth2
path Parameters
id
required
string

Payment Id

Responses

Response samples

Content type
application/json
{
  • "_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",
  • "attachments": [],
  • "currency": "string",
  • "BillId": 0,
  • "VendorCreditId": 0,
  • "LedgerAccountId": 0,
  • "CashReceiptId": 0,
  • "AddressId": 0,
  • "LocationId": 0,
  • "InvoiceId": 0,
  • "BatchPaymentId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "Address": {
    },
  • "Bill": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "Invoice": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "VendorCredit": {
    },
  • "CashReceipt": {
    },
  • "Location": {
    },
  • "LedgerAccount": {
    },
  • "BatchPayment": {
    }
}

Update

Update One Payment

Webhooks

Payment UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Payment Id

Request Body schema: application/json

JSON body containing key and values to update

externalId
string
externalCheckId
string
externalCheckBankId
string
checkNumber
string
amount
string <number>
paymentDate
string <date>
postedDate
string <date>

Defaults to paymentDate

AddressId
number
memo
string
notes
string
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "externalCheckId": "string",
  • "externalCheckBankId": "string",
  • "checkNumber": "string",
  • "amount": "string",
  • "paymentDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "AddressId": 0,
  • "memo": "string",
  • "notes": "string",
  • "attachments": []
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "externalCheckId": "string",
  • "externalCheckBankId": "string",
  • "type": "manual",
  • "number": "string",
  • "checkNumber": "string",
  • "status": "created",
  • "amount": "string",
  • "paymentDate": "2019-08-24",
  • "postedDate": "2019-08-24",
  • "memo": "string",
  • "notes": "string",
  • "attachments": [],
  • "currency": "string",
  • "BillId": 0,
  • "VendorCreditId": 0,
  • "LedgerAccountId": 0,
  • "CashReceiptId": 0,
  • "AddressId": 0,
  • "LocationId": 0,
  • "InvoiceId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Void

Void one Payment

Voided payments will post a voided journal

Cannot void if payment is not approved

Webhooks

Payment VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Payment._id

Request Body schema: application/json

Optional JSON body to override the journal description and postedDate

description
string
postedDate
string <date>

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "postedDate": "2019-08-24"
}

Periods

Accounting Periods

Close

Close a specific period task

Webhooks

AccountingPeriod: CLOSE
Authorizations:
OAuth2
path Parameters
id
required
string

Period Id

task
required
string
Enum: "ar" "ap" "financial" "crypto" "inventory" "period"

Task to close

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "status": "open",
  • "fx_revalue_status": "open",
  • "financial_status": "open",
  • "ar_status": "open",
  • "ap_status": "open",
  • "crypto_status": "open",
  • "inventory_status": "open",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "AccountingYearId": "string"
}

Missing Consolidation Rates

Gets the missing consolidation rates for a period

Consolidation rates are used to generate consolidated financial reports

Authorizations:
OAuth2
path Parameters
id
required
string

AccountingPeriod._id

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Open

Open a specific period task

Webhooks

AccountingPeriod: OPEN
Authorizations:
OAuth2
path Parameters
id
required
string

Period Id

task
required
string
Enum: "ar" "ap" "financial" "crypto" "inventory" "period"

Task to open

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "start": "2019-08-24T14:15:22Z",
  • "end": "2019-08-24T14:15:22Z",
  • "status": "open",
  • "fx_revalue_status": "open",
  • "financial_status": "open",
  • "ar_status": "open",
  • "ap_status": "open",
  • "crypto_status": "open",
  • "inventory_status": "open",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "AccountingYearId": "string"
}

Get All

Gets all Periods

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Preferences

Preferences are used to store user UI preferences. There are currently the following types:

Type Description
table Stores information regarding default column visibility, sorting order, and page size
filter Stores information for a tables view. These can be useful in storing different re-usable queries

Create

Create new Preferences

Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Preference

key
required
string
userId
number or null
type
string or null
name
string or null
data
object or null

Responses

Request samples

Content type
application/json
{
  • "userId": 0,
  • "type": "string",
  • "key": "string",
  • "name": "string",
  • "data": { }
}

Response samples

Content type
application/json
[
  • {
    }
]

Search

Returns a list of preferences in descending order by key

Field Filterable
_id
userId
type
key
name
data
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

One

Get one Preference

Authorizations:
OAuth2
path Parameters
id
required
string

Preference Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "userId": "string",
  • "type": "string",
  • "key": "string",
  • "name": "string",
  • "data": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Preference

Authorizations:
OAuth2
path Parameters
id
required
string

Preference Id

Responses

Update

Update one Preference

Authorizations:
OAuth2
path Parameters
id
required
string

Preference Id

Request Body schema: application/json

JSON object containing key and values to update

data
object

Responses

Request samples

Content type
application/json
{
  • "data": { }
}

Response samples

Content type
application/json
[
  • {
    }
]

Products

Products

Search

Field Filterable Sortable
_id
id
name
description
inactive
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create Product

Authorizations:
OAuth2
Request Body schema: application/json

JSON body

id
required
string
name
required
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Product

Webhooks

Product DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Product Id

Responses

One

Get one Product

Authorizations:
OAuth2
path Parameters
id
required
string

Product Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update Product

Webhooks

Product UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Product Id

Request Body schema: application/json

JSON body containing key and values to update

id
string
name
string
description
string
inactive
boolean

Responses

Request samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Purchase Orders

Purchase Orders

Stock Adjustments

Get stock adjustments linked to a purchase order

The parameters of this endpoint are the same as for Stock Adjustment Search

Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Search

Field Filterable Sortable
_id
externalId
number
description
issueDate
deliveryDate
status
amount
currency
VendorId
WarehouseId
LocationId
customFields
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Purchase Order

Webhooks

PurchaseOrder CREATE
SOLineItem CREATE - for each direct purchase line added to a Sales Order
SOLineItem UPDATE - for each direct purchase line added to an existing SOLineItem
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Purchase Order

One of [Location.id, LocationId] is Required

One of [Vendor.name, VendorId] is Required

One of [InventoryAccrualAccount.number, InventoryAccrualAccountId] is Required

One of [Warehouse.name, WarehouseId] is Required

VendorId
required
integer

Ref: Vendor._id

LocationId
required
integer

Ref: Location._id

WarehouseId
required
integer

Ref: Warehouse._id

currency
required
string <ISO4217 3 Char Code>

Ref: Currency.code - cannot use custom

externalId
string
description
string
notes
string
issueDate
string <date>
Default: "NOW"
deliveryDate
string <date>
Default: "NOW"
attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

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
InventoryReceivingAccountId
integer
Default: "Ref: Settings.defaultInventoryAccrualId"

Must be an active acccount "Ref: LedgerAccount._id"

object
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

Array of objects

If an Item is passed, then this line will be considered an "item" type line,

Otherwise it is a "description" type line, which requires

  • "description"

Tax Logic

  • If a taxAmount is passed it will be used as the tax amount for the line
  • If a TaxCode is set and taxAmount is not, then taxAmount will be set as:
    • taxAmount = (amount * quantity * TaxCode.rate / 100)

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "description": "string",
  • "notes": "string",
  • "issueDate": "NOW",
  • "deliveryDate": "NOW",
  • "currency": "string",
  • "attachments": [],
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "WarehouseId": 0,
  • "Warehouse": {
    },
  • "InventoryReceivingAccountId": "Ref: Settings.defaultInventoryAccrualId",
  • "InventoryReceivingAccount": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "POLineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "status": "string",
  • "number": "string",
  • "amount": "string",
  • "description": "string",
  • "notes": "string",
  • "issueDate": "NOW",
  • "deliveryDate": "NOW",
  • "currency": "string",
  • "attachments": [],
  • "customFields": { },
  • "TemplateId": 0,
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "VendorId": 0,
  • "WarehouseId": 0,
  • "InventoryReceivingAccountId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Search Lines

Field Filterable Sortable
_id
idx
description
amount
quantity
taxAmount
quantityReceived
customFields
createdAt
updatedAt
PurchaseOrderId
PurchaseOrder.number
PurchaseOrder.status
PurchaseOrder.VendorId
PurchaseOrder.LocationId
PurchaseOrder.ICLocationId
PurchaseOrder.WarehouseId
PurchaseOrder.createdAt
PurchaseOrder.updatedAt
ItemId
SalesOrderId
CostCenterId
JobId
ProductId
TaxCodeId
Custom1Id
Custom2Id
Custom3Id
Item.name
Item.salePrice
Item.purchasePrice
Vendor.name
SalesOrder.number
Location.name
ICLocation.name
Warehouse.name
CostCenter.id
Product.id
Job.number
TaxCode.code
Authorizations:
OAuth2
query Parameters
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: "idx:ASC"

Order to return results in. ex "date:desc"

receivableOnly
boolean
Default: false

Set this to true to only return lines that can be received

Criteria for receivable lines is as under:

  • Line's 'quantity' is not equal to 'quantityReceived'
  • Line's parent PO is not of status 'Created', 'Fulfilled' or 'Voided'

Setting this to false will return all lines

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Search Lines by Purchase Order

Field Filterable Sortable
_id
idx
description
amount
quantity
taxAmount
quantityReceived
customFields
createdAt
updatedAt
PurchaseOrderId
PurchaseOrder.number
PurchaseOrder.status
PurchaseOrder.VendorId
PurchaseOrder.LocationId
PurchaseOrder.ICLocationId
PurchaseOrder.WarehouseId
PurchaseOrder.createdAt
PurchaseOrder.updatedAt
ItemId
SalesOrderId
CostCenterId
JobId
ProductId
TaxCodeId
Custom1Id
Custom2Id
Custom3Id
Item.name
Item.salePrice
Item.purchasePrice
Vendor.name
SalesOrder.number
Location.name
ICLocation.name
Warehouse.name
CostCenter.id
Product.id
Job.number
TaxCode.code
Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

query Parameters
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: "idx:ASC"

Order to return results in. ex "date:desc"

receivableOnly
boolean
Default: false

Set this to true to only return lines that can be received

Criteria for receivable lines is as under:

  • Line's 'quantity' is not equal to 'quantityReceived'
  • Line's parent PO is not of status 'Created', 'Fulfilled' or 'Voided'

Setting this to false will return all lines

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count Lines

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

receivableOnly
boolean
Default: false

Set this to true to only return lines that can be received

Criteria for receivable lines is as under:

  • Line's 'quantity' is not equal to 'quantityReceived'
  • Line's parent PO is not of status 'Created', 'Fulfilled' or 'Voided'

Setting this to false will return all lines

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create Line

Creates a new Purchase Order Line Item

Webhooks

POLineItem CREATE
SOLineItem CREATE
SOLineItem UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Purchase Order._id

Request Body schema: application/json

JSON body to create new Purchase Order Line Item

If an Item is passed, then this line will be considered an "item" type line,

Otherwise it is a "description" type line, which requires

  • "description"

Tax Logic

  • If a taxAmount is passed it will be used as the tax amount for the line
  • If a TaxCode is set and taxAmount is not, then taxAmount will be set as:
    • taxAmount = (amount * quantity * TaxCode.rate / 100)
amount
required
string <number>

Must be > 0

quantity
required
string <number>

Must be > 0

idx
number
externalId
string
description
string

Required if ItemId is not set

customFields
object
Default: {}

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

taxAmount
string <number>
TaxCodeId
integer

Ref: TaxCode._id

object
ItemId
integer

"Ref: Item._id" If the reference Item has type 'direct', then SalesOrderId or SOLineItemId is required

object
SalesOrderId
integer

"Ref: SalesOrder._id"

  • Ignored if SOLineItemId is passed
  • SalesOrder must have status 'order', 'partiallyFulfilled', or 'fulfilled'
  • This POLineItem must have an Item set
SOLineItemId
integer

"Ref: SOLineItem._id"

  • SalesOrder must have status 'order', 'partiallyFulfilled', or 'fulfilled'
  • Will override SalesOrderId
  • SOLineItem must not already be linked to a POLineItem
  • SOLineItem must not have any fulfillments or unfulfillments against it
  • All fields from the SOLine will override the POLine
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

Responses

Request samples

Content type
application/json
{
  • "idx": 0,
  • "externalId": "string",
  • "description": "string",
  • "customFields": { },
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "SalesOrderId": 0,
  • "SOLineItemId": 0,
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "idx": 0,
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "quantityReceived": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "SalesOrderId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Purchase Order

Can only delete purchase orders in "created" status.

Can not delete purchase orders with linked bill or if any lines have linked stock adjustments.

If there are any direct purchase lines that have a linked Sales order line

  • sales order line will be deleted
  • sales order status and total amount will be updated

Webhooks

PurchaseOrder DELETE
POLineItem DELETE - for each direct purchase line removed
SOLineItem DELETE - for every linked sales order line removed
Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder id

Responses

One

Get one Purchase Order

Authorizations:
OAuth2
path Parameters
id
required
string

Purchase Order._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "number": "string",
  • "description": "string",
  • "issueDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "status": "created",
  • "amount": "string",
  • "currency": "string",
  • "notes": "string",
  • "attachments": [],
  • "approved_on": "2019-08-24",
  • "approved_name": "string",
  • "approved_email": "user@example.com",
  • "customFields": { },
  • "TemplateId": 0,
  • "LocationId": 0,
  • "WarehouseId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "InventoryReceivingAccountId": 0,
  • "InventoryReceivingAccount": {
    },
  • "ShippingAddressId": 0,
  • "ShippingAddress": {
    },
  • "BillingAddressId": 0,
  • "BillingAddress": {
    },
  • "Warehouse": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "POLineItems": [
    ]
}

Update

Updates a Purchase Order

Webhooks

PurchaseOrder UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Purchase Order._id

Request Body schema: application/json

JSON body to update a Purchase Order

Only POs in "created" or "partiallyFulfilled" status can be updated.

If updating the InventoryReceivingAccountId you must choose an active account.

ICLocationId and LocationId cannot be the same.

externalId
string
description
string
notes
string
issueDate
string <date>
deliveryDate
string <date>
currency
string <ISO4217 3 Char Code>

Ref: Currency.code - cannot use custom

attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

customFields
object

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
WarehouseId
integer

Ref: Warehouse._id

object
InventoryReceivingAccountId
integer
Default: "Ref: Settings.defaultInventoryAccrualId"

Must be an active acccount "Ref: LedgerAccount._id"

object
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "description": "string",
  • "notes": "string",
  • "issueDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "currency": "string",
  • "attachments": [],
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "customFields": { },
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "VendorId": 0,
  • "Vendor": {
    },
  • "WarehouseId": 0,
  • "Warehouse": {
    },
  • "InventoryReceivingAccountId": "Ref: Settings.defaultInventoryAccrualId",
  • "InventoryReceivingAccount": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "status": "string",
  • "number": "string",
  • "amount": "string",
  • "description": "string",
  • "notes": "string",
  • "issueDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "currency": "string",
  • "attachments": [],
  • "customFields": { },
  • "TemplateId": 0,
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "VendorId": 0,
  • "WarehouseId": 0,
  • "InventoryReceivingAccountId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete Line

Delete one Purchase Order line

Can only delete lines from purchase orders with status "created"/"issued"/"partiallyFulfilled".

Can not delete lines with linked stock adjustments.

If the line to be deleted has a linked Sales order line

  • sales order line will be deleted
  • sales order status and total amount will be updated

Purchase order amount will reflect the changes.

Webhooks

POLineItem DELETE
SOLineItem DELETE - for linked sales order line removed
Authorizations:
OAuth2
path Parameters
id
required
string

POLineItem id

Responses

Update Line

Update a Purchase Order Line Item

Webhooks

POLineItem UPDATE
SOLineItem UPDATE - if linked
SOLineItem DELETE - if unlinked
SOLineItem CREATE - if new created
SalesOrder UPDATE - if SO updated
Authorizations:
OAuth2
path Parameters
id
required
string

POLineItem._id

Request Body schema: application/json

JSON body to update a Purchase Order Line Item

Can only update a line on an order with "created", "issued", "partiallyFulfilled" status

If a line has linked stock adjustments, you may only update "quantity"

Cannot update quantity to be less than quantityReceived

Quantity can be updated to zero, this indicates the line is "voided"

If an Item is passed, then this line will be considered an "item" type line

Otherwise it is a "description" type line, which requires

  • "description"

Tax Logic

  • If a taxAmount is passed it will be used as the tax amount for the line
  • If a TaxCode is set and taxAmount is not, then taxAmount will be set as:
    • taxAmount = (amount * quantity * TaxCode.rate / 100)
amount
required
string <number>

Must be > 0

quantity
required
string <number>

Must be >= quantityReceived

idx
number
externalId
string
description
string

Required if ItemId is not set

customFields
object

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

taxAmount
string <number>
TaxCodeId
integer

Ref: TaxCode._id

object
ItemId
integer

"Ref: Item._id" If the reference Item has type 'direct', then SalesOrderId or SOLineItemId is required or already set on the line

object
SalesOrderId
integer

"Ref: SalesOrder._id"

  • Ignored if SOLineItemId is passed
  • If that sales order or any of it's line is already linked with the current line, this won't affect anything. Just that the Sales Order line will be updated as well with the new payload
  • SalesOrder must have status 'order', 'partiallyFulfilled', or 'fulfilled' if a new link is to be established
  • This POLineItem must have an Item set
SOLineItemId
integer

"Ref: SOLineItem._id"

  • SalesOrder must have status 'order', 'partiallyFulfilled', or 'fulfilled' if a new link is to be established
  • Will override SalesOrderId
  • SOLineItem must not already be linked to another POLineItem
  • SOLineItem must not have any fulfillments or unfulfillments against it if a new link is to be established
  • All fields from the SOLine will override the POLine if a new link is to be established
  • If this SOLine is already linked to the currrent POLine, then the SOLine will be updated as per the update payload
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

Responses

Request samples

Content type
application/json
{
  • "idx": 0,
  • "externalId": "string",
  • "description": "string",
  • "customFields": { },
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "SalesOrderId": 0,
  • "SOLineItemId": 0,
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "idx": 0,
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "quantityReceived": "string",
  • "customFields": { },
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "SalesOrderId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Email

Email Purchase Order to Vendors email addresss

Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

Responses

Issue

Issue Purchase Order

Can only issue if status is "created"

Webhooks

PurchaseOrder ISSUE
Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

Responses

Response samples

Content type
text/plain
Example

If Purchase Order was issued and email was sent to vendor.

Success

PDF

Purchase Order PDF

Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

Responses

Unissue

Unissue Purchase Order Can only unissue if status is "issued" - changes status to "created"

Webhooks

PurchaseOrder UNISSUE
Authorizations:
OAuth2
path Parameters
id
required
string

PurchaseOrder._id

Responses

Void

Void one Purchase Order

Can only void if status is "issued" or "created".

Can only void if all lines have a "quantityReceived" of 0.

Webhooks

PurchaseOrder VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Purchase Order Id

Responses

Recurring Jobs

Recurring Jobs

Create

Create new Recurring Job.

Webhooks

RecurringJob CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Recurring Job

name
required
string
eventType
required
string
Enum: "RecurringJournal" "RecurringInvoice" "RecurringBill"
eventQueue
required
string
Value: "recurring_doc"
TemplateId
required
integer

Ref: Templates._id

intervalType
required
string
Enum: "yearly" "monthly" "weekly" "daily"
intervalAmount
required
number
startDate
required
string <date-only>
enabled
boolean
Default: false
description
string
intervalDay
string

Day to recur on

endDate
string <date-only>

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "enabled": false,
  • "description": "string",
  • "eventType": "RecurringJournal",
  • "eventQueue": "recurring_doc",
  • "TemplateId": 0,
  • "intervalType": "yearly",
  • "intervalAmount": 0,
  • "intervalDay": "string",
  • "startDate": "string",
  • "endDate": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "enabled": false,
  • "description": "string",
  • "eventType": "RecurringJournal",
  • "eventQueue": "recurring_doc",
  • "TemplateId": 0,
  • "intervalType": "yearly",
  • "intervalAmount": 0,
  • "intervalDay": "string",
  • "startDate": "string",
  • "endDate": "string"
}

Search

Field Filterable Sortable
_id
name
enabled
description
eventType
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Delete

Delete one Recurring Job

Webhooks

Recurring Job DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Recurring Job Id

Responses

Update

Update One Recurring Job

Webhooks

Recurring Job UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Recurring Job Id

Request Body schema: application/json

JSON body containing key and values to update

enabled
boolean
Default: false
description
string
intervalType
string
Enum: "yearly" "monthly" "weekly" "daily"
intervalAmount
number
intervalDay
string

Day to recur on

startDate
string <date-only>
endDate
string <date-only>

Responses

Request samples

Content type
application/json
{
  • "enabled": false,
  • "description": "string",
  • "intervalType": "yearly",
  • "intervalAmount": 0,
  • "intervalDay": "string",
  • "startDate": "string",
  • "endDate": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "enabled": false,
  • "description": "string",
  • "eventType": "RecurringJournal",
  • "eventQueue": "recurring_doc",
  • "TemplateId": 0,
  • "intervalType": "yearly",
  • "intervalAmount": 0,
  • "intervalDay": "string",
  • "startDate": "string",
  • "endDate": "string"
}

Reports

Reports

Balance Sheet

Returns the Balance Sheet report

The Balance Sheet is a financial statement that reports a company's assets, liabilities, and shareholders' equity at a specific point in time.

Accounts of type Asset, Liability, Equity are considered for the balance sheet report.

Balance sheet should always balance at both consolidated and unconsolidated levels. This however does require all ledger accounts to be mapped to report groups.

All the balances are in the currency of the given LocationId

Closing entries are also included for balance sheet reports.

All journals with postedDate <= reporting date are factored into this.

Authorizations:
OAuth2
query Parameters
LocationId
required
integer

Location to run the balance sheet report for.

When vieweing consolidated balance sheet, balances from all child locations under this location are consolidated.

When viewing unconsolidated balance sheet, balances from only this location are shown.

reportEndDate
required
string <date>

Date to run the balance sheet report for

Journals with postedDate <= reportEndDate are factored into this report

type
required
string
Enum: "unconsolidated" "consolidated" "entity"

Type of balance sheet report

  • unconsolidated: Unconsolidated balance sheet

    • The unconsolidated balance sheet takes the balance for each balance sheet ledger account(Asset, Liability, Equity) for a single location in the location's reporting currency.

    • Elimination (Denorm_Transactions.elim2) entries are not included in unconsolidated reports.

  • consolidated: Consolidated balance sheet

    • Consolidated balance sheet starts at the lowest level of the given location's hierarchy, grabs the unconsolidated balances at that location, and consolidates all the way up to the top level location.

    • Balances are converted from child locations's currency into parent location's currency using the set consolidation rates.

    • All transactions with postedDate <= reporting date are factored into this.

    • Elimination (Denorm_Transactions.elim2) entries are also included in consolidated reports.

  • entity: Entity balance sheet

    • Entity balance sheet splits out the data that makes up the consolidated balance sheet

    • The report shows consolidated balances for each location in the hierarchy as columns

    • Unconsolidated column represents the unconsolidated balances posted to the given Location

    • Elimination column represents the elimination entries posted to the given Location

    • Consolidated column represents the consolidated balances for the given Location

comparativeColumnType
string
Enum: "month" "quarter" "year"

Type of comparative columns to show in the report.

  • month: Month comparative columns

    • Month type shows the balances for the last N number of months as specified by the "comparativeColumnCount".
  • quarter: Quarter comparative columns

    • Quarter type shows the balances for the last N quarters as specified by the "comparativeColumnCount".
  • year: Year comparative columns

    • Year type shows the balances for the last N years as specified by the "comparativeColumnCount".
comparativeColumnCount
integer [ 1 .. 12 ]

Number of comparative columns to show in the report.

This is the number of months, quarters, or years to show in the report.

For yearly comparison, the maximum value for this field is 2.

For quarterly comparison, the maximum value for this field is 4.

For monthly comparison, the maximum value for this field is 12.

If the report is run on "2023-01-01" and the "comparativeColumnType" is "month" and "comparativeColumnCount" is 2, the report will show the balances for "11 2022", "12 2022" and "01 2023".

The comparative columns cannot go past the accounting years.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "columns": [
    ]
}

Income Statement

Returns the Income Statement report

The Income Statement is a financial statement that reports a company's financial performance over a specific accounting period.

All the balances are in the currency of the given LocationId

Closing entries are not included for income statement reports.

All journals with postedDate from start of accounting year upto the reporting date are factored into this.

Authorizations:
OAuth2
query Parameters
LocationId
required
integer

Location to run the income statement report for.

When vieweing consolidated income statement, balances from all child locations under this location are consolidated.

When viewing unconsolidated income statement, balances from only this location are shown.

reportEndDate
required
string <date>

Date to run the income statement report for

Journals with postedDate from start of accounting year upto this date are factored into this report

Accounting year is determined as the one that surrounds this date.

type
required
string
Enum: "unconsolidated" "consolidated" "entity"

Type of income statement report

  • unconsolidated: Unconsolidated income statement

    • The unconsolidated income statement takes the balance for each income statement ledger account(Expense, Revenue) for a single location in the location's reporting currency.

    • Elimination (Denorm_Transactions.elim2) entries are not included in unconsolidated reports.

  • consolidated: Consolidated income statement

    • Consolidated income statement starts at the lowest level of the given location's hierarchy, grabs the unconsolidated balances at that location, and consolidates all the way up to the top level location.

    • Balances are converted from child locations's currency into parent location's currency using the set consolidation rates.

    • Elimination (Denorm_Transactions.elim2) entries are also included in consolidated reports.

  • entity: Entity income statement

    • Entity income statement splits out the data that makes up the consolidated income statement

    • The report shows consolidated balances for each location in the hierarchy as columns

    • Unconsolidated column represents the unconsolidated balances posted to the given Location

    • Elimination column represents the elimination entries posted to the given Location

    • Consolidated column represents the consolidated balances for the given Location

startDate
required
string <date>

Start Date for the report.

This date would determine the number of months, quarters or years shown in the report.

If the report is run on "2023-01-01" and the "comparativeColumnType" is "month" and "startDate" is "2022-11-01", the report will show the balances for "11 2022", "12 2022" and "01 2023".

The startDate cannot go past the available accounting years.

comparativeColumnType
string
Enum: "month" "quarter" "year"

Type of comparative columns to show in the report.

  • month: Month comparative columns

    • Month type shows the balances for the last N number of months as determined by the "startDate".
  • quarter: Quarter comparative columns

    • Quarter type shows the balances for the last N quarters as determined by the "startDate".
  • year: Year comparative columns

    • Year type shows the balances for the last N years as determined by the "startDate".

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "columns": [
    ]
}

General Ledger

Returns the General Ledger summary for the given location in the date range provided

The General Ledger summary will display starting balance, debit, credit, net change, and ending balance for each ledger account in the given location

All the balances are in the currency of the given LocationId

Elimination entries are not included here.

Closing entries are not included when calculating starting balances for Income Statement accounts.

The data is ordered by LedgerAccount.number in ASC and rounded to the fraction precision set in the reporting currency.

Authorizations:
OAuth2
query Parameters
startDate
required
string <date>

Start of the date range to run the general ledger summary for

endDate
required
string <date>

End of the date range to run the general ledger summary for

LocationId
integer

Location to run the general ledger summary for.

If not provided, the general ledger summary will be run for the Global location.

journalStatus
string
Default: "all"
Enum: "all" "draft" "posted"

Filter by journal status

hideZeroActivity
boolean
Default: false

Set to true to hide accounts that don't have any activity in the date range provided

Activity is defined as having at least one transaction in the date range provided

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Search

Search for reports

Authorizations:
OAuth2
query Parameters
type
string
Enum: "balanceSheet" "incomeStatement" "journalLines" "generalLedger" "trialBalance" "trialBalanceByCurrency" "ledgerAccountReview" "ledgerAccountByDimension"

Filter by type of report

name
string

Search report by name

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create

Create a new report

Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Report

name
required
string

Report name must be unique per type

type
required
string
Enum: "balanceSheet" "incomeStatement" "journalLines" "generalLedger" "trialBalance" "ledgerAccountByDimension" "trialBalanceByCurrency" "ledgerAccountReview"
BalanceSheetReportData (object) or IncomeStatementReportData (object) or TrialBalanceReportData (object) or TrialBalanceByCurrencyReportData (object) or GeneralLedgerReportData (object) or JournalLinesReportData (object) or LedgerAccountByDimensionReportData (object) or LedgerAccountReviewReportData (object)

JSON object containing configuration for the report.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "balanceSheet",
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "balanceSheet",
  • "data": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Deletes one Report

Authorizations:
OAuth2
path Parameters
id
required
string

Report _id

Responses

Update

Updates a report

Authorizations:
OAuth2
path Parameters
id
required
string

Report _id

Request Body schema: application/json

JSON body to update a Report

name
string

Report name must be unique per type

BalanceSheetReportData (object) or IncomeStatementReportData (object) or TrialBalanceReportData (object) or TrialBalanceByCurrencyReportData (object) or GeneralLedgerReportData (object) or JournalLinesReportData (object) or LedgerAccountByDimensionReportData (object) or LedgerAccountReviewReportData (object)

JSON object containing updated configuration for the report.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "data": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "balanceSheet",
  • "data": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Review Report

Field Filterable Sortable
_id
elim2
BillId
elimination
CashReceiptId
CostCenterId
currency
Custom1Id
Custom2Id
Custom3Id
CustomerId
description
InvoiceId
ICAccountId
ICLocationId
JobId
JournalId
Journal_entryType
Journal_notes
Journal_number
Journal_reference
Journal_status
Journal_sourceLedger
Journal_AccountingPeriodId
Location_currency_rate
Location_currency_debit
Location_currency_credit
LocationId
SalesOrderId
ProductId
postedDate
transactionDate
reconcileId
reversing
SystemJobId
VendorId
VendorCreditId
BatchPaymentId
PaymentId
credit
debit
txn_type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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 transactions from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Review Report Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Ledger Account by Dimension Report

Returns the Ledger Accounts by Dimension report for the given inputs

This report will display the unconsolidated balances of all ledger accounts in the given date range provided, and group the results by dimensions.

Balances that do not fall under any given dimension, as well as the one that don't have a dimension set are also returned in the other and none key in the balances response.

The supported Dimensions here are:

  • Customer
  • Vendor
  • Cost Center
  • Product
  • Job
  • Custom1
  • Custom2
  • Custom3

The balances here are in the currency of the given LocationId and are also rounded to the set precision for the currency.

Ledger Accounts that do not have any balance with the given set of filters will not be returned.

Authorizations:
OAuth2
query Parameters
LocationId
required
integer

Location to return the balances for

This is not a consolidated report so balances from child locations of the given LocationId will not be included.

startDate
required
string <date>

Start Date for the report.

Journals with postedDate >= startDate will be included in the report

endDate
required
string <date>

End Date for the report.

Journals with postedDate <= endDate will be included in the report

dimensionType
required
string
Enum: "Customer" "Vendor" "CostCenter" "Product" "Job" "Custom1" "Custom2" "Custom3"

Dimension to group the ledger accounts balances by.

dimensionIds
required
string

Comma separated list of "Dimension._id" to include in the report e.g. "1,2,3" where "1", "2" and "3" are the "Dimension._id" of the given dimension.

At least one dimension ID must be provided

The given Dimension record must not be marked as "inactive"

filter
string

JSON Key:Value object to filter the Journals on when calculating the balances.

Following fields are filterable:

Field Filterable
CustomerId
VendorId
CostCenterId
ProductId
JobId
Custom1Id
Custom2Id
Custom3Id
LocationId
ICLocationId
currency
description
LedgerAccount_type
LedgerAccount_subtype
postedDate
transactionDate
filterType
string
Default: "all"
Enum: "all" "any"

When multiple filters are provided in the filter property, this will determine if the results should match all filters or just any of the passed filters

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "columns": [
    ]
}

Trial Balance by Posted Currency Report

Returns the Trial Balance by posted currency for given location up until the date provided

The Trial Balance by Posted Currency will display cumulative, fiscal year to date debit, credit, and balance amount that ALWAYS balances at non-consolidated level

Balance Sheet accounts (Asset | Liability | Equity) include all transactions until the date provided

Income Statement accounts (Revenue | Expense) include all transactions from start of accounting year until the date provided

Closing entries are only included for Balance Sheet type accounts

Authorizations:
OAuth2
query Parameters
date
string <date>

Date to run the trial balance by posted currency through

LocationId
integer

Location to run the trial balance by posted currency for.

hideZeroBalance
boolean
Default: false

Hide accounts with zero balance

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Trial Balance

Returns the Trial Balance for given location up until the date provided

The Trial Balance will display cumulative, fiscal year to date debit, credit, and balance amount that ALWAYS balances at both consolidated and non-consolidated level

Balance Sheet accounts (Asset | Liability | Equity) include all transactions until the date provided

Income Statement accounts (Revenue | Expense) include all transactions from start of accounting year until the date provided

Closing entries are only included for Balance Sheet type accounts

Authorizations:
OAuth2
query Parameters
date
string <date>

Date to run the trial balance through

LocationId
integer

Location to run the trial balance for.

For consolidated report, this will be the parent location and the report will also incorporate all locations under this location

journalStatus
string
Default: "all"
Enum: "all" "draft" "posted"

Filter by journal status

hideZeroBalance
boolean
Default: false

Hide accounts with zero balance

When running the consolidated report, the zero balance filter is applied after consolidation

consolidated
boolean
Default: false

Set to true to return consolidated balances of all locations under the given LocationId

Consolidated report will:

  • operate on transactions from the given LocationId as well all locations under that
  • include elimination entries
  • require that the consolidation rates be set for child -> parent location pairs that have different currencies
  • translate/consolidate all balances to the currency of the given LocationId
  • use the spotRate for Balance Sheet type accounts and wavgRate for Income Statement type accounts when consolidating balances into one currency
  • Equity accounts that are flagged for historical rates will use the historicalRate for consolidation
  • return a translation adjustment amount
    • Calculated as SUM(Balance Sheet account balances) - SUM(Income Statement account balances)

Set to false to only return balances from the given LocationId

Unconsolidates report will:

  • not include elimination entries
  • not require consolidation rates to be set
  • return balances in the currency of the given LocationId
  • only processes transactions from the given LocationId

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "translation": "string"
}

Report Layouts

Report Layouts

Search

Field Filterable Sortable
_id
name
type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "_id:ASC"

Order to return results in. ex "name:asc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new ReportLayout

Webhooks

ReportLayout CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new ReportLayout

The sections parameter must adhere to the following structure and requirements:

General Requirements:

  • Each section must have a unique id
  • header and summary are required string fields
  • Leaf sections must have an accounts object with reportGroups, subtypes, and LedgerAccountIds
  • Parent sections must have a children array of subsections

Balance Sheet Requirements:

  • Must have exactly two root sections: 'assets' and 'liabilities-and-equity'
  • 'liabilities-and-equity' must have two child sections: 'liabilities' and 'equity'
  • 'equity' section must include 'current-period-income' and 'currency-translation-difference' subsections
  • 'assets' sections can only reference Asset type accounts
  • 'liabilities' sections can only reference Liability type accounts
  • 'equity' sections can only reference Equity type accounts (except for special calculated items)

Income Statement Requirements:

  • Can have multiple root sections
  • All sections can only reference Revenue or Expense type accounts

Note: All referenced account types, subtypes, and LedgerAccount IDs must be valid for the tenant.

Minimal Balance Sheet Example:

{
  "name": "Simple Balance Sheet",
  "type": "balanceSheet",
  "sections": [
    {
      "id": "assets",
      "header": "Assets",
      "summary": "Total Assets",
      "children": [
        {
          "id": "current-assets",
          "header": "Current Assets",
          "summary": "Total Current Assets",
          "accounts": {
            "reportGroups": ["Cash"],
            "subtypes": [],
            "LedgerAccountIds": []
          }
        }
      ]
    },
    {
      "id": "liabilities-and-equity",
      "header": "Liabilities and Equity",
      "summary": "Total Liabilities and Equity",
      "children": [
        {
          "id": "liabilities",
          "header": "Liabilities",
          "summary": "Total Liabilities",
          "children": [
            {
              "id": "current-liabilities",
              "header": "Current Liabilities",
              "summary": "Total Current Liabilities",
              "accounts": {
                "reportGroups": [],
                "subtypes": ["Accounts Payable"],
                "LedgerAccountIds": []
              }
            }
          ]
        },
        {
          "id": "equity",
          "header": "Equity",
          "summary": "Total Equity",
          "children": [
            {
              "id": "retained-earnings",
              "header": "Retained Earnings",
              "summary": "Total Retained Earnings",
              "accounts": {
                "reportGroups": [Retained Earnings],
                "subtypes": [],
                "LedgerAccountIds": []
              }
            },
            {
              "id": "current-period-income",
              "header": "Current Period Income",
              "summary": "Total Current Period Income",
              "accounts": {
                "reportGroups": ["Current Period Income"],
                "subtypes": [],
                "LedgerAccountIds": []
              }
            },
            {
              "id": "currency-translation-difference",
              "header": "Currency Translation Difference",
              "summary": "Total Currency Translation Difference",
              "accounts": {
                "reportGroups": ["Currency Translation Difference"],
                "subtypes": [],
                "LedgerAccountIds": []
              }
            }
          ]
        }
      ]
    }
  ]
}

Minimal Income Statement Example:

{
  "name": "Simple Income Statement",
  "type": "incomeStatement",
  "sections": [
    {
      "id": "revenue",
      "header": "Revenue",
      "summary": "Total Revenue",
      "accounts": {
        "reportGroups": ["Revenue"],
        "subtypes": [],
        "LedgerAccountIds": []
      }
    },
    {
      "id": "expenses",
      "header": "Expenses",
      "summary": "Total Expenses",
      "children": [
        {
          "id": "operating-expenses",
          "header": "Operating Expenses",
          "summary": "Total Operating Expenses",
          "accounts": {
            "reportGroups": ["Operating Expense"],
            "subtypes": [],
            "LedgerAccountIds": []
          }
        }
      ]
    }
  ]
}
name
required
string
type
required
string
Enum: "balanceSheet" "incomeStatement"
required
Array of LeafSection (object) or ParentSection (object) (Section)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "balanceSheet",
  • "sections": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "balanceSheet",
  • "sections": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete One ReportLayout

Webhooks

ReportLayout DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

ReportLayout Id

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "code": "string"
}

One

Get one ReportLayout

Authorizations:
OAuth2
path Parameters
id
required
string

ReportLayout Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "balanceSheet",
  • "sections": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update One ReportLayout

Webhooks

ReportLayout UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

ReportLayout Id

Request Body schema: application/json

JSON body containing key and values to update

name
string
type
string
Enum: "balanceSheet" "incomeStatement"
Array of LeafSection (object) or ParentSection (object) (Section)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "balanceSheet",
  • "sections": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "balanceSheet",
  • "sections": [
    ],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Roles

Roles

One

Permissions in Role

Authorizations:
OAuth2
path Parameters
id
required
string

Role id

Responses

Response samples

Content type
application/json
[
  • {
    }
]

All

All available roles

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Sales Orders

Sales Orders

Accept

Accepts a Sales Order that has been issued

Webhooks

SalesOrder ACCEPT
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

Request Body schema: application/json

JSON body containing payload for accept

orderDate
required
string <date>
deliveryDate
required
string <date>
TemplateId
required
integer

Ref: Template._id

Responses

Request samples

Content type
application/json
{
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "TemplateId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "number": "string",
  • "status": "order",
  • "notes": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "completeDate": "2019-08-24",
  • "currency": "string",
  • "attachments": [],
  • "approved_on": "2019-08-24",
  • "approved_name": "string",
  • "approved_email": "user@example.com",
  • "reference": "string",
  • "externalRef": "string",
  • "amount": "string",
  • "customFields": [
    ],
  • "TemplateId": 0,
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "ShippingAddress": {
    },
  • "BillingAddressId": 0,
  • "BillingAddress": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Stock Adjustments

Get stock adjustments linked to a sales order

The parameters of this endpoint are the same as for Stock Adjustment Search

Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Search

Field Filterable Sortable
_id
number
externalId
status
CustomerId
reference
externalRef
LocationId
quoteDate
quoteExpiration
orderDate
deliveryDate
completeDate
amount
customFields
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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"

status
string
Enum: "quote" "pending" "rejected" "order" "partiallyFulfilled" "fulfilled" "voided" "completed"

A CSV string containing the statuses you'd like to filter for joined with commas (No spaces). ex: 'quote,pending,order'. This query param is optional.

  • If you pass this param in addition to a "status" filter both will be used.
  • If you pass nothing for this param and a "status" filter, the filter will be used.
  • If you pass no status filter and you pass this param, this param will be used.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Sales Order

Webhooks

SalesOrder CREATE
SOLineItem CREATE - for each line
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Sales Order

One of [Location.id, LocationId] is Required

LocationId
required
integer

Ref: Location._id

currency
required
string <ISO4217 3 Char Code>

Ref: Currency.code - cannot use custom

externalId
string
status
string
Default: "order"
Enum: "quote" "order"
notes
string
quoteDate
string <date>
quoteExpiration
string <date>
orderDate
string <date>
deliveryDate
string <date>
object
ICLocationId
integer

Ref: Location._id

object
CustomerId
integer

Ref: Customer._id

object
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

reference
string
customFields
object
Default: {}

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

externalRef
string
Array of objects

If an Item is passed, then this line will be considered an "item" type line,

Otherwise it is a "description" type line, which requires

  • "description"

Tax Logic

  • If a taxAmount is passed it will be used as the tax amount for the line
  • If a TaxCode is set and taxAmount is not, then taxAmount will be set as:
    • taxAmount = (amount * quantity * TaxCode.rate / 100)

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "status": "quote",
  • "notes": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "currency": "string",
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "attachments": [],
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "reference": "string",
  • "customFields": { },
  • "externalRef": "string",
  • "SOLineItems": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "status": "string",
  • "number": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "notes": "string",
  • "reference": "string",
  • "externalRef": "string",
  • "currency": "string",
  • "amount": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "CustomerId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "TemplateId": 0,
  • "attachments": [],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Line Search

Field Filterable Sortable
_id
SalesOrder.number
SalesOrder.status
SalesOrder.reference
SalesOrder.externalRef
SalesOrder.quoteDate
SalesOrder.orderDate
SalesOrder.completeDate
SalesOrder.createdAt
SalesOrder.updatedAt
SalesOrder.CustomerId
SalesOrder.LocationId
Customer.name
Location.id
TaxCode.code
PurchaseOrder.number
description
externalId
amount
quantity
quantityFulFilled
ItemId
Item.name
Item.salePrice
Item.purchasePrice
CostCenterId
ProductId
JobId
Custom1Id
Custom2Id
Custom3Id
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "SalesOrder.number:ASC"

Order to return results in. ex "date:desc"

type
string
Enum: "fulfill" "unfulfill"

Use this to control whether to return fulfillable/unfulfillable lines

Set this to 'fulfill' to return lines that can be fulfilled, criteria for fulfillable lines as under:

  • Line's 'quantity' is not equal to 'quantityFulFilled'
  • Line's parent SO is not in status 'Quote', 'Rejected', 'Pending', 'Fulfilled', 'Voided', or 'Complete'
  • Line is an item line
  • Line does not have a linked POLine

Set this to 'unfulfill' to return lines that can be unfulfulleed, criteria as under:

  • Line has some fulfillments i.e. 'quantityFulfilled' is greater than 0
  • Line's parent SO is not in 'Complete' status
  • Line is an item line

Not setting this will return all lines

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Lines Count

The same filters as Line Search can be used here.

Authorizations:
OAuth2
query Parameters
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: "fulfill" "unfulfill"

Use this to control whether to count fulfillable/unfulfillable lines

Set this to 'fulfill' to count lines that can be fulfilled, criteria for fulfillable lines as under:

  • Line's 'quantity' is not equal to 'quantityFulFilled'
  • Line's parent SO is not in status 'Quote', 'Rejected', 'Pending', 'Fulfilled', 'Voided', or 'Complete'
  • Line is an item line
  • Line does not have a linked POLine

Set this to 'unfulfill' to count lines that can be unfulfulleed, criteria as under:

  • Line has some fulfillments i.e. 'quantityFulfilled' is greater than 0
  • Line's parent SO is not in 'Complete' status
  • Line is an item line

Not setting this will count all lines

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Complete

Complete One Sales Order

A journal entry will be posted for each sales order line that has fulfillments.

Webhooks

SalesOrder COMPLETE
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

Request Body schema: application/json

JSON body containing key and values to update

Status must be "partiallyFulfilled" or "fulfilled" to complete

Cannot complete sales order if any lines are linked to a purchase order line that is not completely fulfilled.

completeDate
string <date>
Default: "NOW"

Cannot be in the future

Must be after all of the stock adjustments linked to this sales order

Responses

Request samples

Content type
application/json
{
  • "completeDate": "NOW"
}

Count All

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Create Line

Creates a new Sales Order Line Item

Webhooks

SalesOrder CREATE
SOLineItem CREATE
Authorizations:
OAuth2
path Parameters
id
required
string

SOLineItem Id

Request Body schema: application/json

JSON body to create new Sales Order Line Item

If an Item is passed, then this line will be considered an "item" type line,

Otherwise it is a "description" type line, which requires

  • "description"

Tax Logic

  • If a taxAmount is passed it will be used as the tax amount for the line
  • If a TaxCode is set and taxAmount is not, then taxAmount will be set as:
    • taxAmount = (amount * quantity * TaxCode.rate / 100)
amount
required
string <number>

Must be > 0

quantity
required
string <number>

Must be > 0

idx
number
externalId
string
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

Responses

Request samples

Content type
application/json
{
  • "idx": 0,
  • "externalId": "string",
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "quantityFulFilled": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "SalesOrderId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "JournalId": 0,
  • "idx": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "TaxCodeId": 0,
  • "taxAmount": "string",
  • "POLineItemId": 0,
  • "externalId": "string"
}

Delete

Delete one Sales Order

Webhooks

SalesOrder DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Sales Order Id

Responses

One

Get one Sales Order

Authorizations:
OAuth2
path Parameters
id
required
string

Sales Order._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "number": "string",
  • "status": "quote",
  • "notes": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "completeDate": "2019-08-24",
  • "currency": "string",
  • "attachments": [],
  • "approved_on": "2019-08-24",
  • "approved_name": "string",
  • "approved_email": "user@example.com",
  • "reference": "string",
  • "externalRef": "string",
  • "amount": "string",
  • "customFields": [
    ],
  • "TemplateId": 0,
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "ShippingAddress": {
    },
  • "BillingAddressId": 0,
  • "BillingAddress": {
    },
  • "Template": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "SOLineItems": [
    ]
}

Update

Update One Sales Order

Webhooks

SalesOrder UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

Request Body schema: application/json

JSON body containing key and values to update

Only sales orders in quote or order status can be updated.

externalId
string
notes
string
quoteDate
string <date>
quoteExpiration
string <date>
orderDate
string <date>
deliveryDate
string <date>
currency
string <ISO4217 3 Char Code>

Ref: Currency.code - cannot use custom

LocationId
integer

Ref: Location._id

object
ICLocationId
integer

Ref: Location._id

object
CustomerId
integer

Ref: Customer._id

object
ShippingAddressId
integer

Ref: Address._id

BillingAddressId
integer

Ref: Address._id

attachments
Array of strings <uri> [ items <uri > ]

Links to any attached documents

TemplateId
integer
Default: "Template with name 'Default' and format = 'pdf'"

Ref: Template._id

reference
string
customFields
object
Default: {}

Key -> Value hash of custom fields, must be defined via the UI to show up in the UI

externalRef
string

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "notes": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "currency": "string",
  • "LocationId": 0,
  • "Location": {
    },
  • "ICLocationId": 0,
  • "ICLocation": {
    },
  • "CustomerId": 0,
  • "Customer": {
    },
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "attachments": [],
  • "TemplateId": "Template with name 'Default' and format = 'pdf'",
  • "reference": "string",
  • "customFields": { },
  • "externalRef": "string"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "externalId": "string",
  • "status": "string",
  • "number": "string",
  • "quoteDate": "2019-08-24",
  • "quoteExpiration": "2019-08-24",
  • "orderDate": "2019-08-24",
  • "deliveryDate": "2019-08-24",
  • "notes": "string",
  • "reference": "string",
  • "externalRef": "string",
  • "currency": "string",
  • "customFields": { },
  • "LocationId": 0,
  • "ICLocationId": 0,
  • "CustomerId": 0,
  • "ShippingAddressId": 0,
  • "BillingAddressId": 0,
  • "TemplateId": 0,
  • "attachments": [],
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete Line

Deletes a Sales Order Line

Can only delete a line from an order status of "quote", "order", or "partiallyFulfilled"

Cannot delete a line with linked stock adjustments

Cannot delete a line with a linked POLineItemId

Webhooks

SOLineItem DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

SOLineItem._id

Responses

Update Line

Update a Sales Order Line

Webhooks

SalesOrder UPDATE - for status and amount
SOLineItem UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

SOLineItem._id

Request Body schema: application/json
idx
number
externalId
string
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

Responses

Request samples

Content type
application/json
{
  • "idx": 0,
  • "externalId": "string",
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "taxAmount": "string",
  • "TaxCodeId": 0,
  • "TaxCode": {
    },
  • "ItemId": 0,
  • "Item": {
    },
  • "CostCenterId": 0,
  • "CostCenter": {
    },
  • "JobId": 0,
  • "Job": {
    },
  • "ProductId": 0,
  • "Product": {
    },
  • "Custom1Id": 0,
  • "Custom1": {
    },
  • "Custom2Id": 0,
  • "Custom2": {
    },
  • "Custom3Id": 0,
  • "Custom3": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "description": "string",
  • "amount": "string",
  • "quantity": "string",
  • "quantityFulFilled": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "SalesOrderId": 0,
  • "ItemId": 0,
  • "CostCenterId": 0,
  • "JobId": 0,
  • "ProductId": 0,
  • "JournalId": 0,
  • "idx": 0,
  • "Custom1Id": 0,
  • "Custom2Id": 0,
  • "Custom3Id": 0,
  • "TaxCodeId": 0,
  • "taxAmount": "string",
  • "POLineItemId": 0,
  • "externalId": "string"
}

Email

Email Sales Order to Customers email addresss

Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder._id

Responses

Fulfill Line

Fulfill a line item on a Sales Order

Webhooks

SOLineItem Fulfill
Authorizations:
OAuth2
path Parameters
id
required
string

SOLineItem Id

Request Body schema: application/json

JSON body to fulfill a line item on a Sales Order

Sales Order must be in status of 'order' or 'partiallyFulfilled' Line item must not be linked to a POLineItem

quantity
required
string <number>
WarehouseId
required
number

Ref: Warehouses._id

date
string <date-time>
Default: "NOW"
dontRunCostBasis
boolean
Default: false

Don't run cost basis on fulfillment

Responses

Request samples

Content type
application/json
{
  • "quantity": "string",
  • "date": "NOW",
  • "WarehouseId": 0,
  • "dontRunCostBasis": false
}

Issue

Issue Sales Order

Webhooks

SalesOrder ISSUE
Authorizations:
OAuth2
path Parameters
id
required
string

Sales Order._id

Responses

Order Line Search

Field Filterable Sortable
_id
SalesOrder.number
SalesOrder.status
SalesOrder.reference
SalesOrder.externalRef
SalesOrder.quoteDate
SalesOrder.orderDate
SalesOrder.completeDate
SalesOrder.createdAt
SalesOrder.updatedAt
SalesOrder.CustomerId
SalesOrder.LocationId
Customer.name
Location.id
TaxCode.code
PurchaseOrder.number
description
externalId
amount
quantity
quantityFulFilled
ItemId
Item.name
Item.salePrice
Item.purchasePrice
CostCenterId
ProductId
JobId
Custom1Id
Custom2Id
Custom3Id
createdAt
updatedAt
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

query Parameters
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: "SalesOrder.number:ASC"

Order to return results in. ex "date:desc"

type
string
Enum: "fulfill" "unfulfill"

Use this to control whether to return fulfillable/unfulfillable lines

Set this to 'fulfill' to return lines that can be fulfilled, criteria for fulfillable lines as under:

  • Line's 'quantity' is not equal to 'quantityFulFilled'
  • Line's parent SO is not in status 'Quote', 'Rejected', 'Pending', 'Fulfilled', 'Voided', or 'Complete'
  • Line is an item line
  • Line does not have a linked POLine

Set this to 'unfulfill' to return lines that can be unfulfulleed, criteria as under:

  • Line has some fulfillments i.e. 'quantityFulfilled' is greater than 0
  • Line's parent SO is not in 'Complete' status
  • Line is an item line

Not setting this will return all lines

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Order Lines Count

The same filters as Line Search can be used here.

Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

query Parameters
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: "fulfill" "unfulfill"

Use this to control whether to count fulfillable/unfulfillable lines

Set this to 'fulfill' to count lines that can be fulfilled, criteria for fulfillable lines as under:

  • Line's 'quantity' is not equal to 'quantityFulFilled'
  • Line's parent SO is not in status 'Quote', 'Rejected', 'Pending', 'Fulfilled', 'Voided', or 'Complete'
  • Line is an item line
  • Line does not have a linked POLine

Set this to 'unfulfill' to count lines that can be unfulfulleed, criteria as under:

  • Line has some fulfillments i.e. 'quantityFulfilled' is greater than 0
  • Line's parent SO is not in 'Complete' status
  • Line is an item line

Not setting this will count all lines

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

PDF

Sales Order PDF

Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder._id

Responses

Reject

Reject a Sales Order that has been issued

Webhooks

SalesOrder REJECTED
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

Responses

Uncomplete

Uncomplete One Sales Order

A journal entry will be posted for each sales order line that has fulfillments.

Webhooks

SalesOrder UNCOMPLETE
Authorizations:
OAuth2
path Parameters
id
required
string

SalesOrder Id

Responses

Unfulfill Line

Unfulfill a line item on a Sales Order

If inventory cost-basis is running, this will error out

Sales Order must be in 'partiallyFulfilled' or 'fulfilled' status

If the Return Account is specified for direct return, a 'return' stock adjustment with that account will also be added

Line quantity fulfilled becomes the quantity after unfulfillment of a direct purchase line.

Webhooks

SOLineItem UNFULFILL
Authorizations:
OAuth2
path Parameters
id
required
string

Sales Order Line _id

Request Body schema: application/json

JSON body to unfulfill a line item on a Sales Order

Date for unfulfillment must be ahead of the latest fulfillment transaction date

One of [Warehouse.name, WarehouseId] is Required

One of [ReturnAccount.number, ReturnAccountId] is also needed for direct purchase lines to create a return stock adjustment

quantity
required
string <number>
WarehouseId
required
number

Ref: Warehouses._id

date
string <date-time>
Default: "NOW"
object
runCostBasis
boolean
Default: false

Run cost basis on fulfillment

ReturnAccountId
number

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "quantity": "string",
  • "date": "NOW",
  • "WarehouseId": 0,
  • "Warehouse": {
    },
  • "runCostBasis": false,
  • "ReturnAccountId": 0,
  • "ReturnAccount": {
    }
}

Void

Void one Sales Order

Can only void if status is "order"

Cannot void if any lines are linked to a purchase order (unless the purchase order is voided)

Webhooks

SalesOrder VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Sales Order Id

Responses

Settings

Settings

GET

GET settings

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "ccInvoice": true,
  • "emailOnInvoiceIssued": true,
  • "emailOnSalesQuoteIssued": true,
  • "emailOnPurchaseOrderIssued": true,
  • "companyEIN": "string",
  • "dateFormat": "MM/DD/YYYY",
  • "useLocationOnDocuments": true,
  • "displayItem": "description",
  • "postCRJournal": true,
  • "confirmDelete": true,
  • "postVCJournal": true,
  • "showProducts": true,
  • "currencyAsCodeUI": true,
  • "currencyAsCodePDF": true,
  • "intercompanyEliminations": true,
  • "hideLocationFromFinancials": true,
  • "intercompanyEliminations2": true,
  • "defaultLineItemType": "description",
  • "showCostCenters": true,
  • "showJobs": true,
  • "autoApproveARPayments": true,
  • "autoApproveAPPayments": true,
  • "emailOnARCreditIssued": true,
  • "hideTaxInvoice": true,
  • "hideTaxBill": true,
  • "hideTaxPO": true,
  • "hideTaxSO": true,
  • "pdfDateFormat": "MM/DD/YYYY",
  • "wipSalesOrders": true,
  • "defaultUpdateItemPriceReceive": true,
  • "splitPartialReceives": true,
  • "draftBillPayments": true,
  • "pdfFormats": { },
  • "timezone": "string",
  • "custom1_enabled": true,
  • "custom1_name": "string",
  • "custom1_invoice": true,
  • "custom1_bill": true,
  • "custom1_po": true,
  • "custom1_so": true,
  • "custom2_enabled": true,
  • "custom2_name": "string",
  • "custom2_invoice": true,
  • "custom2_bill": true,
  • "custom2_po": true,
  • "custom2_so": true,
  • "custom3_enabled": true,
  • "custom3_name": "string",
  • "custom3_invoice": true,
  • "custom3_bill": true,
  • "custom3_po": true,
  • "custom3_so": true,
  • "invoiceAmountPrecision": "string",
  • "billAmountPrecision": "string",
  • "poAmountPrecision": "string",
  • "soAmountPrecision": "string",
  • "cryptoPricePrecision": "string",
  • "InvoiceEmailTemplateId": 0,
  • "POEmailTemplateId": 0,
  • "SOEmailTemplateId": 0,
  • "ARCreditEmailTemplateId": 0,
  • "defaultWIPId": 0,
  • "defaultSalesTaxId": 0,
  • "defaultOtherComprehensiveIncomeId": 0,
  • "defaultAccumulatedOtherComprehensiveIncomeId": 0,
  • "defaultRetainedEarningsId": 0,
  • "defaultBillPaymentId": 0,
  • "defaultAPICPayableId": 0,
  • "defaultAPICReceivableId": 0,
  • "defaultARICPayableId": 0,
  • "defaultARICReceivableId": 0,
  • "defaultUnappliedCreditId": 0,
  • "defaultUnappliedCashId": 0,
  • "defaultAccountsReceivableId": 0,
  • "defaultAccountsPayableId": 0,
  • "defaultCashId": 0,
  • "defaultInventoryAccrualId": 0,
  • "defaultItemInventoryAccrualId": 0,
  • "defaultItemInvoiceAccountId": 0,
  • "defaultItemInventoryAssetId": 0,
  • "defaultItemCOGSId": 0,
  • "defaultRevId": 0,
  • "defaultABDId": 0,
  • "inventoryCostingMethod": "fifo",
  • "cryptoHomeCurrency": "string",
  • "cryptoCostingMethod": "fifo",
  • "immaterialCostBasisErrorLedgerAccountId": 0,
  • "immaterialCostBasisErrorReference": "string",
  • "immaterialCostBasisErrorThreshold": "string",
  • "currencySupport": true,
  • "billingLimits": { },
  • "cryptoImpairment": true,
  • "brightpearl": true,
  • "dashboards": true,
  • "SandBox": true,
  • "reconciliationsv2": true,
  • "plaidType": "development"
}

Update

Update Settings

Webhooks

Settings UPDATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body containing key and values to update

Default Ledger accounts must be active

ccInvoice
boolean
costingMethod
string
emailOnInvoiceIssued
boolean
emailOnSalesQuoteIssued
boolean
emailOnPurchaseOrderIssued
boolean
companyEIN
string
dateFormat
string
Enum: "MM/DD/YYYY" "DD/MM/YYYY" "MM-DD-YYYY" "DD-MM-YYYY" "YYYY-MM-DD"
useLocationOnDocuments
boolean
displayItem
string
Enum: "description" "sku" "name"
postCRJournal
boolean
confirmDelete
boolean
postVCJournal
boolean
showProducts
boolean
currencyAsCodeUI
boolean
currencyAsCodePDF
boolean
intercompanyEliminations
boolean
hideLocationFromFinancials
boolean
intercompanyEliminations2
boolean
defaultLineItemType
string
Enum: "description" "item"
showCostCenters
boolean
showJobs
boolean
autoApproveARPayments
boolean
autoApproveAPPayments
boolean
emailOnARCreditIssued
boolean
hideTaxInvoice
boolean
hideTaxBill
boolean
hideTaxPO
boolean
hideTaxSO
boolean
pdfDateFormat
string
Default: "YYYY-MM-DD"
Enum: "MM/DD/YYYY" "DD/MM/YYYY" "MM-DD-YYYY" "DD-MM-YYYY" "YYYY-MM-DD"
wipSalesOrders
boolean
defaultUpdateItemPriceReceive
boolean
splitPartialReceives
boolean
draftBillPayments
boolean
timezone
string

The timezone of the company. Example: "America/New_York" Used for timestamps in the UI, and for converstions of timestamps into Accounting Dates.

custom1_enabled
boolean
custom1_name
string
custom1_invoice
boolean
custom1_bill
boolean
custom1_po
boolean
custom1_so
boolean
custom2_enabled
boolean
custom2_name
string
custom2_invoice
boolean
custom2_bill
boolean
custom2_po
boolean
custom2_so
boolean
custom3_enabled
boolean
custom3_name
string
custom3_invoice
boolean
custom3_bill
boolean
custom3_po
boolean
custom3_so
boolean
invoiceAmountPrecision
string <number>

min 0, max 10

billAmountPrecision
string <number>

min 0, max 10

poAmountPrecision
string <number>

min 0, max 10

soAmountPrecision
string <number>

min 0, max 10

cryptoPricePrecision
string <number>

min 0, max 10

InvoiceEmailTemplateId
number

Ref: Template._id

POEmailTemplateId
number

Ref: Template._id

SOEmailTemplateId
number

Ref: Template._id

ARCreditEmailTemplateId
number

Ref: Template._id

defaultWIPId
number

Ref: LedgerAccount._id

defaultSalesTaxId
number

Ref: LedgerAccount._id

defaultOtherComprehensiveIncomeId
number

Ref: LedgerAccount._id

Only accounts of type 'Equity' are allowed here

defaultAccumulatedOtherComprehensiveIncomeId
number

Ref: LedgerAccount._id

Only accounts of type 'Equity' are allowed here

defaultRetainedEarningsId
number

Ref: LedgerAccount._id

Only accounts of type 'Equity' are allowed here

defaultBillPaymentId
number

Ref: LedgerAccount._id

defaultAPICPayableId
number

Ref: LedgerAccount._id

defaultAPICReceivableId
number

Ref: LedgerAccount._id

defaultARICPayableId
number

Ref: LedgerAccount._id

defaultARICReceivableId
number

Ref: LedgerAccount._id

defaultUnappliedCreditId
number

Ref: LedgerAccount._id

defaultUnappliedCashId
number

Ref: LedgerAccount._id

defaultAccountsReceivableId
number

Ref: LedgerAccount._id

defaultAccountsPayableId
number

Ref: LedgerAccount._id

defaultCashId
number

Ref: LedgerAccount._id

defaultInventoryAccrualId
number

Ref: LedgerAccount._id

defaultItemInventoryAccrualId
number

Ref: LedgerAccount._id

defaultItemInvoiceAccountId
number

Ref: LedgerAccount._id

defaultItemInventoryAssetId
number

Ref: LedgerAccount._id

defaultItemCOGSId
number

Ref: LedgerAccount._id

defaultRevId
number

Ref: LedgerAccount._id

defaultABDId
number

Ref: LedgerAccount._id

inventoryCostingMethod
string
Default: "fifo"
Enum: "fifo" "avg"

Cannot be updated if there are any existing stock adjustments

cryptoHomeCurrency
string

"Ref: Currency.code" Cannot be updated if there are any existing crypto transactions

immaterialCostBasisErrorLedgerAccountId
number

Ref: LedgerAccount._id

immaterialCostBasisErrorReference
string
immaterialCostBasisErrorThreshold
string <number>

Responses

Request samples

Content type
application/json
{
  • "ccInvoice": true,
  • "costingMethod": "string",
  • "emailOnInvoiceIssued": true,
  • "emailOnSalesQuoteIssued": true,
  • "emailOnPurchaseOrderIssued": true,
  • "companyEIN": "string",
  • "dateFormat": "MM/DD/YYYY",
  • "useLocationOnDocuments": true,
  • "displayItem": "description",
  • "postCRJournal": true,
  • "confirmDelete": true,
  • "postVCJournal": true,
  • "showProducts": true,
  • "currencyAsCodeUI": true,
  • "currencyAsCodePDF": true,
  • "intercompanyEliminations": true,
  • "hideLocationFromFinancials": true,
  • "intercompanyEliminations2": true,
  • "defaultLineItemType": "description",
  • "showCostCenters": true,
  • "showJobs": true,
  • "autoApproveARPayments": true,
  • "autoApproveAPPayments": true,
  • "emailOnARCreditIssued": true,
  • "hideTaxInvoice": true,
  • "hideTaxBill": true,
  • "hideTaxPO": true,
  • "hideTaxSO": true,
  • "pdfDateFormat": "MM/DD/YYYY",
  • "wipSalesOrders": true,
  • "defaultUpdateItemPriceReceive": true,
  • "splitPartialReceives": true,
  • "draftBillPayments": true,
  • "timezone": "string",
  • "custom1_enabled": true,
  • "custom1_name": "string",
  • "custom1_invoice": true,
  • "custom1_bill": true,
  • "custom1_po": true,
  • "custom1_so": true,
  • "custom2_enabled": true,
  • "custom2_name": "string",
  • "custom2_invoice": true,
  • "custom2_bill": true,
  • "custom2_po": true,
  • "custom2_so": true,
  • "custom3_enabled": true,
  • "custom3_name": "string",
  • "custom3_invoice": true,
  • "custom3_bill": true,
  • "custom3_po": true,
  • "custom3_so": true,
  • "invoiceAmountPrecision": "string",
  • "billAmountPrecision": "string",
  • "poAmountPrecision": "string",
  • "soAmountPrecision": "string",
  • "cryptoPricePrecision": "string",
  • "InvoiceEmailTemplateId": 0,
  • "POEmailTemplateId": 0,
  • "SOEmailTemplateId": 0,
  • "ARCreditEmailTemplateId": 0,
  • "defaultWIPId": 0,
  • "defaultSalesTaxId": 0,
  • "defaultOtherComprehensiveIncomeId": 0,
  • "defaultAccumulatedOtherComprehensiveIncomeId": 0,
  • "defaultRetainedEarningsId": 0,
  • "defaultBillPaymentId": 0,
  • "defaultAPICPayableId": 0,
  • "defaultAPICReceivableId": 0,
  • "defaultARICPayableId": 0,
  • "defaultARICReceivableId": 0,
  • "defaultUnappliedCreditId": 0,
  • "defaultUnappliedCashId": 0,
  • "defaultAccountsReceivableId": 0,
  • "defaultAccountsPayableId": 0,
  • "defaultCashId": 0,
  • "defaultInventoryAccrualId": 0,
  • "defaultItemInventoryAccrualId": 0,
  • "defaultItemInvoiceAccountId": 0,
  • "defaultItemInventoryAssetId": 0,
  • "defaultItemCOGSId": 0,
  • "defaultRevId": 0,
  • "defaultABDId": 0,
  • "inventoryCostingMethod": "fifo",
  • "cryptoHomeCurrency": "string",
  • "immaterialCostBasisErrorLedgerAccountId": 0,
  • "immaterialCostBasisErrorReference": "string",
  • "immaterialCostBasisErrorThreshold": "string"
}

GET Sequence

GET sequence numbers

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "invoice": 0,
  • "bill": 0,
  • "po": 0,
  • "so": 0
}

Update Sequence

Update Sequence numbers

Authorizations:
OAuth2
Request Body schema: application/json

JSON body containing key and values to update

type
required
string
Enum: "invoice" "bill" "po" "so"
number
required
number [ 2 .. 999999998 ]

Must be greater than current highest document number

Responses

Request samples

Content type
application/json
{
  • "type": "invoice",
  • "number": 2
}

Shipment Receipts

Shipment Receipts

Search

Field Filterable Sortable
_id
dateReceived
postedDate
reference
VendorId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "_id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Shipment Receipt

  • If the impacted POLine is fully received, a stock adjustment will be created
  • If splitPartialReceives is enabled and the line is not fully received, the POLine will be split into a new, fully received POLine with the original line updated to reflect remaining quantity
  • If directPurchaseNoAdjustments is enabled, and the line is a direct purchase line, and the line is fully received, a journal will be created instead of an adjustment.
  • If the POLine has an associated SOLineItemId, and the line is fully received, we will create two adjustments. One 'receive' adjustment for the POLine and one 'fulfill' adjustment for the SOLine

Webhooks

ShipmentReceipt CREATE
SOLineItem CREATE - created by splitPartialReceives
POLineItem CREATE - created by splitPartialReceives
SOLineItem UPDATE - existing line qtyFulfilled updated
POLineItem UPDATE - existing line qtyFulfilled updated
Item UPDATE - if the default recieve price was changed
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Shipment Receipts

dateReceived
required
string <date-time>
required
Array of objects
postedDate
string <date>

Defaults to dateReceived if not passed

reference
string
dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

Responses

Request samples

Content type
application/json
{
  • "dateReceived": "2019-08-24T14:15:22Z",
  • "postedDate": "2019-08-24",
  • "reference": "string",
  • "dontRunCostBasis": false,
  • "ShipmentReceiptLines": [
    ]
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "dateReceived": "2019-08-24T14:15:22Z",
  • "VendorId": 0,
  • "reference": "string",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z"
}

Line Search

Field Filterable Sortable
_id
quantityReceived
amount
status
ShipmentReceiptId
WarehouseId
ItemId
POLineItemId
PurchaseOrderId
SOLineItemId
SalesOrderId
VendorId
ReceiveJournalId
ReversalJournalId
InventoryReceivingAccountId
ShipmentReceipt.dateReceived
ShipmentReceipt.postedDate
ShipmentReceipt.reference
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "_id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Lines Count

The same filters as Line Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

One

Get one Shipment Receipt

Authorizations:
OAuth2
path Parameters
id
required
string

ShipmentReceipt._id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "dateReceived": "2019-08-24T14:15:22Z",
  • "postedDate": "2019-08-24",
  • "reference": "string",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "VendorId": 0,
  • "Vendor": {
    },
  • "ShipmentReceiptLines": [
    ]
}

Void Line

Voids a Shipment Receipt line

Throws an error if inventory cost-basis is running

If multiple fulfillments at different prices were performed, their weighted average is used as price of adjustment

Stock adjustments are only created if there are linked adjustments to the receipt line

For cases when the shipment line has a linked Sales Order line, the following applies:

  • Cannot only void line if sales order is 'Partially Fulfilled' or 'Fulfilled'
  • Cannot void if the linked sales order line has unfulfullments that are not linked to voided shipment receipt lines
  • Sales order line quantity fulfilled is reduced
  • Sales order status is updated if needed
  • 'Unfulfill' stock adjustment is created to undo the direct purchase fulfillment

If an item of type 'Consume' is used in the receipt line:

  • a 'VoidConsume' type adjustment is ccreated to undo the consume stock adjustment
  • price is set to the weighted average (in case of multiple fulfillments) or shipment receipt line price

Creates a 'VoidReceive' adjustment entry to void the receive adjustment Cost-basis is set to the weighted average (in case of multiple fulfillments) or shipment receipt line price

Purchase order line quantity received is updated

Purchase order status is updated if needed

Webhooks

ShipmentReceiptLine VOID
Authorizations:
OAuth2
path Parameters
id
required
string

ShipmentReceiptLine._id

Request Body schema: application/json
runCostBasis
boolean
Default: false

Set to true to run inventory cost-basis upon success

Responses

Request samples

Content type
application/json
{
  • "runCostBasis": false
}

Statements

Statements

Search

Field Filterable Sortable
_id
reference
description
LedgerAccountId
LocationId
status
currency
endDate
Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Statement

Webhooks

Statement CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Statement

Only one of [LedgerAccount.number, LedgerAccountId] can be set Only one of [Location.id, LocationId] can be set

LedgerAccountId
required
integer

Ref: LedgerAccount._id

LocationId
required
integer

Ref: Location._id

currency
required
string

Ref: Currency.code

endDate
required
string <date>
balance
required
string <number>
reference
string
description
string
object
object

Responses

Request samples

Content type
application/json
{
  • "reference": "string",
  • "description": "string",
  • "LedgerAccountId": 0,
  • "LocationId": 0,
  • "currency": "string",
  • "balance": "string",
  • "endDate": "2019-08-24",
  • "LedgerAccount": {
    },
  • "Location": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "reference": "string",
  • "description": "string",
  • "LedgerAccountId": 0,
  • "LocationId": 0,
  • "status": "string",
  • "balance": "string",
  • "currency": "string",
  • "endDate": "2019-08-24",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Close

Close one Statement

Statement can only be closed if all previous statements are closed that match this statements LedgerAccountId, LocationId, currency combo

Webhooks

Statement CLOSE
Authorizations:
OAuth2
path Parameters
id
required
string

Statement Id

Responses

Delete

Delete one Statement

Can only delete if status is 'open'

Webhooks

Statement DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Statement Id

Responses

One

Get one Statement

Authorizations:
OAuth2
path Parameters
id
required
string

Statement Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "reference": "string",
  • "description": "string",
  • "LedgerAccountId": 0,
  • "LocationId": 0,
  • "status": "string",
  • "beginningBalance": "string",
  • "balance": "string",
  • "currency": "string",
  • "endDate": "2019-08-24",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "lastStatementDate": "2019-08-24",
  • "LedgerAccount": {
    },
  • "Location": {
    }
}

Open

Re-open one Statement

Statement can only be re-opened if all later statements are closed that match this statements LedgerAccountId, LocationId, currency combo

Webhooks

Statement OPEN
Authorizations:
OAuth2
path Parameters
id
required
string

Statement Id

Responses

Reconcile

Reconcile Transactions

Transactions can only be reconciled if their corresponding statement (by LedgerAccount, currency, Location combo) is not closed

Webhooks

Transaction RECONCILE - objectId will be a csv list of Transaction._ids which are reconciled
Authorizations:
OAuth2
Request Body schema: application/json

JSON body of TransactionIds to reconcile

TransactionIds
Array of numbers

Responses

Request samples

Content type
application/json
{
  • "TransactionIds": [
    ]
}

UnReconcile

UnReconcile Transactions

Transactions can only be unreconciled if their corresponding statement (by LedgerAccount, currency, Location combo) is not closed

Webhooks

Transaction UNRECONCILE - objectId will be a csv list of Transaction._ids which are reconciled
Authorizations:
OAuth2
Request Body schema: application/json

JSON body of TransactionIds to unreconcile

TransactionIds
Array of numbers

Responses

Request samples

Content type
application/json
{
  • "TransactionIds": [
    ]
}

Status

Status

Get Status

Get the status of a job

Authorizations:
OAuth2
path Parameters
type
required
string
Enum: "costbasis" "crypto-journals" "inventory"

API type

Responses

Response samples

Content type
application/json
{
  • "status": "done",
  • "type": "costbasis",
  • "tenantId": "string",
  • "data": {
    }
}

Stock Adjustments

Stock Adjustments

Cost Basis

Get next date cost basis will run from

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "nextCostBasisDate": "2019-08-24T14:15:22Z"
}

Cost Basis

Start costbasis process

Authorizations:
OAuth2

Responses

Search

Field Filterable Sortable
_id
ItemId
description
WarehouseId
locked
transactionDate
postedDate
AdjustmentLedgerAccountId
JournalId
type
PurchaseOrderId
POLineItemId
SalesOrderId
SOLineItemId
TransferId
quantity
qtyAvailable
qtyPicked
currency
price
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "transactionDate:DESC"

Order to return results in. ex "date:desc"

LocationId
number

Will include Stock Adjustments that have a Warehouse with this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Adjust Stock

Creates a new Stock Adjustment

Webhooks

StockAdjustment CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Stock Adjustment

type
required
string
Enum: "adjustment" "return"

Standard type is adjustment. Return is used for received shipment receipts.

ItemId
required
integer

Ref: Item._id

WarehouseId
required
integer

Ref: Warehouse._id

AdjustmentLedgerAccountId
required
integer

Ref: LedgerAccount._id

transactionDate
required
string <date-time>

Cannot be in the future

quantity
required
string <number>

Cannot = 0 Must be < 0 for type = 'return'

dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

postedDate
string <date>
Default: "transactionDate"
description
string
price
string <number>

Required if quantity > 0 Must be > 0 Not allowed for type = 'return'

currency
string <ISO4217 3 Char Code>

"Ref: Currency.code" Required if price is specified Not allowed for type = 'return'

POLineItemId
integer

Ref: POLineItem._id Required if type = 'return' Not allowed for type = 'adjustment'

ShipmentReceiptLineId
integer

Ref: ShipmentReceiptLine._id Required if type = 'return' Not allowed for type = 'adjustment'

Responses

Request samples

Content type
application/json
{
  • "type": "adjustment",
  • "dontRunCostBasis": false,
  • "transactionDate": "2019-08-24T14:15:22Z",
  • "postedDate": "transactionDate",
  • "quantity": "string",
  • "description": "string",
  • "price": "string",
  • "currency": "string",
  • "ItemId": 0,
  • "WarehouseId": 0,
  • "AdjustmentLedgerAccountId": 0,
  • "POLineItemId": 0,
  • "ShipmentReceiptLineId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "transactionDate": "2019-08-24T14:15:22Z",
  • "postedDate": "2019-08-24",
  • "quantity": "string",
  • "qtyPicked": "string",
  • "price": "string",
  • "costBasis": "string",
  • "qtyAvailable": "string",
  • "avgCost": "string",
  • "type": "fulfill",
  • "TransferId": 0,
  • "locked": true,
  • "currency": "string",
  • "currencyRate": "string",
  • "ItemId": 0,
  • "WarehouseId": 0,
  • "AdjustmentLedgerAccountId": 0,
  • "JournalId": 0,
  • "POLineItemId": 0,
  • "SOLineItemId": 0,
  • "ShipmentReceiptLineId": 0,
  • "description": "string"
}

Cost Layers

Gets cost-layers for an adjustment

Authorizations:
OAuth2
path Parameters
id
required
string

StockAdjustment._id

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Stock Adjustments

Can only delete if status if type is adjustment and locked is false.

The linked journal entry will be deleted if it exists.

Webhooks

StockAdjustment DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Statement Id

query Parameters
runCostBasis
boolean
Default: false

If true, will run cost basis calculation after delete succeeds.

Responses

Update Stock Adjustment

Update Stock Adjustment

Webhooks

StockAdjustment UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Stock Adjustment Id

Request Body schema: application/json

JSON body to update Stock Adjustment

dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

transactionDate
string <date-time>

Cannot be in the future

postedDate
string <date>
Default: "transactionDate"
quantity
string <number>

Cannot = 0

description
string
price
string <number>

Only allowed if quantity > 0, Must be >=0

currency
string <ISO4217 3 Char Code>

Ref: Currency.code

ItemId
integer

Ref: Item._id

WarehouseId
integer

Ref: Warehouse._id

AdjustmentLedgerAccountId
integer

Ref: LedgerAccount._id

Responses

Request samples

Content type
application/json
{
  • "dontRunCostBasis": false,
  • "transactionDate": "2019-08-24T14:15:22Z",
  • "postedDate": "transactionDate",
  • "quantity": "string",
  • "description": "string",
  • "price": "string",
  • "currency": "string",
  • "ItemId": 0,
  • "WarehouseId": 0,
  • "AdjustmentLedgerAccountId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "transactionDate": "2019-08-24T14:15:22Z",
  • "postedDate": "2019-08-24",
  • "quantity": "string",
  • "qtyPicked": "string",
  • "price": "string",
  • "costBasis": "string",
  • "qtyAvailable": "string",
  • "avgCost": "string",
  • "type": "fulfill",
  • "TransferId": 0,
  • "locked": true,
  • "currency": "string",
  • "currencyRate": "string",
  • "ItemId": 0,
  • "WarehouseId": 0,
  • "AdjustmentLedgerAccountId": 0,
  • "JournalId": 0,
  • "POLineItemId": 0,
  • "SOLineItemId": 0,
  • "ShipmentReceiptLineId": 0,
  • "description": "string"
}

Stock Summary

Field Filterable Sortable
ItemId
Item.number
Item.name
Item.sku
Item.description
WarehouseId
Warehouse.name
qtyAvailable
transactionDate
postedDate

Passing a transactionDate filter will summarize all of the adjustments with a transactionDate prior to or equal to the transactionDate passed

Passing a postedDate filter will summarize all of the adjustments with a postedDate prior to or equal to the postedDate passed

Authorizations:
OAuth2
query Parameters
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: "Item.name:DESC"

Order to return results in. ex "date:desc"

LocationId
number

Will include Stock Adjustments that have a Warehouse with this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Stock Summary Count

Counts the Stock Summary data.

The same filters as Stock Summary can be used here.

Authorizations:
OAuth2
query Parameters
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 Stock Adjustments that have a Warehouse with this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Stock Counts

Stock Counts

Search

Field Filterable Sortable
_id
status
submitDate
ItemId
WarehouseId
quantity
unitCost
SystemJobId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "submitDate:DESC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Delete

Delete one Stock Count

Can only delete if status is 'draft'

Webhooks

StockCount DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Stock Count Id

Responses

Update

Update One Stock Count

Can only update if in draft status

Webhooks

StockCount UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Stock Count Id

Request Body schema: application/json

JSON body containing key and values to update

quantity
string <number>
unitCost
string <number>

Responses

Request samples

Content type
application/json
{
  • "quantity": "string",
  • "unitCost": "string"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "status": "string",
  • "quantity": "string",
  • "unitCost": "string",
  • "submitDate": "2019-08-24",
  • "SystemJobId": 0,
  • "ItemId": 0,
  • "WarehouseId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Submit

Submit a stock count for approval

Webhooks

StockCount SUBMIT
Authorizations:
OAuth2
path Parameters
id
required
string

StockCount _id

Request Body schema: application/json

Ledger Account must be active

LedgerAccountId
required
integer

Ref: LedgerAccounts, used as the Adjustment Ledger Account for the created stock adjustment

submitDate
string
Default: "NOW"

Used as transaction date for created stock adjustment

Responses

Request samples

Content type
application/json
{
  • "LedgerAccountId": 0,
  • "submitDate": "NOW"
}

System Jobs

System Jobs

Search

Returns a list of system jobs in descending order by date

Field Filterable
_id
tenantId
date
queueName
status
name
result
progress
url
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

queueName
string
Enum: "journal" "bill" "crypto" "invoice" "stockCounts" "ledgerAccounts" "customers" "vendors" "items" "warehouses" "stockAdjustments" "vendorPrices" "costCenters" "jobs" "products" "custom1" "custom2" "custom3" "bankTransactions"
Example: queueName={"in":["ledgerAccounts","customers","vendors"]}. or simple a string 'vendorPrice'

JSON Key:Value object to filter queueNames on

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create new System Job

Webhooks

SystemJob CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new System Job

queueName
required
string
Enum: "dimension" "doc"
name
string
object
notBulk
boolean

If false appends 'bulk_' as prefix to queueName

Responses

Request samples

Content type
application/json
{
  • "queueName": "dimension",
  • "name": "string",
  • "data": {
    },
  • "notBulk": true
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "name": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "progress": "string",
  • "queueName": "journal",
  • "results": 0,
  • "status": "completed",
  • "tenantId": "string",
  • "url": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

Returns a count of system jobs

Field Filterable
_id
tenantId
date
queueName
status
name
result
progress
url
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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

queueName
string
Enum: "journal" "bill" "crypto" "invoice" "stockCounts" "ledgerAccounts" "customers" "vendors" "items" "warehouses" "stockAdjustments" "vendorPrices" "costCenters" "jobs" "products" "custom1" "custom2" "custom3"
Example: queueName={"in":["ledgerAccounts","customers","vendors"]}. or simple a string 'vendorPrice'

JSON Key:Value object to filter queueNames on

Responses

Response samples

Content type
application/json
{
  • "count": 0,
  • "estimate": true
}

One

Get one System Job

Authorizations:
OAuth2
path Parameters
id
required
string

System Job Id

Responses

Response samples

Content type
application/json
{
  • "_id": "string",
  • "queueName": "string",
  • "date": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "progress": "string",
  • "status": "completed",
  • "results": 0
}

Tax Codes

Tax Codes

Search

Field Filterable Sortable
_id
code
description
rate
LedgerAccountId
LedgerAccount.number
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "code:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Tax Code

Webhooks

TaxCode CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Tax Code.

One of [LedgerAccountId, LedgerAccount.number] is required

code
required
string
rate
required
string <number>
description
string
LedgerAccountId
number

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "code": "string",
  • "description": "string",
  • "rate": "string",
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "code": "string",
  • "description": "string",
  • "rate": "string",
  • "LedgerAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Tax Code

Webhooks

TaxCode DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Tax Code Id

Responses

Update

Update One Tax Code

Webhooks

TaxCode UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Tax Code Id

Request Body schema: application/json

JSON body containing key and values to update

code
string
description
string
rate
string <number>
LedgerAccountId
number

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "code": "string",
  • "description": "string",
  • "rate": "string",
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "code": "string",
  • "description": "string",
  • "rate": "string",
  • "LedgerAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Templates

Templates

One

Get one Template

Authorizations:
OAuth2
path Parameters
id
required
string

Template Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "code": "string",
  • "description": "string",
  • "rate": "string",
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "name": "string",
  • "type": "Invoice",
  • "format": "pdf",
  • "data": { }
}

Delete

Delete one Template

Webhooks

Template DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Template Id

Responses

Update

Update One Template

Webhooks

Template UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Template Id

Request Body schema: application/json

JSON body containing key and values to update

name
string
type
string
Enum: "Invoice" "PurchaseOrder" "SalesOrder" "SalesQuote"
format
string
Enum: "pdf" "doc"
data
object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "Invoice",
  • "format": "pdf",
  • "data": { }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "Invoice",
  • "format": "pdf",
  • "data": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Search

Field Filterable Sortable
_id
name
type
format
Authorizations:
OAuth2
query Parameters
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"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new template

Webhooks

Template CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Template

name
required
string
type
required
string
Enum: "Invoice" "PurchaseOrder" "SalesOrder" "SalesQuote"
data
required
object
format
string
Default: "pdf"
Enum: "pdf" "doc"

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "Invoice",
  • "format": "pdf",
  • "data": { }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "type": "Invoice",
  • "format": "pdf",
  • "data": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Timezones

Timezones

Supported Timezones

Returns an array of all supported timezones

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
[
  • "string"
]

Transactions

Transactions

Search Deprecated

This endpoint is deprecated. Please use the new GET /journals/lines endpoint instead.

For the new endpoint documentation, refer to: GET /journals/lines

Field Filterable Sortable
_id
elimination
elim2
CostCenterId
currency
Custom1Id
Custom2Id
Custom3Id
CustomerId
description
ICAccountId
ICLocationId
JobId
JournalId
Journal_entryType
Journal_notes
Journal_number
Journal_reference
Journal_status
Journal_sourceLedger
Journal_AccountingPeriodId
LedgerAccount_type
LedgerAccount_subtype
LedgerAccountId
LocationId
ProductId
postedDate
transactionDate
reconcileId
reversing
SystemJobId
VendorId
BatchPaymentId
credit
debit
txn_type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "postedDate:ASC"

Order to return results in. ex "date:desc"

currency
string

******* NOTE ********** We recommend using the v2/journals/lines route instead. This route only exists for legacy reporting support.


Cannot use a custom currency

If set, will return debit/credit values in this currency

If not set, returns debit/credit values in thier posted currency.

LocationId
number

Will include transactions from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Running Sum Deprecated

Field Filterable
_id
description
elimination
elim2
CostCenterId
currency
Custom1Id
Custom2Id
Custom3Id
CustomerId
ICAccountId
ICLocationId
JobId
JournalId
Journal_entryType
Journal_notes
Journal_number
Journal_reference
Journal_status
Journal_sourceLedger
LedgerAccount_type
LedgerAccount_subtype
LedgerAccountId
LocationId
ProductId
postedDate
transactionDate
reconcileId
reversing
SystemJobId
VendorId
txn_type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
currency
required
string

"Ref: Currency.code", cannot use a custom currency

Return debit/credit values in this currency

startDate
required
string <date>

Will include transactions from this postedDate and forward.

endDate
required
string <date>

Will include transactions from this postedDate and back.

LocationId
required
number

Will include transactions from this Location and its children

Filters on LocationId can further limit data.

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Sum Deprecated

Field Filterable
_id
description
elimination
elim2
CostCenterId
Custom1Id
Custom2Id
Custom3Id
CustomerId
ICAccountId
ICLocationId
JobId
JournalId
Journal_entryType
Journal_notes
Journal_number
Journal_reference
Journal_status
Journal_sourceLedger
LedgerAccount_type
LedgerAccount_subtype
LedgerAccountId
LocationId
ProductId
postedDate
transactionDate
reconcileId
reversing
SystemJobId
VendorId
currency
txn_type
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
currency
required
string

"Ref: Currency.code", cannot use a custom currency

If set, will return debit/credit values in this currency

If not set, returns debit/credit values in thier posted currency.

startDate
required
string <date>

Sum will include transactions from this postedDate and forward.

endDate
required
string <date>

Sum will include transactions from this postedDate and back.

LocationId
required
number

Sum will include transactions from this Location and its children

Filters on LocationId can further limit data.

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

Responses

Response samples

Content type
application/json
"string"

Transfers

Transfers

Search

Field Filterable Sortable
_id
ItemId
status
FromWarehouseId
ToWarehouseId
quantity
date
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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: "date:DESC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Transfer Stock

Creates a new Transfer

Webhooks

Transfer CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Transfer

Cannot transfer to the same warehouse

Currency is set to currency of "FromWarehouse"

date
required
string <date-time>

Cannot be in the future

quantity
required
string <number>

Must be > 0

ItemId
required
integer

Ref: Item._id

FromWarehouseId
required
integer

Ref: Warehouse._id

ToWarehouseId
required
integer

Ref: Warehouse._id

dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

status
string
Default: "complete"
Enum: "inTransit" "complete"

Responses

Request samples

Content type
application/json
{
  • "dontRunCostBasis": false,
  • "date": "2019-08-24T14:15:22Z",
  • "quantity": "string",
  • "status": "inTransit",
  • "ItemId": 0,
  • "ToWarehouseId": 0,
  • "FromWarehouseId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "date": "2019-08-24T14:15:22Z",
  • "quantity": "string",
  • "status": "inProgress",
  • "currency": "string",
  • "ItemId": 0,
  • "ToWarehouseId": 0,
  • "FromWarehouseId": 0
}

Complete Transfer

Complete Transfer

Webhooks

Transfer COMPLETE
Authorizations:
OAuth2
path Parameters
id
required
string

Transfer Id

Request Body schema: application/json

Request Body

dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

Responses

Request samples

Content type
application/json
{
  • "dontRunCostBasis": false
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Transfer

Webhooks

Transfer DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Transfer Id

query Parameters
dontRunCostBasis
boolean
Default: false

If true, cost basis calculation will not be run on success

Responses

Update Transfer

Update Transfer

Webhooks

Transfer UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Transfer Id

Request Body schema: application/json

JSON body to update Transfer

Can only update a transfer if it is inTransit

Currency is set to currency of "FromWarehouse"

dontRunCostBasis
boolean
Default: false

Set to true to prevent running costbasis upon success

date
string <date-time>

Cannot be in the future

quantity
string <number>

Must be > 0

ItemId
integer

Ref: Item._id

ToWarehouseId
integer

Ref: Warehouse._id

FromWarehouseId
integer

Ref: Warehouse._id

Responses

Request samples

Content type
application/json
{
  • "dontRunCostBasis": false,
  • "date": "2019-08-24T14:15:22Z",
  • "quantity": "string",
  • "ItemId": 0,
  • "ToWarehouseId": 0,
  • "FromWarehouseId": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "date": "2019-08-24T14:15:22Z",
  • "quantity": "string",
  • "status": "inProgress",
  • "currency": "string",
  • "ItemId": 0,
  • "ToWarehouseId": 0,
  • "FromWarehouseId": 0
}

Users

Users

All Users

All Users

Authorizations:
OAuth2
query Parameters
limit
integer [ 1 .. 1000 ]
Default: 25

Maximum number of records to return.

offset
number

offset to page forwards from

Responses

Response samples

Content type
application/json
{
  • "totalItems": 0,
  • "data": [
    ]
}

Create

Create new User

Webhooks

User CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new User

fname
required
string
lname
required
string
email
required
string
phoneNumber
required
string
LocationId
required
string
use_mfa
boolean

Responses

Request samples

Content type
application/json
{
  • "fname": "string",
  • "lname": "string",
  • "email": "string",
  • "phoneNumber": "string",
  • "LocationId": "string",
  • "use_mfa": true
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "profilePicURL": "string",
  • "tenantId": "string",
  • "use_mfa": true,
  • "fname": "string",
  • "lname": "string",
  • "LocationId": 0,
  • "phone_number": "string",
  • "email": "string"
}

One

One User

Authorizations:
OAuth2
path Parameters
id
required
string

User Id

Responses

Response samples

Content type
application/json
{
  • "_id": "string",
  • "profilePicURL": "string",
  • "tenantId": "string",
  • "use_mfa": true,
  • "hasMfaEnrolled": true,
  • "lname": "string",
  • "fname": "string",
  • "LocationId": 0,
  • "phone_number": "string",
  • "authorization": true,
  • "permissions": [
    ],
  • "email": "string",
  • "tenants": [
    ]
}

Delete

Delete one User

Webhooks

User DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

User Id

Responses

Update

Update User

Webhooks

User UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

User Id

Request Body schema: application/json

JSON body to update User

fname
string
lname
string
phone_number
string
use_mfa
boolean
LocationId
number

Responses

Request samples

Content type
application/json
{
  • "fname": "string",
  • "lname": "string",
  • "phone_number": "string",
  • "use_mfa": true,
  • "LocationId": 0
}

Response samples

Content type
application/json
{
  • "app_metadata": {
    },
  • "user_id": "string",
  • "email": "string",
  • "email_verified": true,
  • "identities": { },
  • "name": "string",
  • "nickname": "string",
  • "picture": "string",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "created_at": "2019-08-24T14:15:22Z"
}

User Roles

Get User Roles

Authorizations:
OAuth2
path Parameters
id
required
string

User Id

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update User Roles

Update User Roles

Webhooks

User UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

User Id

Request Body schema: application/json

JSON body to update User Roles

Array
id
string
description
string
name
string

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Update Self

Update self

This endpoint will update the user's own information.

This request will only work with a user token and not an api token.

Settings such as hideZeroCoins and stickyNav will not trigger a webhook.

Webhooks

User UPDATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to update User

fname
string
lname
string
profilePicURL
string
restoreId
string
hideZeroCoins
boolean
stickyNav
boolean

Responses

Request samples

Content type
application/json
{
  • "fname": "string",
  • "lname": "string",
  • "profilePicURL": "string",
  • "restoreId": "string",
  • "hideZeroCoins": true,
  • "stickyNav": true
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "fname": "string",
  • "lname": "string",
  • "phone_number": "string",
  • "hideZeroCoins": true,
  • "stickyNav": true,
  • "email": "string",
  • "profilePicURL": "string"
}

Vendors

Vendors

Search

Field Filterable Sortable
_id
id
name
externalId
nameOnCheck
accNumber
email
terms
EIN
currency
customFields
defaultDaysDue
is1099
inactive
createdAt
updatedAt
ExpenseAccountId
ExpenseAccount.number
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

order
string
Default: "id:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Vendor

Webhooks

Vendor CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Vendor

Only one of [ExpenseAccount.number, ExpenseAccountId] can be set

name
required
string
externalId
string
nameOnCheck
string
accNumber
string
email
string <email>
terms
string
EIN
string
currency
string

Ref: Currency.code

defaultDaysDue
integer >= 1
customFields
object
Default: {}

Key->Value store of custom fields

is1099
boolean
Default: false
inactive
boolean
Default: false
ExpenseAccountId
integer

Ref: LedgerAccount._id

object
object

Default address for vendor

object

Primary contact for vendor

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "name": "string",
  • "nameOnCheck": "string",
  • "accNumber": "string",
  • "email": "user@example.com",
  • "terms": "string",
  • "EIN": "string",
  • "currency": "string",
  • "defaultDaysDue": 1,
  • "customFields": { },
  • "is1099": false,
  • "inactive": false,
  • "ExpenseAccountId": 0,
  • "ExpenseAccount": {
    },
  • "Address": {
    },
  • "Contacts": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "nameOnCheck": "string",
  • "accNumber": "string",
  • "email": "string",
  • "terms": "string",
  • "EIN": "string",
  • "currency": "string",
  • "defaultDaysDue": 0,
  • "customFields": { },
  • "is1099": true,
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "ExpenseAccountId": 0
}

Bills

This endpoint returns only bills for the specified vendor. The response and parameters of this endpoint are the same as for Bills Search

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Count Bills

This endpoint returns only count of bills for the specified vendor. The same filters as Search can be used here.

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Id

query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Vendor

Webhooks

Vendor DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Id

Responses

One

Get one Vendor

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "nameOnCheck": "string",
  • "accNumber": "string",
  • "email": "string",
  • "terms": "string",
  • "EIN": "string",
  • "currency": "string",
  • "defaultDaysDue": 0,
  • "customFields": { },
  • "is1099": true,
  • "inactive": true,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "ExpenseAccountId": 0,
  • "ExpenseAccount": {
    },
  • "Addresses": [
    ],
  • "Contacts": [
    ]
}

Update

Update One Vendor

Webhooks

Vendor UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Id

Request Body schema: application/json

JSON body containing key and values to update

Only one of [ExpenseAccount.number, ExpenseAccountId] can be set

externalId
string
name
string
nameOnCheck
string
accNumber
string
email
string <email>
terms
string
EIN
string
currency
string

Ref: Currency.code

defaultDaysDue
integer >= 1
is1099
boolean
Default: false
customFields
object

Key->Value store of custom fields

inactive
boolean
Default: false
ExpenseAccountId
integer

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "externalId": "string",
  • "name": "string",
  • "nameOnCheck": "string",
  • "accNumber": "string",
  • "email": "user@example.com",
  • "terms": "string",
  • "EIN": "string",
  • "currency": "string",
  • "defaultDaysDue": 1,
  • "is1099": false,
  • "customFields": { },
  • "inactive": false,
  • "ExpenseAccountId": 0,
  • "ExpenseAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "id": "string",
  • "externalId": "string",
  • "name": "string",
  • "nameOnCheck": "string",
  • "accNumber": "string",
  • "email": "string",
  • "terms": "string",
  • "EIN": "string",
  • "currency": "string",
  • "defaultDaysDue": 0,
  • "is1099": true,
  • "inactive": true,
  • "customFields": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "ExpenseAccountId": 0
}

Payments

This endpoint returns only payments for the specified vendor. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Vendor Credits

Vendor Credits

Search

Field Filterable Sortable
_id
number
externalId
type
amount
unused
description
currency
receiveDate
postingDate
status
VendorId
LedgerAccountId
UnappliedCreditAccountId
LocationId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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:DESC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Creates a new Vendor Credit

Webhooks

VendorCredit CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Vendor Credit

Only one of [Vendor.id, VendorId] can be set

Only one of [LedgerAccount.number, LedgerAccountId] can be set

Only one of [Location.id, LocationId] can be set

Only one of [UnappliedCreditAccount.number, UnappliedCreditAccountId] can be set

number
required
string
type
required
string
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
VendorId
number

Ref: Vendor._id

object
LedgerAccountId
number

Ref: LedgerAccount._id

object
LocationId
number

Ref: Location._id

object
UnappliedCreditAccountId
number

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "externalId": "string",
  • "type": "string",
  • "amount": "string",
  • "description": "string",
  • "currency": "string",
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "VendorId": 0,
  • "Vendor": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "UnappliedCreditAccountId": 0,
  • "UnappliedCreditAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "externalId": "string",
  • "type": "string",
  • "amount": "string",
  • "unused": "string",
  • "description": "string",
  • "currency": "string",
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "status": "created",
  • "VendorId": 0,
  • "LedgerAccountId": 0,
  • "LocationId": 0,
  • "UnappliedCreditAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Vendor Credit

Webhooks

VendorCredit DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Credit Id

Responses

One

Get one Vendor Credit

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Credit Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "number": "string",
  • "externalId": "string",
  • "type": "string",
  • "amount": "string",
  • "unused": "string",
  • "description": "string",
  • "currency": "string",
  • "attachments": [],
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "status": "created",
  • "VendorId": 0,
  • "Vendor": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "UnappliedCreditAccountId": 0,
  • "UnappliedCreditAccount": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update

Update One Vendor Credit

Webhooks

VendorCredit UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Credit Id

Request Body schema: application/json

JSON body containing key and values to update

Cannot update a Vendor Credit if an unapplied cash journal entry was created

Only one of [Vendor.id, VendorId] can be set

Only one of [LedgerAccount.number, LedgerAccountId] can be set

Only one of [Location.id, LocationId] can be set

Only one of [UnappliedCreditAccount.number, UnappliedCreditAccountId] can be set

number
string
externalId
string
type
string
Enum: "charge" "check" "ACH" "Wire"
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

VendorId
number

Ref: Vendor._id

object
LedgerAccountId
number

Ref: LedgerAccount._id

object
LocationId
number

Ref: Location._id

object
UnappliedCreditAccountId
number

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "number": "string",
  • "externalId": "string",
  • "type": "charge",
  • "amount": "string",
  • "description": "string",
  • "currency": "string",
  • "receiveDate": "2019-08-24",
  • "postingDate": "2019-08-24",
  • "attachments": [],
  • "VendorId": 0,
  • "Vendor": {
    },
  • "LedgerAccountId": 0,
  • "LedgerAccount": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "UnappliedCreditAccountId": 0,
  • "UnappliedCreditAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_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",
  • "attachments": [],
  • "VendorId": 0,
  • "LedgerAccountId": 0,
  • "LocationId": 0,
  • "UnappliedCreditAccountId": 0,
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Payments

This endpoint returns only payments for the specified vendor credit. The response and parameters of this endpoint are the same as for Payments Search

Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Credit._id

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Void

Void one Vendor Credit

Webhooks

VendorCredit VOID
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Credit Id

Responses

Vendor Prices

Vendor Prices

Search

Field Filterable Sortable
_id
VendorId
ItemId
price
minValue
maxValue
Item
Vendor
Authorizations:
OAuth2
query Parameters
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

order
string
Default: "_id:ASC"

Order to return results in. ex "date:desc"

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create new Vendor Price

Webhooks

VendorPrice CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Vendor Price

VendorId
required
integer
ItemId
required
integer
price
required
number

must be > 0

minValue
required
number
maxValue
number or null

0 will be treated as an infinite value, and returned as null. Must be greater than minValue

Responses

Request samples

Content type
application/json
{
  • "VendorId": 0,
  • "ItemId": 0,
  • "price": 0,
  • "minValue": 0,
  • "maxValue": 0
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "VendorId": 0,
  • "ItemId": 0,
  • "price": "string",
  • "minValue": "string",
  • "maxValue": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Price

Show price for Vendor & Item relationships

Authorizations:
OAuth2
query Parameters
quantity
required
number

quantity of items

VendorId
required
number

VendorId of Vendor Price Pair

ItemId
required
number

ItemId of Vendor Price Pair

Responses

Response samples

Content type
application/json
{
  • "price": "1",
  • "source": "VendorPrice"
}

Delete

Delete one Vendor Price

Webhooks

VendorPrice DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Price Id

Responses

Update

Update one Vendor Price

Webhooks

VendorPrice UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Vendor Price Id

Request Body schema: application/json

JSON object containing key and values to update

price
number

must be > 0

minValue
number
maxValue
number

Must be > minValue. 0 will be treated as an infinite value

Responses

Request samples

Content type
application/json
{
  • "price": 0,
  • "minValue": 0,
  • "maxValue": 0
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "VendorId": 0,
  • "ItemId": 0,
  • "price": "string",
  • "minValue": "string",
  • "maxValue": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Wallets

Wallets

Get All Wallets

Field Filterable Sortable
_id
name
externalId
address
exchange
description
tag
createdAt
updatedAt
DepositAccountId
WithdrawalAccountId
LocationId
DepositAccount.number
WithdrawalAccount.number
Location.id
Authorizations:
OAuth2
query Parameters
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.

order
string
Default: "name:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create A Wallet

Creates a new Wallet

Webhooks

Wallet CREATE
Authorizations:
OAuth2
Request Body schema: application/json
required
name
required
string
externalId
string
address
string
description
string
exchange
string
tag
string
LocationId
integer
Default: "Global Location"

Ref: Location._id

object
DepositAccountId
integer

Ref: LedgerAccount._id

object
WithdrawalAccountId
integer

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "externalId": "string",
  • "address": "string",
  • "description": "string",
  • "exchange": "string",
  • "tag": "string",
  • "LocationId": "Global Location",
  • "Location": {
    },
  • "DepositAccountId": 0,
  • "DepositAccount": {
    },
  • "WithdrawalAccountId": 0,
  • "WithdrawalAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "externalId": "string",
  • "address": "string",
  • "description": "string",
  • "exchange": "string",
  • "tag": "string",
  • "DepositAccountId": 0,
  • "WithdrawalAccountId": 0,
  • "LocationId": "Global Location"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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
string

Filters for Wallets (Receive, Sent, Fee) in the specified location. Defaults to Global Location when not set.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete Wallet

Delete one Wallet

Webhooks

Wallet DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

id value

Responses

Get One Wallet

Authorizations:
OAuth2
path Parameters
id
required
string

id value

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "externalId": "string",
  • "address": "string",
  • "description": "string",
  • "exchange": "string",
  • "tag": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "DepositAccountId": 0,
  • "WithdrawalAccountId": 0,
  • "LocationId": 0,
  • "DepositAccount": {
    },
  • "WithdrawalAccount": {
    },
  • "Location": {
    }
}

Update Wallet

Updates a Wallet

Webhooks

Wallet UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

id value

Request Body schema: application/json
required
name
string
externalId
string
address
string
description
string
exchange
string
tag
string
LocationId
integer

Ref: Location._id

object
DepositAccountId
integer

Ref: LedgerAccount._id

object
WithdrawalAccountId
integer

Ref: LedgerAccount._id

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "externalId": "string",
  • "address": "string",
  • "description": "string",
  • "exchange": "string",
  • "tag": "string",
  • "LocationId": 0,
  • "Location": {
    },
  • "DepositAccountId": 0,
  • "DepositAccount": {
    },
  • "WithdrawalAccountId": 0,
  • "WithdrawalAccount": {
    }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "name": "string",
  • "externalId": "string",
  • "address": "string",
  • "description": "string",
  • "exchange": "string",
  • "tag": "string",
  • "DepositAccountId": 0,
  • "WithdrawalAccountId": 0,
  • "LocationId": "Global Location"
}

Coin Summary

List of Wallet's Coins with balance details

Field Filterable Orderable
_id
name
symbol
isFiat
rateSymbol
quantity
totalCostBasis
Authorizations:
OAuth2
path Parameters
id
required
string

Wallet.Id

query Parameters
showHidden
string

exclude zero balance coins

date
string <date-time>

date to filter by. defaults to "now" ISO DateTime

hideZero
string <date-time>

exclude zero balance coins

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Warehouses

Warehouses

Get All Warehouses

Field Filterable Sortable
_id
name
inactive
description
externalId
AddressId
Address.label
Address.line1
Address.line2
Address.city
Address.state
Address.zip
Address.country
ParentId
LocationId
createdAt
updatedAt
Authorizations:
OAuth2
query Parameters
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.

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

LocationId
number

Will include items from this Location and its children

Filters on LocationId can further limit data.

order
string
Default: "name:ASC"

Order to return results in. ex "date:desc"

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create new Warehouse

Webhooks

Warehouse CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Warehouse

One of [LocationId, Location.id] is required

name
required
string
LocationId
required
integer

Ref: Location._id

inactive
boolean
Default: false
description
string
externalId
string
object
object
ParentId
integer

"Ref: Warehouse._id" Cannot set self as parent

object

Responses

Request samples

Content type
application/json
{
  • "inactive": false,
  • "name": "string",
  • "description": "string",
  • "externalId": "string",
  • "Address": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "ParentId": 0,
  • "Parent": {
    }
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "name": "string",
  • "description": 0,
  • "externalId": 0,
  • "inactive": true,
  • "AddressId": "string",
  • "ParentId": "string",
  • "LocationId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Count

The same filters as Search can be used here.

Authorizations:
OAuth2
query Parameters
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

status
string
Enum: "active" "inactive"

Results will return active or inactive based on the objects inactive property. If not set all results will be returned.

LocationId
number

Will include items from this Location and its children

Filters on LocationId can further limit data.

Responses

Response samples

Content type
application/json
{
  • "count": "string",
  • "estimate": true
}

Delete

Delete one Warehouse. Cannot delete if there are linked stock adjustments or if the warehouse is set as a parent on other warehouses

Webhooks

Warehouse DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Warehouse Id

Responses

One

Get one Warehouse

Authorizations:
OAuth2
path Parameters
id
required
string

Warehouse Id

Responses

Response samples

Content type
application/json
{
  • "_id": 0,
  • "inactive": true,
  • "name": "string",
  • "externalId": "string",
  • "description": "string",
  • "LocationId": 0,
  • "ParentId": 0,
  • "AddressId": 0,
  • "Location": {
    },
  • "Parent": {
    },
  • "Address": {
    },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update Warehouse

Updates a Warehouse

Webhooks

Warehouse UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

id value

Request Body schema: application/json
required

Cannot Update Location if there are linked stock adjustments

name
string
description
string
externalId
string
inactive
boolean
AddressId
integer

Ref: Address._id

object

Address properties if provided will be added to the warehouse current address or new (if a different AddressId is provided)

LocationId
integer

Ref: Location._id

object
ParentId
integer

"Ref: Warehouse._id" Cannot set self as parent

object

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "externalId": "string",
  • "inactive": true,
  • "AddressId": 0,
  • "Address": {
    },
  • "LocationId": 0,
  • "Location": {
    },
  • "ParentId": 0,
  • "Parent": {
    }
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "name": "string",
  • "description": 0,
  • "externalId": 0,
  • "inactive": true,
  • "AddressId": "string",
  • "ParentId": "string",
  • "LocationId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Warehouse Stock

Summary of Warehouse stocked Items

Authorizations:
OAuth2
path Parameters
id
required
string

ID of Warehouse

query Parameters
childWh
boolean

Determine if the summary balances include stock from child warehouses

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Warehouse Items

Warehouse Items

Search

Field Filterable Sortable
_id
WarehouseId
ItemId
minValue
maxValue
customFields
Item
Warehouse
Authorizations:
OAuth2
query Parameters
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

order
string
Default: "_id:ASC"

Order to return results in. ex "date:desc"

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.

Responses

Response samples

Content type
application/json
{
  • "hasNextPage": true,
  • "cursor": "string",
  • "data": [
    ]
}

Create

Create new Warehouse Item

Webhooks

WarehouseItem CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Warehouse Item

WarehouseId
required
integer
ItemId
required
integer
minValue
required
number
maxValue
number

must be > 0 and > minValue

customFields
object

Key->Value hash of custom field names and values. Custom fields must be defined via the UI to be visible in the UI

Custom field values must be unique for all Warehouse Items in the same Warehouse

Responses

Request samples

Content type
application/json
{
  • "WarehouseId": 0,
  • "ItemId": 0,
  • "minValue": 0,
  • "maxValue": 0,
  • "customFields": { }
}

Response samples

Content type
application/json
{
  • "_id": "string",
  • "WarehouseId": 0,
  • "ItemId": 0,
  • "minValue": "1",
  • "maxValue": "1",
  • "customFields": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Delete

Delete one Warehouse Item

Webhooks

WarehouseItem DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Warehouse Item Id

Responses

Update

Update one Warehouse Item

Webhooks

WarehouseItem UPDATE
Authorizations:
OAuth2
path Parameters
id
required
string

Warehouse Item Id

Request Body schema: application/json

JSON object containing key and values to update

price
number
minValue
number
maxValue
number

must be > 0 and > minValue

customFields
object

Key->Value hash of custom field names and values. Custom fields must be defined via the UI to be visible in the UI

Custom field values must be unique for all Warehouse Items in the same Warehouse

Responses

Request samples

Content type
application/json
{
  • "price": 0,
  • "minValue": 0,
  • "maxValue": 0,
  • "customFields": { }
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "WarehouseId": 0,
  • "ItemId": 0,
  • "minValue": "string",
  • "maxValue": "string",
  • "customFields": { },
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Years

Accounting Years

All

All Years

Authorizations:
OAuth2

Responses

Response samples

Content type
application/json
{
  • "totalItems": 0,
  • "data": [
    ]
}

Create

The passed data will be the first day of the year created. Format, year(YYYY), month(MM), day(DD). Any subsequent years must have the same MM/DD as the previous years. Years must be created ±1 apart (no gaps between years)

Webhooks

AccountingYear CREATE
Authorizations:
OAuth2
Request Body schema: application/json

JSON body to create new Year

year
required
number
month
required
string
type
string
Value: "month"

Responses

Request samples

Content type
application/json
{
  • "year": 0,
  • "month": "string",
  • "type": "month"
}

Response samples

Content type
application/json
{
  • "_id": 0,
  • "tenantId": "string",
  • "year": 0,
  • "start": "string",
  • "end": "string",
  • "type": "month",
  • "status": "open",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Close

Close year

Webhooks

AccountingYear CLOSE
Authorizations:
OAuth2
path Parameters
id
required
string

Year Id

Responses

Open

Open year

Webhooks

AccountingYear OPEN
Authorizations:
OAuth2
path Parameters
id
required
string

Year Id

Responses

Delete

Delete Year

Webhooks

AccountingYear DELETE
Authorizations:
OAuth2
path Parameters
id
required
string

Year Id

Responses