Get started
Quickstart
Create a key, then send your first customer, invoice, and payment to HelloLedger in about ten minutes.
Before you start
You need a HelloLedger company and admin access to it. A company admin creates API keys; if that isn't you, ask the admin to create one and share it with you securely.
Every request goes to https://api.helloledger.ai over HTTPS. Keep the secret on your server. Never put it in browser code, mobile apps, logs, or URLs.
Building for many companies? Use Connect HelloLedger so each user connects their own company from your app, without copying keys.
1. Create a key
- In HelloLedger, open Profile → Developers and select New developer key.
- Name the key and set Integration to your app's name (for example, acme-rent). Records are matched by integration, so a replacement key finds the same customers and invoices.
- Pick the company, choose the Property management / receivables sync template, and create the key.
- Copy the secret. HelloLedger stores only a hash and can't show it again.
export HL_API_KEY=YOUR_API_SECRET2. Check the key
whoami returns the companies and scopes on the key, plus your rate limits. Use the company_id it returns in every other call.
curl "https://api.helloledger.ai/v1/whoami" \
-H "Authorization: Bearer $HL_API_KEY"{
"client_id": "hl_live_…",
"purpose": "developer",
"integration": "acme-rent",
"scopes": ["coa:read", "companies:read", "customers:write", "invoices:write", "items:read", "payments:write"],
"companies": [{ "company_id": "1234", "company_name": "YOUR BUSINESS NAME" }],
"requests_per_minute": 120,
"requests_per_day": 5000,
"client_ip": "203.0.113.9",
"allowed_ips": []
}3. Look up items and accounts
Invoice lines point at a product or service (item). Payments land in a deposit account: your bank account, or a clearing account when a processor pays out in batches. Save these IDs in your app's settings.
curl "https://api.helloledger.ai/v1/companies/{company_id}/items" \
-H "Authorization: Bearer $HL_API_KEY"curl "https://api.helloledger.ai/v1/companies/{company_id}/coa" \
-H "Authorization: Bearer $HL_API_KEY"4. Send a customer
Use your own ID in the URL. Sending the same request again is safe; it returns the existing customer.
curl -X PUT "https://api.helloledger.ai/v1/companies/{company_id}/customers/by-external-id/stu_1001" \
-H "Authorization: Bearer $HL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Jamie Rivera",
"email": "jamie@example.com",
"metadata": {
"unit": "4B"
}
}'5. Send an invoice
Each charge becomes its own invoice on the customer. HelloLedger posts it to the ledger right away (A/R up, income up) and does not email anyone.
curl -X PUT "https://api.helloledger.ai/v1/companies/{company_id}/invoices/by-external-id/chg_2026_10_rent_1001" \
-H "Authorization: Bearer $HL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customer_external_id": "stu_1001",
"date": "2026-10-01",
"due_date": "2026-10-05",
"memo": "October rent",
"lines": [
{
"item_id": "66f1a2b3c4d5e6f708091a2b",
"description": "October rent",
"amount": "850.00"
}
]
}'6. Record the payment
Each payment is recorded on its own and applied to the invoice it paid, so A/R shows exactly which charges are still open.
curl -X PUT "https://api.helloledger.ai/v1/companies/{company_id}/customer-payments/by-external-id/pay_pi_3Q8x" \
-H "Authorization: Bearer $HL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customer_external_id": "stu_1001",
"date": "2026-10-03",
"amount": "850.00",
"deposit_account_id": "66f1a2b3c4d5e6f708091c3d",
"method": "ach",
"reference": "pi_3Q8x",
"applications": [
{
"invoice_external_id": "chg_2026_10_rent_1001",
"amount": "850.00"
}
]
}'7. See it in HelloLedger
Open the company in HelloLedger: the customer is under Customers, the invoice shows as paid, and A/R aging no longer lists it. Profile → Developers → Activity shows every request the key made, with its result and request ID.
Next, read Idempotency and Errors, then the property management guide for the full daily sync.