REST API Reference

Convert OFX, QFX, QBO and PDF bank statements to JSON, Excel or CSV programmatically.

Overview

The OFXConverter REST API lets you convert bank statement files from your own applications. Send a file and receive the extracted transactions as structured JSON, or as a Base64-encoded Excel or CSV file. The API is available to accounts on a paid plan.

The API requires an active premium plan. Generate your API key from the profile page in your dashboard.

Base URL

All endpoints are relative to the following base URL. All requests must be made over HTTPS.

https://www.ofxconverter.com/api/v1

Authentication

Authenticate every request by sending your API key in the Authorization header. Use the raw key value with no Bearer prefix or scheme.

Authorization: YOUR_API_KEY

A request with a missing key returns NO_API_KEY; an invalid key, or a key that belongs to a non-premium account, returns UNAUTHORISED. Both are sent with HTTP 401.

Rate limits & quotas

Usage is bounded by your plan's monthly conversion quota: Start 500, Pro 1,500, Enterprise 5,000 conversions per month. The maximum file size is 10 MB. Uploaded and generated files are automatically deleted after about 30 minutes.

Plan Monthly conversions Max file size
Start50010 MB
Pro1,50010 MB
Enterprise5,00010 MB

Endpoints

Requests that send a file use multipart/form-data. The optional output field selects the response format: csv or excel return the converted file as a Base64 string, while any other value (or omitting it) returns the extracted transactions as JSON.

post /api/v1/conversion

Convert an OFX, QFX or QBO file in a single request.

Request parameters

NameInTypeRequiredDescription
AuthorizationheaderstringYesYour API key.
fileform-datafileYes.ofx, .qfx or .qbo, up to 10 MB.
outputform-datastringNocsv, excel, or omit for JSON.

Example request

curl -X POST "https://www.ofxconverter.com/api/v1/conversion" \
  -H "Authorization: YOUR_API_KEY" \
  -F "file=@statement.ofx" \
  -F "output=excel"

Example response (excel / csv)

{
  "error": false,
  "message": "SUCCESS",
  "fileID": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "extension": "ofx",
  "filename": "statement.ofx",
  "convertedFile": "UEsDBBQABgAIAAAAIQ...=="
}

Example response (json)

{
  "error": false,
  "message": "SUCCESS",
  "fileID": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "extension": "ofx",
  "filename": "statement.ofx",
  "convertedFile": {
    "header": {
      "status": "OK",
      "language": "ENG",
      "serverDate": "2024-01-31T00:00:00",
      "bankName": "Bank of Example",
      "currency": "USD",
      "hasInvestiment": false
    },
    "bankAccount": {
      "type": "CHECKING",
      "agencyCode": "0001",
      "bank": { "code": 1, "name": "Bank of Example" },
      "accountCode": "1234567"
    },
    "status": "OK",
    "initialDate": "2024-01-01T00:00:00",
    "finalDate": "2024-01-31T00:00:00",
    "transactions": [
      {
        "type": "DEBIT",
        "date": "2024-01-05T00:00:00",
        "value": -42.5,
        "id": "202401050001",
        "uniqueID": "202401050001",
        "description": "Coffee Shop",
        "checksum": 849302145,
        "units": null,
        "price": null,
        "comission": null,
        "secName": null,
        "ticker": null
      }
    ]
  }
}
post /api/v1/upload

Store a file for later conversion. Returns a fileID you can pass to GET /api/v1/download. No conversion is performed at this step.

Request parameters

NameInTypeRequiredDescription
AuthorizationheaderstringYesYour API key.
fileform-datafileYes.ofx, .qfx or .qbo, up to 10 MB.

Example request

curl -X POST "https://www.ofxconverter.com/api/v1/upload" \
  -H "Authorization: YOUR_API_KEY" \
  -F "file=@statement.ofx"

Example response

{
  "error": false,
  "message": "SUCCESS",
  "fileID": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "extension": "ofx",
  "filename": "statement"
}
get /api/v1/download

Convert a file previously stored with POST /api/v1/upload. The file must belong to the authenticated account.

Request parameters

NameInTypeRequiredDescription
AuthorizationheaderstringYesYour API key.
fileIDquerystring (GUID)YesID returned by /upload.
outputquerystringNocsv, excel, or omit for JSON.

Example request

curl "https://www.ofxconverter.com/api/v1/download?fileID=3f2504e0-4f89-41d3-9a0c-0305e82c3301&output=csv" \
  -H "Authorization: YOUR_API_KEY"

Example response

The response body has the same shape as POST /api/v1/conversion. In addition to the authentication errors, download returns NO_FILE_ID when fileID is missing and FILE_NOT_FOUND when no matching file exists for your account (both with HTTP 401).

post /api/v1/pdf/conversion beta

Convert a PDF bank statement. Statements from supported banks are parsed directly; others fall back to OCR and AI extraction, so results may vary. This endpoint is experimental and may change.

Request parameters

NameInTypeRequiredDescription
AuthorizationheaderstringYesYour API key.
fileform-datafileYes.pdf, up to 10 MB.
outputform-datastringNocsv, excel, or omit for JSON.

Example request

curl -X POST "https://www.ofxconverter.com/api/v1/pdf/conversion" \
  -H "Authorization: YOUR_API_KEY" \
  -F "file=@statement.pdf"

Example response (json)

{
  "error": false,
  "message": "SUCCESS",
  "fileID": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "extension": "pdf",
  "filename": "statement.pdf",
  "convertedFile": {
    "transactions": [
      {
        "date": "2024-01-05T00:00:00",
        "value": -42.5,
        "description": "Coffee Shop",
        "type": "DEBIT"
      }
    ]
  }
}

Response schema

For JSON output, the OFX conversion and download endpoints return the extracted statement in convertedFile with the following structure.

FieldTypeDescription
header.bankNamestringBank name from the statement.
header.currencystringStatement currency (e.g. USD).
header.serverDatedatetimeDate reported by the bank server.
header.hasInvestimentbooleantrue when the statement contains investment transactions.
bankAccount.typestringAccount type (e.g. CHECKING).
bankAccount.bank.codeintegerBank code.
bankAccount.accountCodestringAccount number.
initialDate / finalDatedatetimeStatement period.
transactions[]arrayList of transactions (see below).
transactions[].datedatetimeTransaction date.
transactions[].valuenumberAmount (negative for debits).
transactions[].typestringTransaction type.
transactions[].descriptionstringTransaction description.
transactions[].idstringTransaction identifier from the file.
transactions[].checksumintegerChecksum used to detect duplicates.
transactions[].units / price / comissionnumberInvestment fields; null for regular transactions.
transactions[].secName / tickerstringSecurity name and ticker for investment transactions.

The PDF endpoint returns a simpler shape: convertedFile.transactions[] with date, value, description and type.

Error responses

Errors return a JSON body with "error": true and a message code. File-related errors also echo fileID, extension and filename.

{
  "error": true,
  "message": "FILE_NOT_SUPPORTED",
  "fileID": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
  "extension": "txt",
  "filename": "statement.txt"
}
MessageHTTP statusMeaning
NO_API_KEY401The Authorization header is missing.
UNAUTHORISED401Invalid key, or the account is not premium.
NO_FILE_ID401download was called without a fileID.
FILE_NOT_FOUND401No file with that fileID exists for your account.
FILE_NOT_UPLOADED400No file was included in the request.
FILE_NOT_SUPPORTED400The file extension is not accepted by this endpoint.
FILE_TOO_BIG400The file exceeds the 10 MB limit.
BAD_FILE_FORMAT400The file could not be parsed (e.g. an invalid OFX file).
SERVER_ERROR400An unexpected error occurred while processing the file.