COUNTCOUNT
Sign Up
Journal EntriesBulk create journal entries

Bulk create journal entries

POST/partners/journal-entries/bulk

Creates up to 100 journal entry postings in one request with partial-success semantics.

Body: `{ journalEntries: [<posting>, ...] }` where each posting uses the same shape as create journal entry. Each posting runs in its own transaction. HTTP 201 is returned when the batch is accepted, even if all postings fail — read `errorCount` and per-row `results`.

HMAC signature + Bearer access token
Try this request

Request body

journalEntriesarrayrequired

Array of journal entry create payloads (same fields as POST /partners/journal-entries). Maximum 100 per request.

Responses

201Batch accepted. Check successCount and per-row results.
400Batch-level validation failed (empty array, over 100 postings, etc.).
401Missing or invalid HMAC signature, expired timestamp, or invalid Bearer token. Troubleshoot
403The credential does not have access to this workspace or resource. Troubleshoot
429Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. Troubleshoot
POSThttps://api.getcount.com/partners/journal-entries/bulk
Request
import crypto from 'node:crypto';

const BASE_URL = 'https://api.getcount.com';
const CLIENT_ID = process.env.COUNT_CLIENT_ID;
const CLIENT_SECRET = process.env.COUNT_CLIENT_SECRET;
const ACCESS_TOKEN = process.env.COUNT_ACCESS_TOKEN;

const method = 'POST';
const signingPath = '/journal-entries/bulk';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
  "journalEntries": [
    {
      "descriptionEntry": "Accrue March rent",
      "date": "2026-03-01",
      "refNumber": "JE-2026-003",
      "lines": [
        {
          "accountUuid": "c8d9e0f1-a2b3-4567-cdef-789012345678",
          "amountDebit": "2500.00",
          "descriptionLine": "Rent expense"
        },
        {
          "accountUuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
          "amountCredit": "2500.00",
          "descriptionLine": "Accrued rent payable"
        }
      ]
    }
  ]
};
const bodyString = JSON.stringify(body);

const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
const baseString = `${method}:${signingPath}:${timestamp}:${bodyHash}`;
const signature = crypto.createHmac('sha256', CLIENT_SECRET).update(baseString).digest('hex');

const response = await fetch(`${BASE_URL}/partners/journal-entries/bulk`, {
  method,
  headers: {
    'x-client-id': CLIENT_ID,
    'x-timestamp': timestamp,
    'x-signature': signature,
    'Content-Type': 'application/json',
    Authorization: `Bearer ${ACCESS_TOKEN}`,
  },
  body: bodyString,
});

console.log(await response.json());
Response · 201
{
  "successCount": 1,
  "errorCount": 0,
  "results": [
    {
      "index": 0,
      "success": true,
      "journalEntry": [
        {
          "id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
          "descriptionEntry": "Accrue March rent",
          "descriptionLine": "Rent expense",
          "date": "2026-03-01",
          "refNumber": "JE-2026-003",
          "amountDebit": "2500.00",
          "amountCredit": null,
          "accountUuid": "c8d9e0f1-a2b3-4567-cdef-789012345678",
          "account": {
            "id": "c8d9e0f1-a2b3-4567-cdef-789012345678",
            "name": "Rent Expense",
            "type": "Expenses"
          },
          "journalLinkUuid": "a9b8c7d6-e5f4-3210-abcd-ef9876543210",
          "createdAt": "2026-01-15T10:30:00.000Z",
          "updatedAt": "2026-01-28T14:22:30.000Z"
        }
      ]
    }
  ]
}