Skip to content

BankConv API documentation

The BankConv REST API converts bank statement PDFs into structured data. Send a PDF with your team API key, poll until the conversion completes, then download the transactions as JSON or CSV.

Base URL: https://bankconv.com/api/v1

Authentication

Every request needs a team API key, sent as a Bearer token:

Authorization: Bearer sk_live_your_api_key

API keys belong to a team. Create them in the BankConv app under your team settings. The full key is shown once, when you create it, so store it somewhere safe. API conversions use your team’s page allowance; see billing.

Quick start

1. Upload a statement

curl -X POST https://bankconv.com/api/v1/conversions \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -F "file=@statement.pdf"

The API answers 201 Created with the new conversion:

{
  "data": {
    "id": "9a8b7c6d-…",
    "status": "processing",
    "pages_count": 3,
    "created_at": "2026-10-11T12:00:00Z",
    "input": {
      "filename": "statement.pdf",
      "pages_count": 3
    }
  }
}

2. Poll the status

curl https://bankconv.com/api/v1/conversions/9a8b7c6d-… \
  -H "Authorization: Bearer sk_live_your_api_key"

Repeat every few seconds until status is completed or failed.

3. Download the results

# JSON (default)
curl https://bankconv.com/api/v1/conversions/9a8b7c6d-…/download \
  -H "Authorization: Bearer sk_live_your_api_key"

# CSV, with matching tables merged into one transaction list
curl "https://bankconv.com/api/v1/conversions/9a8b7c6d-…/download?format=csv&view=merged" \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -o statement.csv

Endpoints

All paths are relative to https://bankconv.com/api/v1.

MethodPathWhat it does
POST/conversionsUpload a PDF and start a conversion
GET/conversionsList your team’s conversions (paginated)
GET/conversions/{id}Get a conversion’s status
GET/conversions/{id}/downloadDownload results as JSON or CSV
DELETE/conversions/{id}Delete a conversion
GET/creditsCheck your page balance
GET/credits/usagePages used in the current period

Create a conversion

POST /conversions takes a multipart/form-data body.

FieldTypeRequiredDescription
filefileYesThe statement PDF, up to 30 MB
passwordstringNoPassword for a protected PDF. It is used to open the file and not stored.

For a password-protected statement, send the password with the file:

curl -X POST https://bankconv.com/api/v1/conversions \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -F "file=@protected-statement.pdf" \
  -F "password=the_pdf_password"

If you are not sure what the password is, the bank pages list the formats banks use where we could confirm them.

List conversions

GET /conversions returns your team’s conversions, newest first.

ParameterDefaultDescription
page1Page number
per_page15Results per page, up to 100
statusnoneFilter by pending, processing, completed or failed
sort-created_atSort field; a leading - sorts descending

Download results

GET /conversions/{id}/download works once the conversion is completed.

ParameterDefaultDescription
formatjsonjson or csv
viewrawFor CSV: raw keeps each table as extracted, page by page; merged joins tables with the same columns into one list

The JSON response contains every extracted page with its blocks (tables and text), so you can map columns yourself.

Credits and usage

GET /credits returns your page balance for the current billing period:

{
  "data": {
    "total": 1000,
    "remaining": 842,
    "bonus": 50,
    "bonusRemaining": 50
  }
}

GET /credits/usage returns the pages used since the start of the period:

{
  "data": {
    "period_start": "2026-09-11",
    "period_end": "2026-10-11",
    "pages_used": 158
  }
}

Responses and errors

Successful responses wrap the result in a data key. Lists add pagination details:

{
  "data": [ … ],
  "links": { … },
  "meta": {
    "current_page": 1,
    "last_page": 5,
    "per_page": 15,
    "total": 72
  }
}

Errors share one shape:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits. You have 2 remaining but need 5.",
    "status": 422
  }
}
CodeStatusMeaning
unauthenticated401Missing or invalid API key
not_found404The conversion does not exist or belongs to another team
gone410The conversion was deleted under your retention policy
validation_error422Invalid parameters, such as a missing file or a wrong password
insufficient_credits422Not enough pages left for the whole document
not_ready422The conversion is still processing
rate_limited429Too many requests; wait for the number of seconds in Retry-After

Rate limits

Each API key can make 60 requests per minute. Responses carry X-RateLimit-Limit and X-RateLimit-Remaining headers, and a 429 response includes Retry-After with the seconds to wait.

Billing

Each page of a converted PDF uses one page of your plan’s monthly allowance. A conversion needs enough pages left for the whole document; partial conversions are not made, and the request returns insufficient_credits instead.

PlanPages per monthPrice
Starter500$29/month, or $19/month billed yearly
Professional1,000$49/month, or $29/month billed yearly
Business5,000$79/month, or $49/month billed yearly

Compare plans on the pricing page.

Data retention

Conversions are deleted automatically under your team’s retention policy: 24, 48 or 72 hours, 24 by default. After that, download requests return 410 Gone. Download what you need before then, or delete a conversion yourself with DELETE /conversions/{id}. See security and data handling.