Campfire Bank Reconciliation API
The Bank Reconciliation API from Campfire — 6 operation(s) for bank reconciliation.
The Bank Reconciliation API from Campfire — 6 operation(s) for bank reconciliation.
openapi: 3.0.3
info:
title: Campfire Developer APIs Accounts Payable Bank Reconciliation API
version: 1.0.0
description: '## Introduction
Campfire''s developer APIs offer granular access to Campfire''s core accounting,
revenue recognition, and financial data features.
These APIs are designed to be used by developers to build custom integrations,
automate workflows, and perform any other programmatic operations.
'
servers:
- url: https://api.meetcampfire.com
description: Production server
tags:
- name: Bank Reconciliation
paths:
/coa/api/v2/reconciliation:
get:
operationId: coa_api_v2_reconciliation_list
description: Retrieve a paginated list of bank reconciliation reports. Supports filtering by start_date, end_date, entity, account, and search query (q). Default sort is by statement_ending_date descending.
summary: List Bank Reconciliation Reports
parameters:
- in: query
name: account
schema:
type: integer
description: Filter by account ID
- in: query
name: end_date
schema:
type: string
description: Filter by maximum statement ending date (YYYY-MM-DD)
- in: query
name: entity
schema:
type: integer
description: Filter by entity ID
- name: limit
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- name: offset
required: false
in: query
description: The initial index from which to return the results.
schema:
type: integer
- in: query
name: q
schema:
type: string
description: Search term for account name, number, or reconciled_by name
- in: query
name: sort
schema:
type: string
description: Sort field (prefix with - for descending)
- in: query
name: start_date
schema:
type: string
description: Filter by minimum statement ending date (YYYY-MM-DD)
tags:
- Bank Reconciliation
security:
- knoxApiToken: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedReconciliationReportV2ListList'
description: ''
post:
operationId: coa_api_v2_reconciliation_create
description: Create a new bank reconciliation report for a specific account and date range. Cannot create overlapping date ranges for the same account and entity.
summary: Create Bank Reconciliation Report
tags:
- Bank Reconciliation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
multipart/form-data:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
required: true
security:
- knoxApiToken: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
description: ''
/coa/api/v2/reconciliation/{id}:
get:
operationId: coa_api_v2_reconciliation_retrieve
description: Retrieve a specific bank reconciliation report by ID. Includes report metadata, status, async task status for PDF processing, and attached files/CSV statements.
summary: Get Bank Reconciliation Report
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
security:
- knoxApiToken: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
description: ''
put:
operationId: coa_api_v2_reconciliation_update
description: Update a bank reconciliation report. Supports partial updates via PATCH.
summary: Update Bank Reconciliation Report
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
multipart/form-data:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
required: true
security:
- knoxApiToken: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
description: ''
patch:
operationId: coa_api_v2_reconciliation_partial_update
description: Partially update a bank reconciliation report. Only provided fields are modified.
summary: Partial Update Bank Reconciliation Report
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedReconciliationReportV2'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedReconciliationReportV2'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedReconciliationReportV2'
security:
- knoxApiToken: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ReconciliationReportV2'
description: ''
delete:
operationId: coa_api_v2_reconciliation_destroy
description: Delete a bank reconciliation report and all associated data.
summary: Delete Bank Reconciliation Report
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
security:
- knoxApiToken: []
responses:
'204':
description: No response body
/coa/api/v2/reconciliation/{id}/bulk-match-transactions:
post:
operationId: coa_api_v2_reconciliation_bulk_match_transactions_create
description: Match multiple GL transactions to statement transactions in a single request. Pairs are validated atomically — all succeed or none are created.
summary: Bulk Match GL Transactions to Statement Transactions
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkMatchTransactionRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/BulkMatchTransactionRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/BulkMatchTransactionRequest'
required: true
security:
- knoxApiToken: []
responses:
'201':
description: All pairs matched successfully
'400':
description: Validation error (duplicates, already reconciled, non-draft report)
'404':
description: Report, GL transaction, or statement transaction not found
/coa/api/v2/reconciliation/{id}/source-transactions:
get:
operationId: coa_api_v2_reconciliation_source_transactions_list
description: List source (GL) transactions available for reconciliation. Supports filtering by date range, bank, vendor, department, tag, currency, and reconciliation status.
summary: List GL Transactions for Reconciliation
parameters:
- in: query
name: bank
schema:
type: integer
description: Filter by bank account ID
- in: query
name: currency
schema:
type: string
description: Filter by currency code (e.g., USD, EUR)
- in: query
name: department
schema:
type: integer
description: Filter by department ID
- in: query
name: end_date
schema:
type: string
description: Filter by maximum posted date (YYYY-MM-DD)
- in: query
name: group
schema:
type: integer
description: Filter by tag group ID
- in: path
name: id
schema:
type: integer
required: true
- name: limit
required: false
in: query
description: Number of results to return per page.
schema:
type: integer
- in: query
name: matched
schema:
type: string
description: Set to 'true' to show only transactions with an explicit statement match, or 'false' to show transactions without an explicit statement match
- name: offset
required: false
in: query
description: The initial index from which to return the results.
schema:
type: integer
- in: query
name: q
schema:
type: string
description: Search term for bank description, journal memo, journal order, or amount
- in: query
name: reconciled_only
schema:
type: string
description: Set to 'true' to show only reconciled transactions for this report
- in: query
name: sort
schema:
type: string
description: 'Sort field(s), comma-separated (prefix with - for descending). Default: posted_at'
- in: query
name: start_date
schema:
type: string
description: Filter by minimum posted date (YYYY-MM-DD)
- in: query
name: tag
schema:
type: integer
description: Filter by tag ID
- in: query
name: unreconciled
schema:
type: string
description: Set to 'true' to show only unreconciled transactions
- in: query
name: vendor
schema:
type: integer
description: Filter by vendor/payee ID
tags:
- Bank Reconciliation
security:
- knoxApiToken: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedReconciliationReportV2SourceTransactionListList'
description: ''
/coa/api/v2/reconciliation/{id}/transactions/confirm:
post:
operationId: coa_api_v2_reconciliation_transactions_confirm_create
description: Confirm the selection of GL transactions for reconciliation. Pass selected transaction IDs in the request body. Selected transactions are marked as RECONCILED; deselected transactions have their status as suggested matches to this reconciliation report cleared.
summary: Confirm Selection of Transactions to Reconcile
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Bank Reconciliation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ConfirmTransactionSelectionRequest'
examples:
ConfirmSelectedTransactions:
value:
selected:
- 1001
- 1002
- 1003
- 1004
- 1005
summary: Confirm selected transactions
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ConfirmTransactionSelectionRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ConfirmTransactionSelectionRequest'
required: true
security:
- knoxApiToken: []
responses:
'204':
description: No response body
'404':
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
description: ''
/coa/api/v2/reconciliation/parse-statement-page:
post:
operationId: parse_bank_statement_page
description: "Parse a bank statement PDF.\n\nAccepts:\n ``file_id`` (required) -- ID of the uploaded PDF ``File``.\n ``pages`` (optional, int) -- How many pages to include in the first parse batch.\n Defaults to ``BATCH_PAGE_SIZE``. Use a small value (e.g. 2) for\n a fast initial response with just balances and dates.\n\nOnly the first batch is parsed in this request. Parsed output is cached under\n``file_id`` and the effective first-batch page count (``pages`` or default\n``BATCH_PAGE_SIZE``) so different ``pages`` values do not share one cache entry."
summary: Parse Bank Statement Page
tags:
- Bank Reconciliation
security:
- knoxApiToken: []
responses:
'200':
description: No response body
components:
schemas:
PatchedReconciliationReportV2:
type: object
properties:
id:
type: integer
readOnly: true
entity_name:
type: string
readOnly: true
account_name:
type: string
readOnly: true
account_number:
type: string
readOnly: true
account_type:
type: string
readOnly: true
account_subtype:
type: string
readOnly: true
reconciled_by_name:
type: string
readOnly: true
reconciled_by_email:
type: string
readOnly: true
approved_by_name:
type: string
readOnly: true
approved_by_email:
type: string
readOnly: true
async_task:
allOf:
- $ref: '#/components/schemas/AsyncTask'
readOnly: true
attachments:
type: array
items:
$ref: '#/components/schemas/File'
readOnly: true
csv_statements:
type: string
readOnly: true
cleared_total_debits:
type: string
readOnly: true
cleared_total_credits:
type: string
readOnly: true
cleared_activity:
type: string
readOnly: true
cleared_item_count:
type: string
readOnly: true
matched_total_debits:
type: string
readOnly: true
matched_total_credits:
type: string
readOnly: true
matched_activity:
type: string
readOnly: true
matched_item_count:
type: string
readOnly: true
unreconciled_total_debits:
type: string
readOnly: true
unreconciled_total_credits:
type: string
readOnly: true
unreconciled_activity:
type: string
readOnly: true
unreconciled_gl_item_count:
type: string
readOnly: true
unreconciled_statement_line_count:
type: string
readOnly: true
unreconciled_statement_activity:
type: string
readOnly: true
reconciliation_difference:
type: string
readOnly: true
open_total_debits:
type: string
readOnly: true
open_total_credits:
type: string
readOnly: true
open_activity:
type: string
readOnly: true
open_gl_item_count:
type: string
readOnly: true
open_statement_line_count:
type: string
readOnly: true
open_statement_activity:
type: string
readOnly: true
statement_activity:
type: string
readOnly: true
open_difference:
type: string
readOnly: true
currency:
type: string
maxLength: 3
statement_starting_date:
type: string
format: date
nullable: true
statement_ending_date:
type: string
format: date
nullable: true
starting_balance:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
ending_balance:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
total_credit_amount:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
total_debit_amount:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
adjustments:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
created_at:
type: string
format: date-time
readOnly: true
last_modified_at:
type: string
format: date-time
readOnly: true
reconciled_on:
type: string
format: date
nullable: true
approved_on:
type: string
format: date-time
readOnly: true
nullable: true
status:
$ref: '#/components/schemas/Status8ecEnum'
unmatched_statement_transactions:
nullable: true
statement_recognition_cost_usd:
type: number
format: double
maximum: 100000000
minimum: -100000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
description: Estimated USD cost of AI bank-statement parsing for this report (from summed page token usage).
statement_recognition_input_tokens:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
description: Sum of input tokens from statement parsing across all pages (set on finalize).
statement_recognition_output_tokens:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
description: Sum of output tokens from statement parsing across all pages (set on finalize).
statement_recognition_token_total:
type: integer
maximum: 9223372036854775807
minimum: 0
format: int64
nullable: true
description: Input plus output tokens for this report (set on finalize).
statement_recognition_model_name:
type: string
nullable: true
description: LLM model used for statement parsing when token totals were recorded.
maxLength: 128
customer:
type: integer
readOnly: true
entity:
type: integer
nullable: true
account:
type: integer
matching_task:
type: integer
nullable: true
reconciled_by:
type: integer
nullable: true
approved_by:
type: integer
readOnly: true
nullable: true
ReconciliationReportV2SourceReconciliationTransactionStatusEnum:
enum:
- DRAFT
- RECONCILED
type: string
description: '* `DRAFT` - Draft
* `RECONCILED` - Reconciled'
ReconciliationReportV2:
type: object
properties:
id:
type: integer
readOnly: true
entity_name:
type: string
readOnly: true
account_name:
type: string
readOnly: true
account_number:
type: string
readOnly: true
account_type:
type: string
readOnly: true
account_subtype:
type: string
readOnly: true
reconciled_by_name:
type: string
readOnly: true
reconciled_by_email:
type: string
readOnly: true
approved_by_name:
type: string
readOnly: true
approved_by_email:
type: string
readOnly: true
async_task:
allOf:
- $ref: '#/components/schemas/AsyncTask'
readOnly: true
attachments:
type: array
items:
$ref: '#/components/schemas/File'
readOnly: true
csv_statements:
type: string
readOnly: true
cleared_total_debits:
type: string
readOnly: true
cleared_total_credits:
type: string
readOnly: true
cleared_activity:
type: string
readOnly: true
cleared_item_count:
type: string
readOnly: true
matched_total_debits:
type: string
readOnly: true
matched_total_credits:
type: string
readOnly: true
matched_activity:
type: string
readOnly: true
matched_item_count:
type: string
readOnly: true
unreconciled_total_debits:
type: string
readOnly: true
unreconciled_total_credits:
type: string
readOnly: true
unreconciled_activity:
type: string
readOnly: true
unreconciled_gl_item_count:
type: string
readOnly: true
unreconciled_statement_line_count:
type: string
readOnly: true
unreconciled_statement_activity:
type: string
readOnly: true
reconciliation_difference:
type: string
readOnly: true
open_total_debits:
type: string
readOnly: true
open_total_credits:
type: string
readOnly: true
open_activity:
type: string
readOnly: true
open_gl_item_count:
type: string
readOnly: true
open_statement_line_count:
type: string
readOnly: true
open_statement_activity:
type: string
readOnly: true
statement_activity:
type: string
readOnly: true
open_difference:
type: string
readOnly: true
currency:
type: string
maxLength: 3
statement_starting_date:
type: string
format: date
nullable: true
statement_ending_date:
type: string
format: date
nullable: true
starting_balance:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
ending_balance:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
total_credit_amount:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
total_debit_amount:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
adjustments:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
created_at:
type: string
format: date-time
readOnly: true
last_modified_at:
type: string
format: date-time
readOnly: true
reconciled_on:
type: string
format: date
nullable: true
approved_on:
type: string
format: date-time
readOnly: true
nullable: true
status:
$ref: '#/components/schemas/Status8ecEnum'
unmatched_statement_transactions:
nullable: true
statement_recognition_cost_usd:
type: number
format: double
maximum: 100000000
minimum: -100000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
description: Estimated USD cost of AI bank-statement parsing for this report (from summed page token usage).
statement_recognition_input_tokens:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
description: Sum of input tokens from statement parsing across all pages (set on finalize).
statement_recognition_output_tokens:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
description: Sum of output tokens from statement parsing across all pages (set on finalize).
statement_recognition_token_total:
type: integer
maximum: 9223372036854775807
minimum: 0
format: int64
nullable: true
description: Input plus output tokens for this report (set on finalize).
statement_recognition_model_name:
type: string
nullable: true
description: LLM model used for statement parsing when token totals were recorded.
maxLength: 128
customer:
type: integer
readOnly: true
entity:
type: integer
nullable: true
account:
type: integer
matching_task:
type: integer
nullable: true
reconciled_by:
type: integer
nullable: true
approved_by:
type: integer
readOnly: true
nullable: true
required:
- account
- account_name
- account_number
- account_subtype
- account_type
- approved_by
- approved_by_email
- approved_by_name
- approved_on
- async_task
- attachments
- cleared_activity
- cleared_item_count
- cleared_total_credits
- cleared_total_debits
- created_at
- csv_statements
- customer
- entity_name
- id
- last_modified_at
- matched_activity
- matched_item_count
- matched_total_credits
- matched_total_debits
- open_activity
- open_difference
- open_gl_item_count
- open_statement_activity
- open_statement_line_count
- open_total_credits
- open_total_debits
- reconciled_by_email
- reconciled_by_name
- reconciliation_difference
- statement_activity
- unreconciled_activity
- unreconciled_gl_item_count
- unreconciled_statement_activity
- unreconciled_statement_line_count
- unreconciled_total_credits
- unreconciled_total_debits
ReconciliationReportV2StatementTransaction:
type: object
properties:
id:
type: integer
readOnly: true
page_number:
type: integer
readOnly: true
reconciliation_transaction_id:
type: string
readOnly: true
source_transaction_id:
type: string
readOnly: true
is_matched:
type: string
readOnly: true
date:
type: string
format: date
deposit:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
withdrawal:
type: number
format: double
maximum: 1000000000000000000
minimum: -1000000000000000000
exclusiveMaximum: true
exclusiveMinimum: true
nullable: true
description:
type: string
nullable: true
is_cleared:
type: boolean
created_at:
type: string
format: date-time
readOnly: true
last_modified_at:
type: string
format: date-time
readOnly: true
customer:
type: integer
readOnly: true
reconciliation_report:
type: integer
readOnly: true
page:
type: integer
readOnly: true
required:
- created_at
- customer
- date
- id
- is_matched
- last_modified_at
- page
- page_number
- reconciliation_report
- reconciliation_transaction_id
- source_transaction_id
File:
type: object
properties:
id:
type: integer
readOnly: true
customer:
type: integer
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
created_by:
type: integer
readOnly: true
nullable: true
created_by_name:
type: string
readOnly: true
created_by_email:
type: string
readOnly: true
last_modified_at:
type: string
format: date-time
readOnly: true
name:
type: string
url:
type: string
readOnly: true
s3_content_type:
type: string
nullable: true
s3_content_length:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
s3_path:
type: string
object_id:
type: integer
maximum: 2147483647
minimum: 0
nullable: true
app:
type: string
readOnly: true
model:
type: string
readOnly: true
is_deleted:
type: boolean
readOnly: true
default: false
deleted_at:
type: string
format: date-time
readOnly: true
nullable: true
required:
- app
- created_at
- created_by
- created_by_email
- created_by_name
- customer
- deleted_at
- id
- is_deleted
- last_modified_at
- model
- name
- s3_path
- url
ReconciliationReportV2SourceReconciliationTransaction:
type: object
properties:
id:
type: integer
readOnly: true
status:
$ref: '#/components/schemas/ReconciliationReportV2SourceReconciliationTransactionStatusEnum'
suggestion_id:
type: integer
nullable: true
readOnly: true
suggestion:
allOf:
- $ref: '#/components/schemas/ReconciliationReportV2StatementTransaction'
readOnly: true
required:
- id
- suggestion
- suggestion_id
ErrorResponse:
type: object
description: Standard error response.
properties:
error:
type: string
description: Error message describing what went wrong
required:
- error
Status8ecEnum:
enum:
- DRAFT
- PENDING_APPROVAL
- APPROVED
- DELETED
type: string
description: '* `DRAFT` - Draft
* `PENDING_APPROVAL` - Pending Approval
* `APPROVED` - Approved
* `DELETED` - Deleted'
ReconciliationReportV2SourceTransact
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/campfire/refs/heads/main/openapi/campfire-bank-reconciliation-api-openapi.yml