curl --request POST \
--url https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"accounting_account_id": "<string>",
"code": "<string>",
"lettered_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"created_by_type": "<string>",
"lines_count": 123,
"total_debit": 123,
"total_credit": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Match lines together (organization)
Organization space, on a chosen book. Matches chosen debit and credit lines of one account as settled against each other.
curl --request POST \
--url https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/organization/books/{book}/letterings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"accounting_account_id": "<string>",
"code": "<string>",
"lettered_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"created_by_type": "<string>",
"lines_count": 123,
"total_debit": 123,
"total_credit": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}letterings.create
Conditions
- The book is the one selected for the request: the {book} segment in the organization space, or the client account’s own books in the client space.
- The accounting module must be included in the plan of the organization.
- The book must be set up for accounting (it must have at least one journal).
- accounting_account_id is required and must be an account of this book.
- line_ids is required: 2 to 1000 distinct line identifiers, each of a journal line of this book, otherwise validation fails.
- The account must be postable and its code must start with 4 (third-party accounts).
- Every line must belong to the chosen account; a line of another account, or a carry-forward restatement line, is refused.
- No line may already be matched.
- The total of the debit lines must equal the total of the credit lines.
- Creates one match with the next code of the account (AAA, AAB, … AAZ, ABA, … ZZZ, then AAAA) and stamps it with the current time and the acting member or agent account.
- Marks every chosen journal line as matched, so the lines leave the open items and the aged balance.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Identifier of the accounting book (the organization's own or a client account's) the request works on; 27-character KSUID.
Query Parameters
Response mode. Default none; none answers 204 No Content.
none, resource Comma-separated JSON keys of the root resource (id is always rendered). Available: id, accounting_account_id, code, lettered_at, created_by, created_by_type, lines_count, total_debit, total_credit, created_at.
Comma-separated include paths, each optionally followed by its fields in parentheses: units(id,sku),units.uomUnit(id,name). Max depth 6, max 40 paths. Available: .
Response
Resource (only with response=resource).
Identifier of the match, a 27-character KSUID.
Identifier of the third-party account whose lines are matched.
Match code, unique per account: AAA, AAB, ... ZZZ, then AAAA. Lines sharing a code are settled against each other.
Moment the match was made, ISO 8601.
Identifier of the member or agent account that made the match; null when none could be resolved.
Kind of actor in created_by (member or agent account); null when none could be resolved.
Number of journal lines in the match.
Sum of the debit lines of the match, in minor units (divide by 10 to the power currency_exponent).
Sum of the credit lines of the match, in minor units. Equals total_debit.
Date and time the record was created (ISO 8601, UTC).