Mark an invoice paid

Record a payment received outside Centerfy: sets the invoice to paid and adds its amount to the contact's revenue. No money is moved.

POST https://api.centerfy.ai/webhooks/inbound/invoices/:id/mark-paid

Headers

HeaderRequiredValueDescription
x-api-keyYesyour sub-account API key (cfy_…)Authenticates the request; or use Authorization: Bearer <key>.

Path parameters

NameTypeRequiredDescription
idstring (uuid)YesThe invoice id.

Body parameters

NameTypeRequiredDefaultDescription
payment_methodstringNo—How it was paid, e.g. cash or check. Defaults to manual.

Request body

{
  "payment_method": "check"
}

Example

curl -X POST "https://api.centerfy.ai/webhooks/inbound/invoices/{id}/mark-paid" \
  -H "x-api-key: $CENTERFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "payment_method": "check"
}'
import { CenterfyClient } from "@centerfy/sdk";

const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });

const result = await centerfy.invoices.markPaid("<invoiceId>", {
  "payment_method": "check"
});
console.log(result);
centerfy invoices mark-paid <invoiceId> '{"payment_method":"check"}'

MCP tool: centerfy_invoices_mark_paid (see MCP server)

Response

{
  "status": "success",
  "invoice": {
    "id": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
    "invoice_number": "INV-2026-0012",
    "contact_id": "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
    "quote_id": null,
    "amount": 1575,
    "status": "paid",
    "issued_at": "2026-10-06T10:00:00.000Z",
    "due_date": "2026-11-05",
    "paid_at": "2026-10-08T14:00:00.000Z",
    "payment_method": "check",
    "notes": "Net 30",
    "items": [
      {
        "item": "Website redesign",
        "quantity": 1,
        "amount": 1500
      },
      {
        "item": "Monthly hosting",
        "quantity": 3,
        "amount": 25
      }
    ],
    "payment_url": null,
    "payment_link_expires_at": null,
    "created_at": "2026-10-06T10:00:00.000Z",
    "updated_at": "2026-10-06T10:00:00.000Z"
  },
  "contact_revenue_updated": true
}

Errors

  • 409 — if the invoice is already paid or is void.
  • 404 — if the invoice is not in this sub-account.

Notes

The body is optional. contact_revenue_updated is false if the invoice has no contact or the revenue update failed (the invoice is still marked paid).

© 2026 Centerfy AI. All rights reserved.