Skip to main content

The ACH file toolkit for developers. Generate, parse and validate NACHA ACH files. Typed, zero-dependency.

Project description

achkit

The ACH file toolkit for developers. Generate, parse and validate NACHA ACH files in a few lines. Fully typed. Zero dependencies. Returns and NOC included. Available for both JavaScript/TypeScript and Python, with byte-identical output across the two.

npm i achkit          pip install achkit

The NACHA format is 94-character fixed-width records, positional fields, blocking factors of ten, and hash totals that must reconcile to the byte. One off-by-one and your ODFI rejects the whole batch. achkit does the counting so you describe intent instead.

JavaScript / TypeScript

import { AchFile, parse, validate } from 'achkit'

const file = AchFile.create({ originDfi: '091000019', companyId: '1234567890' })

file.batch({ sec: 'PPD', description: 'PAYROLL', effectiveDate: '2026-07-22' })
    .credit({ name: 'Jane Doe', routing: '011401533', account: '0072', amountCents: 124050 })
    .debit({ name: 'ACME LLC', routing: '091000019', account: '1899', amountCents: 124050 })

const bytes = file.render()          // balanced batch, hash totals + block padding done
const { ok, errors } = validate(bytes)
const parsed = parse(bytes)          // every field typed, no positional slicing

Python

from achkit import AchFile, parse, validate

f = AchFile.create(origin_dfi="091000019", company_id="1234567890")
b = f.batch(sec="PPD", description="PAYROLL", effective_date="2026-07-22")
b.credit(name="Jane Doe", routing="011401533", account="0072", amount_cents=124050)
b.debit(name="ACME LLC", routing="091000019", account="1899", amount_cents=124050)

data = f.render()
result = validate(data)
parsed = parse(data)

What's inside

  • Generate & parse any NACHA file, round-trip safe.
  • Reconciliation validator - ABA routing checksum, entry hash, batch and file control totals, blocking factor. Catches what an ODFI rejects on, before the file leaves your machine. Runs on any file, not just ones achkit made.
  • Returns & NOC - R-code and C-code lookup for return processing.
  • SEC codes - PPD, CCD, WEB, TEL, CTX and single 05 addenda.
  • Money is always integer cents. Dates are always YYYY-MM-DD. No floats, no locale surprises.

Hosted API client (paid)

The library is free and local. The hosted API adds what a local library can't - live routing verification against the FedACH participant directory. Get an API key at achkit.com/dashboard.

import { AchkitClient } from 'achkit'

const client = new AchkitClient({ apiKey: 'ak_...' })
const bank = await client.verifyRouting('021000021')
// { routing, checksumValid, found, active, bank: { name, city, state } }

const result = await client.validate(bytes) // reconciliation + live routing checks
from achkit import AchkitClient

client = AchkitClient("ak_...")
bank = client.verify_routing("021000021")
result = client.validate(data)

Pro adds live routing verification + 10,000 validations/month; Ultra is unlimited with return-file monitoring. See achkit.com.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

achkit-0.2.0.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

achkit-0.2.0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file achkit-0.2.0.tar.gz.

File metadata

  • Download URL: achkit-0.2.0.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for achkit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 711d630c0874b0fbf47ee0b0f5ab5f807fc62d58578762f686d04da496f54967
MD5 f08357adb288226ffb06b49fcc8719ca
BLAKE2b-256 e00b6e24611ded681cc0a9da692ad8100322bf22501a597ddc9872ea2ecfa9e6

See more details on using hashes here.

File details

Details for the file achkit-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: achkit-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for achkit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b458c821bfe10b076e9093dbb43ab85544735633c69a3d2eb919e30317e090b
MD5 b511a56b7dbad895c32e4788f174c027
BLAKE2b-256 b3ede33ade76bef2e0f6c832b631c703b1f3dba61ed1ed0f481504f3330cfd16

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page