Skip to main content
POST
/
v0
/
bulk
/
journal-entries
Create multiple Journal Entries
curl --request POST \
  --url https://api.sandbox.teal.dev/v0/bulk/journal-entries \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'teal-instance-id: <teal-instance-id>' \
  --data '
[
  {
    "datetime": "2023-11-07T05:31:56Z",
    "description": "<string>",
    "line_entries": [
      {
        "amount": "31282.27999999999883584678173065185546875",
        "ledger_id": "<string>",
        "description": "Payroll#230215",
        "tag_ids": [
          "<string>"
        ],
        "sort_order": 1
      }
    ]
  }
]
'
import requests

url = "https://api.sandbox.teal.dev/v0/bulk/journal-entries"

payload = [
{
"datetime": "2023-11-07T05:31:56Z",
"description": "<string>",
"line_entries": [
{
"amount": "31282.27999999999883584678173065185546875",
"ledger_id": "<string>",
"description": "Payroll#230215",
"tag_ids": ["<string>"],
"sort_order": 1
}
]
}
]
headers = {
"teal-instance-id": "<teal-instance-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {
'teal-instance-id': '<teal-instance-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify([
{
datetime: '2023-11-07T05:31:56Z',
description: '<string>',
line_entries: [
{
amount: '31282.27999999999883584678173065185546875',
ledger_id: '<string>',
description: 'Payroll#230215',
tag_ids: ['<string>'],
sort_order: 1
}
]
}
])
};

fetch('https://api.sandbox.teal.dev/v0/bulk/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.sandbox.teal.dev/v0/bulk/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([
[
'datetime' => '2023-11-07T05:31:56Z',
'description' => '<string>',
'line_entries' => [
[
'amount' => '31282.27999999999883584678173065185546875',
'ledger_id' => '<string>',
'description' => 'Payroll#230215',
'tag_ids' => [
'<string>'
],
'sort_order' => 1
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"teal-instance-id: <teal-instance-id>"
],
]);

$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.sandbox.teal.dev/v0/bulk/journal-entries"

payload := strings.NewReader("[\n {\n \"datetime\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"line_entries\": [\n {\n \"amount\": \"31282.27999999999883584678173065185546875\",\n \"ledger_id\": \"<string>\",\n \"description\": \"Payroll#230215\",\n \"tag_ids\": [\n \"<string>\"\n ],\n \"sort_order\": 1\n }\n ]\n }\n]")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("teal-instance-id", "<teal-instance-id>")
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.sandbox.teal.dev/v0/bulk/journal-entries")
.header("teal-instance-id", "<teal-instance-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("[\n {\n \"datetime\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"line_entries\": [\n {\n \"amount\": \"31282.27999999999883584678173065185546875\",\n \"ledger_id\": \"<string>\",\n \"description\": \"Payroll#230215\",\n \"tag_ids\": [\n \"<string>\"\n ],\n \"sort_order\": 1\n }\n ]\n }\n]")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.sandbox.teal.dev/v0/bulk/journal-entries")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["teal-instance-id"] = '<teal-instance-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "[\n {\n \"datetime\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"line_entries\": [\n {\n \"amount\": \"31282.27999999999883584678173065185546875\",\n \"ledger_id\": \"<string>\",\n \"description\": \"Payroll#230215\",\n \"tag_ids\": [\n \"<string>\"\n ],\n \"sort_order\": 1\n }\n ]\n }\n]"

response = http.request(request)
puts response.read_body
[
  {
    "id": "<string>",
    "description": "<string>",
    "datetime": "2023-11-07T05:31:56Z",
    "creation_date": "2023-11-07T05:31:56Z",
    "is_opening_balance": true,
    "line_entry_ids": [
      "XMDsKVuW4Wmi3LTW31Qw6E",
      "NULcvXTkLczde32qs1rqgB"
    ],
    "linked_entity": null,
    "line_entries": [
      {
        "amount": 31282.28,
        "categorization_status": "completed",
        "datetime": "2023-02-15T06:42:18Z",
        "debit_credit": "debit",
        "description": "Payroll#230215",
        "editable": false,
        "id": "XMDsKVuW4Wmi3LTW31Qw6E",
        "journal_entry_description": "Payroll#230215",
        "journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
        "ledger_id": "7JRNsKwy2Lw66caxVU7WGC",
        "ledger_name": "Pluto Checking 4242",
        "sort_order": 1,
        "tags": [],
        "transaction_id": "txn_UjL3BQnEaJtecuC7CUeDk"
      },
      {
        "amount": 31282.28,
        "categorization_status": "completed",
        "datetime": "2023-02-15T06:42:18Z",
        "debit_credit": "credit",
        "description": "Payroll#230215",
        "editable": false,
        "id": "NULcvXTkLczde32qs1rqgB",
        "journal_entry_description": "Payroll#230215",
        "journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
        "ledger_id": "HLn8oy2eqMUCwjp1Cwdgco",
        "ledger_name": "Payroll Expense",
        "sort_order": 2,
        "tags": []
      }
    ],
    "accrual_source": {
      "id": "<string>",
      "instance_id": "<string>",
      "reference_number": "<string>",
      "effective_date": "2023-12-25",
      "gross_amount": 123,
      "amount_paid": 123,
      "amount_adjusted": 123,
      "amount_outstanding": 123,
      "external_id": "<string>",
      "external_party_id": "<string>",
      "due_date": "2023-12-25",
      "notes": "<string>",
      "service_period_start": "2023-12-25",
      "service_period_end": "2023-12-25",
      "lines": [
        {
          "id": "<string>",
          "accrual_source_id": "<string>",
          "account_id": "<string>",
          "line_number": 123,
          "description": "<string>",
          "amount": 123,
          "external_id": "<string>"
        }
      ],
      "journal_entry_ids": [],
      "files": [
        {
          "id": "<string>",
          "file_name": "<string>"
        }
      ],
      "payment_applications": [
        {
          "payment_application_id": "<string>",
          "matched_amount": 123,
          "line_entry": {
            "line_entry_id": "<string>",
            "line_entry_description": "<string>",
            "line_entry_amount": 123,
            "journal_entry_id": "<string>",
            "journal_entry_description": "<string>"
          },
          "adjustments": [
            {
              "accrual_adjustment_id": "<string>",
              "debit_account_id": "<string>",
              "credit_account_id": "<string>",
              "amount": 123
            }
          ]
        }
      ]
    },
    "transfer": {
      "id": "<string>",
      "from_entry": {
        "journal_entry_id": "<string>",
        "description": "<string>",
        "datetime": "2023-11-07T05:31:56Z",
        "line_entries": [
          {
            "amount": 123,
            "ledger_id": "<string>",
            "id": "XMDsKVuW4Wmi3LTW31Qw6E",
            "datetime": "2023-11-07T05:31:56Z",
            "editable": true,
            "journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
            "journal_entry_description": "<string>",
            "ledger_name": "<string>",
            "description": "Payroll#230215",
            "related_line_entry_id": "<string>",
            "transaction_id": "<string>",
            "sort_order": 1,
            "journal_entry": null,
            "ledger": null,
            "opposing_ledger_ids": [
              "<string>"
            ],
            "tags": [
              {
                "id": "<string>",
                "name": "<string>",
                "tag_group_id": "<string>"
              }
            ],
            "transaction": null,
            "payment_applications": [
              {
                "payment_application_id": "<string>",
                "matched_amount": 123,
                "accrual_source": {
                  "accrual_source_id": "<string>",
                  "external_id": "<string>",
                  "external_party_id": "<string>",
                  "reference_number": "<string>",
                  "effective_date": "2023-12-25",
                  "gross_amount": 123
                },
                "adjustments": [
                  {
                    "accrual_adjustment_id": "<string>",
                    "debit_account_id": "<string>",
                    "credit_account_id": "<string>",
                    "amount": 123
                  }
                ]
              }
            ],
            "accrual_source": {
              "id": "<string>",
              "instance_id": "<string>",
              "reference_number": "<string>",
              "effective_date": "2023-12-25",
              "gross_amount": 123,
              "amount_paid": 123,
              "amount_adjusted": 123,
              "amount_outstanding": 123,
              "external_id": "<string>",
              "external_party_id": "<string>",
              "due_date": "2023-12-25",
              "notes": "<string>",
              "service_period_start": "2023-12-25",
              "service_period_end": "2023-12-25",
              "lines": [
                {
                  "id": "<string>",
                  "accrual_source_id": "<string>",
                  "account_id": "<string>",
                  "line_number": 123,
                  "description": "<string>",
                  "amount": 123,
                  "external_id": "<string>"
                }
              ]
            }
          }
        ]
      },
      "to_entry": {
        "journal_entry_id": "<string>",
        "description": "<string>",
        "datetime": "2023-11-07T05:31:56Z",
        "line_entries": [
          {
            "amount": 123,
            "ledger_id": "<string>",
            "id": "XMDsKVuW4Wmi3LTW31Qw6E",
            "datetime": "2023-11-07T05:31:56Z",
            "editable": true,
            "journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
            "journal_entry_description": "<string>",
            "ledger_name": "<string>",
            "description": "Payroll#230215",
            "related_line_entry_id": "<string>",
            "transaction_id": "<string>",
            "sort_order": 1,
            "journal_entry": null,
            "ledger": null,
            "opposing_ledger_ids": [
              "<string>"
            ],
            "tags": [
              {
                "id": "<string>",
                "name": "<string>",
                "tag_group_id": "<string>"
              }
            ],
            "transaction": null,
            "payment_applications": [
              {
                "payment_application_id": "<string>",
                "matched_amount": 123,
                "accrual_source": {
                  "accrual_source_id": "<string>",
                  "external_id": "<string>",
                  "external_party_id": "<string>",
                  "reference_number": "<string>",
                  "effective_date": "2023-12-25",
                  "gross_amount": 123
                },
                "adjustments": [
                  {
                    "accrual_adjustment_id": "<string>",
                    "debit_account_id": "<string>",
                    "credit_account_id": "<string>",
                    "amount": 123
                  }
                ]
              }
            ],
            "accrual_source": {
              "id": "<string>",
              "instance_id": "<string>",
              "reference_number": "<string>",
              "effective_date": "2023-12-25",
              "gross_amount": 123,
              "amount_paid": 123,
              "amount_adjusted": 123,
              "amount_outstanding": 123,
              "external_id": "<string>",
              "external_party_id": "<string>",
              "due_date": "2023-12-25",
              "notes": "<string>",
              "service_period_start": "2023-12-25",
              "service_period_end": "2023-12-25",
              "lines": [
                {
                  "id": "<string>",
                  "accrual_source_id": "<string>",
                  "account_id": "<string>",
                  "line_number": 123,
                  "description": "<string>",
                  "amount": 123,
                  "external_id": "<string>"
                }
              ]
            }
          }
        ]
      }
    }
  }
]
{
"message": "<string>",
"data": "<unknown>",
"display_message": "<string>"
}
{
"message": "<string>",
"data": "<unknown>",
"display_message": "<string>"
}
{
"message": "<string>",
"data": "<unknown>",
"display_message": "<string>"
}
{
"message": "<string>",
"data": "<unknown>",
"display_message": "<string>"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer , where is your auth token.

Headers

teal-instance-id
string
required

The Teal instance ID

modified-by
string | null

An optional identifier for audit logging.

Query Parameters

expand
enum<string>[] | null

Comma-separated list of expandable paths.

Available options:
accrual_source,
line_entries,
line_entries.transaction,
line_entries.ledger,
line_entries.opposing_ledger_ids,
line_entries.payment_applications,
transfer

Body

application/json
datetime
string<date-time>
required

The datetime the Journal Entry was created in UTC time.

Example:

"2023-02-15T06:42:18Z"

description
string
required

An arbitrary string on the object, useful for displaying to the user.

Maximum string length: 512
Example:

"Payroll#230215"

line_entries
LineEntryWithTags · object[]
required

The Line Entry objects to be associated with the Journal Entry. Must include at least two Line Entries, one debit and one credit, and the sum of the amounts of all debit entries must equal the sum of the amounts of the credit entries.

Example:
[
{
"amount": "31282.27999999999883584678173065185546875",
"debit_credit": "credit",
"ledger_id": "7JRNsKwy2Lw66caxVU7WGC"
},
{
"amount": "31282.27999999999883584678173065185546875",
"debit_credit": "debit",
"ledger_id": "HLn8oy2eqMUCwjp1Cwdgco"
}
]

Response

Successful Response

id
string
required

The unique ID of the object.

Example:

"C4ocnUQze8kDwQ3EczkZXn"

description
string
required

An arbitrary string on the object, useful for displaying to the user.

Maximum string length: 512
Example:

"Payroll#230215"

datetime
string<date-time>
required

The datetime the Journal Entry was created in UTC time.

Example:

"2023-02-15T06:42:18Z"

creation_date
string<date-time>
required

The timestamp when this journal entry record was created in the database.

Example:

"2023-02-15T06:42:18Z"

is_opening_balance
boolean
required

Whether the Journal Entry represents an opening balance.

Example:

false

creation_source
enum<string>
required

The source of the journal entry creation: 'manual' if created manually by the user, 'transaction' if auto-generated from transaction categorization (e.g., Plaid sync), or 'legacy' if auto-generated from the old AR/AP system.

Available options:
manual,
transaction,
accrual,
payment_application,
legacy,
scheduled_accrual
categorization_status
enum<string>
required

Whether the journal entry is still awaiting an auto-categorization result: 'pending' (awaiting), 'delayed' (timed out, a late result may still resolve it), or 'completed' (resolved, or not auto-categorized).

Available options:
pending,
delayed,
completed
line_entry_ids
string[] | null

The ids of the Line Entries detailing the Journal Entry's movement of value.

Example:
[
"XMDsKVuW4Wmi3LTW31Qw6E",
"NULcvXTkLczde32qs1rqgB"
]
linked_entity
null

Deprecated - always null

line_entries
ExpandableDetailedLineEntry · object[] | null

List of Line Entries. platformGL instances only. Included in expanded responses.

Example:
[
{
"amount": 31282.28,
"categorization_status": "completed",
"datetime": "2023-02-15T06:42:18Z",
"debit_credit": "debit",
"description": "Payroll#230215",
"editable": false,
"id": "XMDsKVuW4Wmi3LTW31Qw6E",
"journal_entry_description": "Payroll#230215",
"journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
"ledger_id": "7JRNsKwy2Lw66caxVU7WGC",
"ledger_name": "Pluto Checking 4242",
"sort_order": 1,
"tags": [],
"transaction_id": "txn_UjL3BQnEaJtecuC7CUeDk"
},
{
"amount": 31282.28,
"categorization_status": "completed",
"datetime": "2023-02-15T06:42:18Z",
"debit_credit": "credit",
"description": "Payroll#230215",
"editable": false,
"id": "NULcvXTkLczde32qs1rqgB",
"journal_entry_description": "Payroll#230215",
"journal_entry_id": "C4ocnUQze8kDwQ3EczkZXn",
"ledger_id": "HLn8oy2eqMUCwjp1Cwdgco",
"ledger_name": "Payroll Expense",
"sort_order": 2,
"tags": []
}
]
accrual_source
AccrualSourceDetails · object | null

The accrual source associated with this journal entry, if any. Included in expanded responses.

transfer
Transfer · object | null

The transfer linking this journal entry to the journal entry on the other side of the transfer, if any. Included in expanded responses.