Bookkeeping

    Vendors

    The people and companies the business pays. Bills and expenses point at a vendor.

    List and search vendors

    Scope: vendors:read or vendors:write. Filter by q (name contains, ignoring case), external_id, or status (active, inactive, archived). Page with limit (up to 200) and offset; next_offset is null on the last page.

    GET
    curl "https://api.helloledger.ai/v1/companies/{company_id}/vendors?q=staples&limit=50" \
      -H "Authorization: Bearer $HL_API_KEY"
    One vendor · GET
    curl "https://api.helloledger.ai/v1/companies/{company_id}/vendors/66f1a2b3c4d5e6f708092a01" \
      -H "Authorization: Bearer $HL_API_KEY"

    Create a vendor

    Scope: vendors:write. Only name is required. Names are unique per company: creating a name that exists (ignoring case) returns 409 vendor_exists with the existing vendor_id in the message.

    POST
    curl -X POST "https://api.helloledger.ai/v1/companies/{company_id}/vendors" \
      -H "Authorization: Bearer $HL_API_KEY" \
      -H "Idempotency-Key: vend_8812" \
      -H "Content-Type: application/json" \
      -d '{
      "name": "Staples",
      "email": "ap@staples.example",
      "phone": "555-0101",
      "payment_terms": "Net 30",
      "is_1099_eligible": false,
      "external_id": "vend_8812"
    }'
    Response (201)
    {
      "vendor_id": "66f1a2b3c4d5e6f708092a01",
      "external_id": "vend_8812",
      "name": "Staples",
      "email": "ap@staples.example",
      "phone": "555-0101",
      "payment_terms": "Net 30",
      "is_1099_eligible": false,
      "tags": ["vendor"],
      "status": "active",
      "needs_review": false,
      "result": "created"
    }

    Update a vendor

    Send only the fields to change. Renaming to a name another vendor already has returns 409 vendor_exists.

    PATCH
    curl -X PATCH "https://api.helloledger.ai/v1/companies/{company_id}/vendors/66f1a2b3c4d5e6f708092a01" \
      -H "Authorization: Bearer $HL_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "phone": "555-0199",
      "address_line1": "500 Main St",
      "city": "Austin",
      "state": "TX"
    }'

    Fields

    FieldNotes
    nameRequired on create. Up to 200 characters.
    email, phoneContact details.
    address_line1, address_line2, city, state, zip, countryMailing address.
    tax_id, is_1099_eligibleFor 1099 reporting.
    payment_terms, vendor_type, notesFree text.
    metadataUp to 20 string key/value pairs.
    external_idYour ID for the vendor, stored for reference.
    statusactive, inactive, or archived.
    needs_reviewRead only. True when HelloLedger created the vendor from a bill or expense.