/transactions
Create a transaction. The transaction type requires its matching type-specific write scope. Setting payment also requires transactions:mark-paid. Journal entries post inline per line; creation into a books-closed month or a statement-locked listing period is rejected. The transaction uniqueRef and every line uniqueRef must be unique; duplicate line references are rejected before anything is inserted. A replacement payout without uniqueRef receives a new PAY-YYYYMM-XXXXX reference. Line party defaults and validity depend on transaction type, owner context, account assignment, and account category. See https://docs.vrplatform.app/guides/build/transactions#decision-table. For expense attachments, create an upload with POST /transactions/attachments, PUT the raw file to uploadUrl, then pass the returned attachmentId in attachmentIds. Attachments are only supported for expense transactions.
Required scope: transactions:read
Authorization
apiKey API key provided in dashboard
In: header
Query Parameters
Validate this request through the real write path, then roll back all changes. See https://docs.vrplatform.app/api/dry-run-mode.
Request Body
application/json
Required for every transaction except transfers
Root bank account; the source account for transfers
Transaction contact; required for non-opening-balance expenses
Public transaction type. Transfers are internal bank-to-bank movements; payouts represent owner or manager distributions.
"deposit" | "expense" | "transfer" | "payout"Expense attachment IDs returned as attachmentId by POST /transactions/attachments after PUT to uploadUrl succeeds. Only expense transactions support attachments. Omit to leave existing attachments unchanged on update; send an array to replace the attached set.
Expense payment and reconciliation state
Integration connection belonging to the selected team
Expense or payout replaced by this transaction. The source must be archived, except that an active payout can be replaced up to its recorded return compensation.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://api.vrplatform.app/transactions" \ -H "Content-Type: application/json" \ -d '{ "type": "deposit", "date": "string", "lines": [ { "description": "string", "amount": -9007199254740991 } ] }'{
"description": "string",
"status": "active",
"uniqueRef": "string",
"isOpeningBalance": true,
"type": "deposit",
"date": "string",
"lines": [
{
"uniqueRef": "string",
"description": "string",
"assignment": "accountsPayable",
"amount": -9007199254740991,
"ownerStatementId": "eccddabd-554b-48ab-a66d-28a57ff66fa9",
"matchReservationConfirmationCode": "string",
"matchReservationStripeGuestRef": "string",
"matchReservationProcessorBookingRef": "string",
"matchLineTypeClassification": "string",
"id": "string",
"issues": [
{
"code": "unassignedAccount",
"severity": "error",
"context": {
"lineType": "string"
}
}
],
"recurringTemplate": {
"id": "string"
},
"total": 0,
"listing": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"uniqueRef": "string",
"shortRef": "string"
},
"reservation": {
"id": "string",
"shortRef": "string",
"confirmationCode": "string",
"uniqueRef": "string",
"status": "booked",
"checkIn": "string",
"checkOut": "string"
},
"account": {
"id": "string",
"name": "string",
"uniqueRef": "string",
"status": "active"
},
"party": "owners",
"contact": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"firstName": "string",
"uniqueRef": "string",
"shortRef": "string",
"email": "user@example.com",
"type": "owner"
},
"matchStatus": "string",
"appliedAmount": {
"taxRate": {
"id": "string",
"name": "string",
"basisPoints": 100000
}
},
"markup": {
"amount": -9007199254740991,
"taxBehavior": "excluded",
"taxRate": {
"id": "string",
"name": "string",
"basisPoints": 100000
}
},
"lock": {
"status": "locked",
"booksClosed": {
"date": "string"
},
"ownerStatement": {
"ids": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"reconciled": {
"bankRecordIds": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"statementPeriod": {
"hits": [
{
"listingId": "8c73d933-f7ed-437e-9da1-caac95adc1ae",
"txnAt": "string",
"openFrom": "string"
}
]
}
}
}
],
"attachmentIds": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"recurringTemplateId": "d73afa31-bf14-4baf-aede-be5f4b4ff489",
"recreatedFromTransactionId": "000264af-6c3a-4ff1-8534-ade50aa8d7fb",
"matchBankAccountLast4": "string",
"id": "string",
"shortRef": "string",
"lock": {
"status": "locked",
"booksClosed": {
"date": "string"
},
"ownerStatement": {
"ids": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"reconciled": {
"bankRecordIds": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"statementPeriod": {
"hits": [
{
"listingId": "8c73d933-f7ed-437e-9da1-caac95adc1ae",
"txnAt": "string",
"openFrom": "string"
}
]
}
},
"issues": [
{
"code": "line_unassignedAccount",
"severity": "error",
"context": {}
}
],
"currency": "string",
"amount": -9007199254740991,
"recurringTemplate": {
"id": "string"
},
"attachments": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"transactionId": "75906707-8c31-479c-b354-aa805c4cefbc",
"createdAt": "2024-01-15T12:30:00.000+00:00",
"filename": "string",
"extension": "string",
"contentType": "string",
"byteSize": -9007199254740991,
"isOwnerAccessible": true
}
],
"account": {
"id": "string",
"name": "string",
"uniqueRef": "string",
"status": "active"
},
"payment": {
"bankRecordIds": [
"string"
],
"status": "unpaid",
"lock": {
"status": "locked",
"booksClosed": {
"date": "string"
},
"ownerStatement": {
"ids": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"reconciled": {
"bankRecordIds": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
},
"statementPeriod": {
"hits": [
{
"listingId": "8c73d933-f7ed-437e-9da1-caac95adc1ae",
"txnAt": "string",
"openFrom": "string"
}
]
}
},
"date": "string"
},
"connection": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"status": "active",
"uniqueRef": "string",
"appId": "string"
},
"contact": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"firstName": "string",
"uniqueRef": "string",
"shortRef": "string",
"email": "user@example.com",
"type": "owner"
},
"source": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"type": "string",
"status": "active",
"appId": "string",
"appIcon": "string"
},
"matchStatus": "string",
"matchedByBankRule": true,
"returnedFromTransactionId": "edd2bee8-c5f7-4ff5-ae8f-fd9c96d50204",
"returnEffectiveAt": "2024-01-15T12:30:00.000+00:00",
"returnSummary": {
"status": "none",
"returnedAmount": -9007199254740991,
"remainingReturnableAmount": -9007199254740991,
"compensationTransactionIds": [
"497f6eca-6276-4993-bfeb-53cbbbba6f08"
],
"replacementTransactionId": "a44b4466-2c16-4884-a7c2-efd209c901e2"
}
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "MISDIRECTED_REQUEST",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": {
"teamId": "a4ede8ba-7c0a-4485-8763-cbd9b282fbec",
"dataRegion": "ap",
"apiBaseUrl": "http://example.com"
}
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "LOCKED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}{
"code": "AUDIT_CURSOR_EXPIRED",
"message": "string",
"links": {
"docs": "string",
"schema": "string"
},
"issues": [
{
"message": "string",
"path": [
"string"
],
"schema": "string"
}
],
"retryable": true,
"context": null
}