curl --request POST \
--url https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"statement_line_ids": [
"<string>"
],
"journal_line_ids": [
"<string>"
]
}
'import requests
url = "https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches"
payload = {
"statement_line_ids": ["<string>"],
"journal_line_ids": ["<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({statement_line_ids: ['<string>'], journal_line_ids: ['<string>']})
};
fetch('https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches', 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/{bankStatement}/bank-statements/{bank_statement}/matches",
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([
'statement_line_ids' => [
'<string>'
],
'journal_line_ids' => [
'<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/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches"
payload := strings.NewReader("{\n \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\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/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches")
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 \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"bank_statement_id": "<string>",
"created_by": "<string>",
"created_by_type": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"statement_lines": "<array>",
"journal_lines": "<array>"
}{
"message": "<string>",
"errors": {}
}Match statement to entries
Link bank statement lines to the corresponding accounting entry lines to mark them as explained.
curl --request POST \
--url https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"statement_line_ids": [
"<string>"
],
"journal_line_ids": [
"<string>"
]
}
'import requests
url = "https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches"
payload = {
"statement_line_ids": ["<string>"],
"journal_line_ids": ["<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({statement_line_ids: ['<string>'], journal_line_ids: ['<string>']})
};
fetch('https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches', 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/{bankStatement}/bank-statements/{bank_statement}/matches",
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([
'statement_line_ids' => [
'<string>'
],
'journal_line_ids' => [
'<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/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches"
payload := strings.NewReader("{\n \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\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/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/accounting/organization/books/{bankStatement}/bank-statements/{bank_statement}/matches")
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 \"statement_line_ids\": [\n \"<string>\"\n ],\n \"journal_line_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"bank_statement_id": "<string>",
"created_by": "<string>",
"created_by_type": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"statement_lines": "<array>",
"journal_lines": "<array>"
}{
"message": "<string>",
"errors": {}
}bank_statements.match
Conditions
- The accounting module must be active for the organization.
- The caller must have been granted access to the book in the URL.
- Only the organization’s own book is accepted; a company book or a client book is refused.
- The statement must still be open; a reconciled statement is refused.
- statement_line_ids and journal_line_ids are both required, with 1 to 1000 distinct ids each.
- Every statement line must belong to this statement and every book line must be a line of the organization book on the money account’s accounting account.
- A line that is already matched cannot be matched again.
- The signed sum of the statement lines must equal the signed sum of the book lines (debit positive, credit negative).
- Lines of a carry-forward restatement are not eligible.
- Creates one match record and links all the given statement lines and book lines to it, marking them as reconciled.
- No journal entry is created; the match only marks lines as explained.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Identifier of the book segment of the URL (the organization's book); see book.
Identifier of the open bank statement the match is made on (27-character KSUID string).
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, bank_statement_id, created_by, created_by_type, 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: statementLines, journalLines, journalLines.account.
Body
Ids are not checked for existence here: the service answers the same error for any line outside the statement or its bank account, so nothing tells whether an id exists elsewhere.
Identifiers of the statement lines to match (27-character KSUID strings), 1 to 1000, no duplicates. They must belong to this statement and be unmatched.
1 - 1000 elementsIdentifiers of the book (journal) lines on the money account's accounting account to match (27-character KSUID strings), 1 to 1000, no duplicates. They must be unmatched. Their signed sum must equal that of the statement lines.
1 - 1000 elementsResponse
Resource (only with response=resource).
Identifier of the match (27-character KSUID string).
Statement the match belongs to (27-character KSUID string).
Identifier of the member profile or agent account who made the match, or null for no recorded actor.
Type of the actor who made the match.
Date and time the record was created (ISO 8601, UTC).
Statement lines linked by the match. Only returned when requested with ?include=statementLines.
Book (journal) lines linked by the match. Only returned when requested with ?include=journalLines, and only to callers with the permission journal_entries.retrieve.