curl --request POST \
--url https://api.exowpee.com/v1/accounting/client/journal-entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"journal_id": "<string>",
"accounting_date": "2023-12-25",
"lines": [
{
"accounting_account_id": "<string>",
"amount": 2,
"label": "<string>"
}
],
"reference": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.exowpee.com/v1/accounting/client/journal-entries"
payload = {
"journal_id": "<string>",
"accounting_date": "2023-12-25",
"lines": [
{
"accounting_account_id": "<string>",
"amount": 2,
"label": "<string>"
}
],
"reference": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
journal_id: '<string>',
accounting_date: '2023-12-25',
lines: [{accounting_account_id: '<string>', amount: 2, label: '<string>'}],
reference: '<string>',
description: '<string>'
})
};
fetch('https://api.exowpee.com/v1/accounting/client/journal-entries', 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/client/journal-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'journal_id' => '<string>',
'accounting_date' => '2023-12-25',
'lines' => [
[
'accounting_account_id' => '<string>',
'amount' => 2,
'label' => '<string>'
]
],
'reference' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/accounting/client/journal-entries"
payload := strings.NewReader("{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/accounting/client/journal-entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/client/journal-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"owner_type": "<string>",
"journal_id": "<string>",
"fiscal_period_id": "<string>",
"accounting_date": "2023-12-25",
"reference": "<string>",
"description": "<string>",
"source_type": "<string>",
"source_id": "<string>",
"source_event": "<string>",
"metadata": {},
"currency_code": "<string>",
"currency_exponent": 123,
"status": "<string>",
"reversal_of_entry_id": "<string>",
"refund_of_entry_id": "<string>",
"posted_at": "2023-11-07T05:31:56Z",
"lines": "<array>",
"attachments_count": 123,
"attachments": "<array>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"errors": {}
}Post a manual entry (client account)
Client space, on the client account’s own books. Records a manual accounting entry made of debit and credit lines in a chosen journal.
curl --request POST \
--url https://api.exowpee.com/v1/accounting/client/journal-entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"journal_id": "<string>",
"accounting_date": "2023-12-25",
"lines": [
{
"accounting_account_id": "<string>",
"amount": 2,
"label": "<string>"
}
],
"reference": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.exowpee.com/v1/accounting/client/journal-entries"
payload = {
"journal_id": "<string>",
"accounting_date": "2023-12-25",
"lines": [
{
"accounting_account_id": "<string>",
"amount": 2,
"label": "<string>"
}
],
"reference": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
journal_id: '<string>',
accounting_date: '2023-12-25',
lines: [{accounting_account_id: '<string>', amount: 2, label: '<string>'}],
reference: '<string>',
description: '<string>'
})
};
fetch('https://api.exowpee.com/v1/accounting/client/journal-entries', 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/client/journal-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'journal_id' => '<string>',
'accounting_date' => '2023-12-25',
'lines' => [
[
'accounting_account_id' => '<string>',
'amount' => 2,
'label' => '<string>'
]
],
'reference' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/accounting/client/journal-entries"
payload := strings.NewReader("{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/accounting/client/journal-entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/client/journal-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"journal_id\": \"<string>\",\n \"accounting_date\": \"2023-12-25\",\n \"lines\": [\n {\n \"accounting_account_id\": \"<string>\",\n \"amount\": 2,\n \"label\": \"<string>\"\n }\n ],\n \"reference\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"owner_type": "<string>",
"journal_id": "<string>",
"fiscal_period_id": "<string>",
"accounting_date": "2023-12-25",
"reference": "<string>",
"description": "<string>",
"source_type": "<string>",
"source_id": "<string>",
"source_event": "<string>",
"metadata": {},
"currency_code": "<string>",
"currency_exponent": 123,
"status": "<string>",
"reversal_of_entry_id": "<string>",
"refund_of_entry_id": "<string>",
"posted_at": "2023-11-07T05:31:56Z",
"lines": "<array>",
"attachments_count": 123,
"attachments": "<array>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"errors": {}
}journal_entries.create
Conditions
- The accounting module must be included in the plan of the organization.
- In the client space the book is always the client account’s own book.
- The book must be set up for accounting (it must have at least one journal).
- journal_id must be a journal of the selected book.
- There must be at least two lines, each with a distinct accounting_account_id, a direction of debit or credit and a whole positive amount.
- Total debits must equal total credits.
- Every line account must belong to the selected book and be postable; a non-postable account is refused.
- The accounting date must fall in a fiscal period that is not closed. A date after the latest fiscal year can create the following fiscal years automatically, within a limit; a date before the first fiscal year or beyond that limit is refused.
- A line on a VAT account is refused when the VAT of the period covering the date has already been declared.
- The currency is not sent: it is the currency of the fiscal year covering the date.
- Posts a new journal entry with status posted in the chosen journal, with a lines row for each submitted line, in the fiscal period covering the date.
- The entry has no source, so sending the same request twice posts two entries.
- Applies the book’s active analytic allocation rules to the new lines, when rules match.
- No transaction fee is computed on a manual entry.
- When a business rule refuses the post on an organization or company book, a posting incident is recorded (see the posting incidents list); client books record none.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
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, owner_type, journal_id, fiscal_period_id, accounting_date, reference, description, source_type, source_id, source_event, metadata, currency_code, currency_exponent, status, reversal_of_entry_id, refund_of_entry_id, posted_at, created_at, updated_at, attachments_count.
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: lines, lines.account, attachments.
Body
Manual (OD by default) entry. fiscal_period_id and currency_code/exponent
are server-derived (from the date per Rules 4/16 and the fiscal year per D7),
never client-sent.
Identifier of the journal to post in (27-character KSUID). It must belong to the selected book.
Date the entry counts for in the books (YYYY-MM-DD). It must fall in a fiscal period that is not closed.
Lines of the entry. At least two are required; the total of debit amounts must equal the total of credit amounts.
2Show child attributes
Show child attributes
Optional free-text reference of the entry.
Optional free-text description of the entry.
Response
Resource (only with response=resource).
Identifier of the journal entry (27-character KSUID).
Kind of book the entry belongs to: organization, company or client.
Identifier of the journal the entry is posted in (27-character KSUID).
Identifier of the fiscal period covering the accounting date, set by the server (27-character KSUID).
Date the entry counts for in the books (YYYY-MM-DD).
Free-text reference given at posting, or copied from the original entry on a reversal; null when none.
Free-text description given at posting; on a reversal, a text naming the original entry; null when none.
Kind of record that generated the entry (for example reversal, opening_balances or recurring_entry, or a business flow); null for a manual entry.
Identifier of the record that generated the entry; null for a manual entry.
Event of the source record that generated the entry (for example reversed, opening or run: for a recurring occurrence); null for a manual entry.
Extra data stored by automatic postings, such as fee snapshots or the company identifier; null for most manual entries.
ISO 4217 currency code of the entry, taken from the fiscal year (for example XOF).
Number of decimal places of the currency (0 for XOF). An amount in minor units divided by 10 to this power gives the amount in the currency.
State of the entry: posted (in force), reversed (cancelled by a reversal entry) or refunded (refunded by a refund entry).
When the entry is a reversal, the identifier of the entry it cancels; otherwise null.
When the entry is a refund, the identifier of the entry it refunds; otherwise null.
Moment the entry was posted, ISO 8601, set by the server.
Debit and credit lines of the entry. Present only when requested with include=lines; amounts are integers in minor units (divide by 10 to the power currency_exponent).
Number of supporting documents attached to the entry.
Supporting documents of the entry. Present only when requested with include=attachments and the caller holds the entry_attachments.list permission.
Date and time the record was created (ISO 8601, UTC).
Date and time the record was last changed (ISO 8601, UTC).