Create invoice
Create a new invoice.
curl --request POST \
--url https://api.slash.com/invoice \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"accountId": "<string>",
"legalEntityCustomerId": "<string>",
"details": {
"issuedAt": "2023-12-25",
"dueAt": "2023-12-25",
"invoiceTz": "America/New_York",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"memo": "<string>",
"version": 2,
"ccEmails": [
"<string>"
]
},
"legalEntityContactId": "<string>",
"paymentMethods": [
{
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
}
]
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountId: '<string>',
legalEntityCustomerId: '<string>',
details: {
issuedAt: '2023-12-25',
dueAt: '2023-12-25',
invoiceTz: 'America/New_York',
lineItemsAndTotals: {
lineItems: [{name: '<string>', quantity: 123, priceCents: 123, catalogItemId: '<string>'}],
discount: {type: 'percentage', percent: 123},
tax: {type: 'percentage', percent: 123}
},
invoiceNumber: '<string>',
memo: '<string>',
version: 2,
ccEmails: ['<string>']
},
legalEntityContactId: '<string>',
paymentMethods: [{method: 'ach_debit', config: {passFeeToPayer: true}}]
})
};
fetch('https://api.slash.com/invoice', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.slash.com/invoice"
payload = {
"accountId": "<string>",
"legalEntityCustomerId": "<string>",
"details": {
"issuedAt": "2023-12-25",
"dueAt": "2023-12-25",
"invoiceTz": "America/New_York",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"memo": "<string>",
"version": 2,
"ccEmails": ["<string>"]
},
"legalEntityContactId": "<string>",
"paymentMethods": [
{
"method": "ach_debit",
"config": { "passFeeToPayer": True }
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.slash.com/invoice"
payload := strings.NewReader("{\n \"accountId\": \"<string>\",\n \"legalEntityCustomerId\": \"<string>\",\n \"details\": {\n \"issuedAt\": \"2023-12-25\",\n \"dueAt\": \"2023-12-25\",\n \"invoiceTz\": \"America/New_York\",\n \"lineItemsAndTotals\": {\n \"lineItems\": [\n {\n \"name\": \"<string>\",\n \"quantity\": 123,\n \"priceCents\": 123,\n \"catalogItemId\": \"<string>\"\n }\n ],\n \"discount\": {\n \"type\": \"percentage\",\n \"percent\": 123\n },\n \"tax\": {\n \"type\": \"percentage\",\n \"percent\": 123\n }\n },\n \"invoiceNumber\": \"<string>\",\n \"memo\": \"<string>\",\n \"version\": 2,\n \"ccEmails\": [\n \"<string>\"\n ]\n },\n \"legalEntityContactId\": \"<string>\",\n \"paymentMethods\": [\n {\n \"method\": \"ach_debit\",\n \"config\": {\n \"passFeeToPayer\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"invoice": {
"id": "<string>",
"status": "void",
"collectedAmountCents": 123,
"invoiceDetailsId": "<string>",
"accountId": "<string>",
"invoiceTransactions": [
{
"transactionType": "external",
"transaction": {
"paymentMethod": {
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
},
"paidAt": "<string>"
}
}
],
"legalEntityContactId": "<string>",
"legalEntityCustomerId": "<string>",
"invoicePaymentMethods": [
{
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
}
],
"closedAt": "2023-11-07T05:31:56Z",
"invoiceSeriesId": "<string>",
"scheduledSendDate": "2023-11-07T05:31:56Z"
},
"invoiceDetails": {
"id": "<string>",
"issuedAt": "2023-11-07T05:31:56Z",
"dueAt": "2023-11-07T05:31:56Z",
"invoiceTz": "America/New_York",
"currency": "<string>",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"subtotalCents": 123,
"totalAmountCents": 123,
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"documentId": "<string>",
"billedTo": {
"name": "<string>",
"email": "<string>",
"address": {
"addressLine": "<string>",
"addressCity": "<string>",
"addressState": "<string>",
"addressZip": "<string>",
"addressLine2": "<string>",
"addressCountry": "<string>"
},
"ccEmails": [
"<string>"
]
},
"version": 2,
"memo": "<string>"
},
"invoiceAccount": {
"id": "<string>",
"name": "<string>",
"slashAccountGroupId": "<string>",
"accountType": "default",
"accountNumber": "<string>",
"routingNumber": "<string>",
"closedAt": "<string>"
}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}Authorizations
API key authentication for public API requests.
Keys come in two flavors:
- Legal-entity-scoped keys are pinned to a single legal entity. Minted via the dashboard under a specific entity; every request acts on that entity.
- User-scoped keys are pinned to a user and span every legal
entity that user has access to. Every request made with a
user-scoped key (except
GET /legal-entity, which lists the legal entities the user can access) must include anx-legal-entityheader naming the legal entity the request is operating on. Requests without the header are rejected with400. The authenticated user must have an active permission role on the supplied legal entity, otherwise the request is rejected with403.
Body
The ID of the account to receive payment. You can get this by calling GET /account.
The ID of the customer to bill. Create a customer first via POST /customer.
Hide child attributes
Hide child attributes
IANA timezone identifier used for interpreting invoice dates
"America/New_York"
Hide child attributes
Hide child attributes
1Hide child attributes
Hide child attributes
Optional provenance stamp indicating this line item was populated from a catalog item. Cleared if the user manually edits the name or price after selection.
A user-defined invoice identifier. Allows uppercase letters (A-Z), numbers (0-9), dashes (-), and underscores (_).
1 - 50^[A-Z0-9-_]+$1 - 500Current version of the invoice details for optimistic locking. Required on updates, ignored on create.
x >= 110DEPRECATED. No longer accepted as of the contact→customer migration. Pass legalEntityCustomerId instead.
Payment methods to enable on this invoice.
- PaymentMethodAchDebit
- PaymentMethodCardPayment
- PaymentMethodCryptoDeposit
- PaymentMethodInboundAchTransfer
- PaymentMethodInboundInternationalWire
- PaymentMethodInboundRtp
- PaymentMethodInboundWireTransfer
Response
OK
Aggregate model for an invoice
Top-level invoice model
Hide child attributes
Hide child attributes
void, unpaid, overdue, paid_partially, paid, scheduled - InvoiceTransaction
- InvoiceTransaction
Hide child attributes
Hide child attributes
external Hide child attributes
Hide child attributes
Payment methods for invoice reconciliation (includes Slash-trackable methods plus external-only options like 'other')
Hide child attributes
Hide child attributes
- PaymentMethodAchDebit
- PaymentMethodCardPayment
- PaymentMethodCryptoDeposit
- PaymentMethodInboundAchTransfer
- PaymentMethodInboundInternationalWire
- PaymentMethodInboundRtp
- PaymentMethodInboundWireTransfer
Hide child attributes
Hide child attributes
IANA timezone identifier used for interpreting invoice dates
"America/New_York"
Hide child attributes
Hide child attributes
1Hide child attributes
Hide child attributes
Optional provenance stamp indicating this line item was populated from a catalog item. Cleared if the user manually edits the name or price after selection.
A user-defined invoice identifier. Allows uppercase letters (A-Z), numbers (0-9), dashes (-), and underscores (_).
1 - 50^[A-Z0-9-_]+$Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
ISO 3166-1 Alpha-2 Country Code (e.g., US, FR, UK, DE, ...).
210x >= 11 - 500- Model
- Model
- SlashWalletAccount
Hide child attributes
Hide child attributes
Represent a Subaccount ID in the format of "subaccount_102jifoij01"
^subaccount_[a-z0-9]*default, primary curl --request POST \
--url https://api.slash.com/invoice \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"accountId": "<string>",
"legalEntityCustomerId": "<string>",
"details": {
"issuedAt": "2023-12-25",
"dueAt": "2023-12-25",
"invoiceTz": "America/New_York",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"memo": "<string>",
"version": 2,
"ccEmails": [
"<string>"
]
},
"legalEntityContactId": "<string>",
"paymentMethods": [
{
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
}
]
}
'const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accountId: '<string>',
legalEntityCustomerId: '<string>',
details: {
issuedAt: '2023-12-25',
dueAt: '2023-12-25',
invoiceTz: 'America/New_York',
lineItemsAndTotals: {
lineItems: [{name: '<string>', quantity: 123, priceCents: 123, catalogItemId: '<string>'}],
discount: {type: 'percentage', percent: 123},
tax: {type: 'percentage', percent: 123}
},
invoiceNumber: '<string>',
memo: '<string>',
version: 2,
ccEmails: ['<string>']
},
legalEntityContactId: '<string>',
paymentMethods: [{method: 'ach_debit', config: {passFeeToPayer: true}}]
})
};
fetch('https://api.slash.com/invoice', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.slash.com/invoice"
payload = {
"accountId": "<string>",
"legalEntityCustomerId": "<string>",
"details": {
"issuedAt": "2023-12-25",
"dueAt": "2023-12-25",
"invoiceTz": "America/New_York",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"memo": "<string>",
"version": 2,
"ccEmails": ["<string>"]
},
"legalEntityContactId": "<string>",
"paymentMethods": [
{
"method": "ach_debit",
"config": { "passFeeToPayer": True }
}
]
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.slash.com/invoice"
payload := strings.NewReader("{\n \"accountId\": \"<string>\",\n \"legalEntityCustomerId\": \"<string>\",\n \"details\": {\n \"issuedAt\": \"2023-12-25\",\n \"dueAt\": \"2023-12-25\",\n \"invoiceTz\": \"America/New_York\",\n \"lineItemsAndTotals\": {\n \"lineItems\": [\n {\n \"name\": \"<string>\",\n \"quantity\": 123,\n \"priceCents\": 123,\n \"catalogItemId\": \"<string>\"\n }\n ],\n \"discount\": {\n \"type\": \"percentage\",\n \"percent\": 123\n },\n \"tax\": {\n \"type\": \"percentage\",\n \"percent\": 123\n }\n },\n \"invoiceNumber\": \"<string>\",\n \"memo\": \"<string>\",\n \"version\": 2,\n \"ccEmails\": [\n \"<string>\"\n ]\n },\n \"legalEntityContactId\": \"<string>\",\n \"paymentMethods\": [\n {\n \"method\": \"ach_debit\",\n \"config\": {\n \"passFeeToPayer\": true\n }\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"invoice": {
"id": "<string>",
"status": "void",
"collectedAmountCents": 123,
"invoiceDetailsId": "<string>",
"accountId": "<string>",
"invoiceTransactions": [
{
"transactionType": "external",
"transaction": {
"paymentMethod": {
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
},
"paidAt": "<string>"
}
}
],
"legalEntityContactId": "<string>",
"legalEntityCustomerId": "<string>",
"invoicePaymentMethods": [
{
"method": "ach_debit",
"config": {
"passFeeToPayer": true
}
}
],
"closedAt": "2023-11-07T05:31:56Z",
"invoiceSeriesId": "<string>",
"scheduledSendDate": "2023-11-07T05:31:56Z"
},
"invoiceDetails": {
"id": "<string>",
"issuedAt": "2023-11-07T05:31:56Z",
"dueAt": "2023-11-07T05:31:56Z",
"invoiceTz": "America/New_York",
"currency": "<string>",
"lineItemsAndTotals": {
"lineItems": [
{
"name": "<string>",
"quantity": 123,
"priceCents": 123,
"catalogItemId": "<string>"
}
],
"subtotalCents": 123,
"totalAmountCents": 123,
"discount": {
"type": "percentage",
"percent": 123
},
"tax": {
"type": "percentage",
"percent": 123
}
},
"invoiceNumber": "<string>",
"documentId": "<string>",
"billedTo": {
"name": "<string>",
"email": "<string>",
"address": {
"addressLine": "<string>",
"addressCity": "<string>",
"addressState": "<string>",
"addressZip": "<string>",
"addressLine2": "<string>",
"addressCountry": "<string>"
},
"ccEmails": [
"<string>"
]
},
"version": 2,
"memo": "<string>"
},
"invoiceAccount": {
"id": "<string>",
"name": "<string>",
"slashAccountGroupId": "<string>",
"accountType": "default",
"accountNumber": "<string>",
"routingNumber": "<string>",
"closedAt": "<string>"
}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}{
"message": "<string>",
"name": "<string>",
"identifier": "<string>",
"rawStatus": 123,
"meta": {}
}