Vendors

The suppliers you record expenses against.

Operations

Method & path Ability
GET /api/v1/vendors vendors:read
GET /api/v1/vendors/{vendor} vendors:read
POST /api/v1/vendors vendors:write
PATCH /api/v1/vendors/{vendor} vendors:write
DELETE /api/v1/vendors/{vendor} vendors:write

Create a vendor

Only name is required. category, website, iban, and bic are optional. As a create it takes an Idempotency-Key.

curl -X POST https://billey.nl/api/v1/vendors \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Office Supplies B.V.", "category": "Supplies", "iban": "NL00RABO0123456789" }'
{
  "data": {
    "id": 3,
    "name": "Office Supplies B.V.",
    "category": "Supplies",
    "iban": "NL00RABO0123456789",
    "created_at": "2026-07-21T10:15:30Z"
  }
}

Read-only vendor fields

notes, known_sender_emails, and match_subject_keywords are returned on reads but are not settable through the API — they are managed by Billey's inbound-document matching. PATCH is a partial merge; every writable field is optional.

Delete a vendor

DELETE soft-deletes the vendor and returns 204. It is refused with 409 if the vendor has a non-draft or asset-linked expense, a bank transaction, or a booking rule; the vendor's own draft expenses cascade.

See the OpenAPI spec for the full field list.

Something inaccurate or missing? support@billey.nl