Skip to content

Billing and accounting ​

← Workspace APIs

Every resource on this page has a list endpoint, an /ids endpoint and a single-record endpoint. Paging, updated_since, the deleted short form and /ids work as described in Paging and Keeping a copy in sync.

Money amounts ​

Money fields are objects:

json
{ "amount": "850.00", "currency": "USD" }
  • amount is a string in US dollars with two decimal places. It can be negative.
  • currency is always USD.

In the field tables below, a money field has type object and its meaning starts with "Money.". Two fields are strings but not money objects: lines[].quantity on invoices (three decimal places) and discount.value on invoices.

Invoices ​

An invoice bills a person or an organization. Each invoice includes its lines, its contacts and every state it has been in (history).

EndpointMeaning
GET /invoicesList invoices, with their lines. page_size is at most 200 for this endpoint (see Paging).
GET /invoices/idsThe id of every invoice.
GET /invoices/{id}One invoice.

Filters ​

ParameterTypeMeaning
event_idUUIDOnly invoices whose source.item_id is this event. See Events.
statusstringOne or more statuses, comma-separated, for example unpaid,partially_paid. Values are listed under status below.

Example ​

json
{
  "id": "3f0c…",
  "number": "INV-10245",
  "type": "invoice",
  "status": "partially_paid",
  "customer": { "type": "organization", "id": "7a21…" },
  "total": { "amount": "850.00", "currency": "USD" },
  "amount_paid": { "amount": "500.00", "currency": "USD" },
  "amount_credited": { "amount": "0.00", "currency": "USD" },
  "balance_due": { "amount": "350.00", "currency": "USD" },
  "issued_at": "2026-09-01T00:00:00Z",
  "due_at": "2026-10-01T00:00:00Z",
  "sent_at": "2026-09-01T14:02:10Z",
  "payment_term": "Net 30",
  "purchase_order_number": "PO-5531",
  "tax": { "amount": "0.00", "currency": "USD" },
  "discount": null,
  "note": null,
  "void_remark": null,
  "system_remark": null,
  "is_recognized": false,
  "billing_contact_person_ids": ["c4d2…"],
  "remittance_contact_person_ids": [],
  "bill_to_address": {
    "line1": "120 Main Street", "line2": "Suite 400", "city": "Springfield",
    "state": "IL", "postal_code": "62701", "country": "United States"
  },
  "requested_by_person_id": null,
  "created_by_person_id": "91be…",
  "source": {
    "item_id": "5e8a…", "item_name": "Annual Conference 2026", "category": "event",
    "registration_type": "attendee", "registration_group_id": null,
    "registered_at": "2026-08-30T16:45:00Z", "original_invoice_id": null
  },
  "registration_id": "d0f3…",
  "consolidated_invoice_id": null,
  "replaces_invoice_id": null,
  "replaced_by_invoice_id": null,
  "lines": [
    {
      "id": "0b7e…", "item_id": "5e8a…", "item_name": "Full conference pass", "description": null,
      "sku": null, "event_id": "5e8a…", "category": "event", "quantity": "1.000",
      "unit_price": { "amount": "850.00", "currency": "USD" },
      "tax": { "amount": "0.00", "currency": "USD" },
      "discount": { "amount": "0.00", "currency": "USD" },
      "amount": { "amount": "850.00", "currency": "USD" },
      "amount_paid": { "amount": "500.00", "currency": "USD" },
      "amount_credited": { "amount": "0.00", "currency": "USD" },
      "amount_refunded": { "amount": "0.00", "currency": "USD" },
      "amount_retained": { "amount": "0.00", "currency": "USD" },
      "recorded_balance_due": { "amount": "350.00", "currency": "USD" },
      "item_type": "conference",
      "account": { "id": "a1c9…", "code": "4100", "name": "Conference revenue" },
      "department": { "id": "e2d4…", "code": "EVT", "name": "Events" },
      "person_id": "c4d2…", "organization_id": "7a21…",
      "registration_id": "d0f3…", "registration_number": "R-20931",
      "registration_group": null, "note": null, "cancelled": false
    }
  ],
  "history": [
    {
      "status": "unpaid", "number": "INV-10245", "from": "2026-09-01T14:02:10Z",
      "total": { "amount": "850.00", "currency": "USD" },
      "balance_due": { "amount": "850.00", "currency": "USD" },
      "sent_at": "2026-09-01T14:02:10Z", "issued_at": "2026-09-01T00:00:00Z",
      "due_at": "2026-10-01T00:00:00Z", "by_person_id": "91be…"
    },
    {
      "status": "partially_paid", "number": "INV-10245", "from": "2026-09-12T10:20:33Z",
      "total": { "amount": "850.00", "currency": "USD" },
      "balance_due": { "amount": "350.00", "currency": "USD" },
      "sent_at": "2026-09-01T14:02:10Z", "issued_at": "2026-09-01T00:00:00Z",
      "due_at": "2026-10-01T00:00:00Z", "by_person_id": "91be…"
    }
  ],
  "created_at": "2026-09-01T14:02:10Z",
  "updated_at": "2026-09-12T10:20:33Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe invoice id. It does not change when the invoice changes.
numberstring or nullThe invoice number.
typestringinvoice, or consolidated for an invoice that combines other invoices.
statusstringpaid, unpaid, partially_paid, void, held, auto_void or cancelled.
customerobjectWho is billed.
customer.typestringperson or organization.
customer.idUUID or nullThe person or organization. See People and organizations.
totalobjectMoney. The invoice total.
amount_paidobjectMoney. The sum of this invoice's allocations from payments that succeeded (see Payments). This includes payments with method credit_note.
amount_creditedobjectMoney. Credit notes applied directly to the invoice, without a payment. The "amount paid" Engagifii shows on screen is amount_paid plus amount_credited.
balance_dueobjectMoney. total − amount_paid − amount_credited. Always 0.00 for void, auto_void and cancelled invoices.
issued_atdate-time or nullThe invoice date.
due_atdate-time or nullWhen payment is due.
sent_atdate-time or nullWhen the invoice was sent.
payment_termstring or nullThe payment term's name, for example Net 30.
purchase_order_numberstring or nullThe customer's purchase order number.
taxobjectMoney. Tax on the invoice.
discountobject or nullA discount on the whole invoice. null when there is none.
discount.valuestringThe discount, for example "10.00".
discount.typestringpercentage (value is a percent) or amount (value is dollars).
notestring or nullThe invoice note.
void_remarkstring or nullThe remark staff entered when voiding the invoice.
system_remarkstring or nullA remark Engagifii adds itself, for example why an invoice was voided automatically.
is_recognizedbooleanThe invoice's "recognized" flag in Engagifii.
billing_contact_person_idsarray of UUIDThe invoice's billing contacts.
remittance_contact_person_idsarray of UUIDThe invoice's remittance contacts.
bill_to_addressobject or nullThe bill-to address saved with the invoice.
bill_to_address.line1string or nullAddress line 1.
bill_to_address.line2string or nullAddress line 2.
bill_to_address.citystring or nullCity.
bill_to_address.statestring or nullState.
bill_to_address.postal_codestring or nullPostal code.
bill_to_address.countrystring or nullCountry.
requested_by_person_idUUID or nullThe person who requested the invoice, when that person belongs to this workspace.
created_by_person_idUUID or nullThe person who created the invoice.
sourceobject or nullWhat the invoice is for, as Engagifii records it.
source.item_idUUID or nullThe item invoiced, for example an event.
source.item_namestring or nullThe item's name.
source.categorystringThe kind of item. Same values as lines[].category.
source.registration_typestringexhibitor for an exhibitor registration, attendee for every other invoice.
source.registration_group_idUUID or nullThe registration group.
source.registered_atdate-time or nullWhen the registration was made.
source.original_invoice_idUUID or nullFor a cancellation-fee or modification invoice, the invoice it was raised from.
registration_idUUID or nullThe registration this invoice is for. See Registrations.
consolidated_invoice_idUUID or nullThe consolidated invoice that includes this invoice.
replaces_invoice_idUUID or nullAfter a registration change, Engagifii issues a new invoice and credits the original. On the new invoice, this is the original.
replaced_by_invoice_idUUID or nullOn the original invoice, the new invoice that replaced it.
linesarrayThe invoice lines, in invoice order.
lines[].idUUIDThe line id. Payments, credit notes, refunds and payment batches name lines by this id.
lines[].item_idUUID or nullThe item on the line, for example an event, class or product.
lines[].item_namestring or nullThe item's name.
lines[].descriptionstring or nullThe line description.
lines[].skustring or nullThe product SKU.
lines[].event_idUUID or nullThe event the line is for: the event itself on an event line, or the event a class or bundle belongs to. When a class or bundle belongs to several events, one of them is returned, the same one on every call.
lines[].categorystringmanual, subscription, event, endorsement, class, product, event_session, event_bundle, modification, cancellation_fee, exhibitor_booth, additional_exhibitor_booth, workspace or other.
lines[].quantitystringThe quantity, with three decimal places, for example "1.000".
lines[].unit_priceobject or nullMoney. The price of one unit.
lines[].taxobjectMoney. Tax on the line.
lines[].discountobjectMoney. Discount on the line.
lines[].amountobject or nullMoney. The line amount.
lines[].amount_paidobjectMoney. Paid on this line by payments that succeeded.
lines[].amount_creditedobjectMoney. Credited on this line by credit notes applied directly, without a payment.
lines[].amount_refundedobjectMoney. Refunded on this line by refunds that succeeded.
lines[].amount_retainedobjectMoney. Kept from a payment when the line was cancelled.
lines[].recorded_balance_dueobject or nullMoney. The line balance Engagifii stores and shows in its line-item export.
lines[].item_typestring or nullmanual, membership, service, general, conference, merchandise, modification or cancellation_fee.
lines[].accountobject or nullThe GL account the line posts to. See GL accounts.
lines[].account.idUUIDThe GL account id.
lines[].account.codestring or nullThe account code.
lines[].account.namestring or nullThe account name.
lines[].departmentobject or nullThe department the line posts to. See Departments.
lines[].department.idUUIDThe department id.
lines[].department.codestring or nullThe department code.
lines[].department.namestring or nullThe department name.
lines[].person_idUUID or nullThe person the line is for.
lines[].organization_idUUID or nullThe organization the line is for.
lines[].registration_idUUID or nullThe registration the line is for.
lines[].registration_numberstring or nullThe registration number.
lines[].registration_groupobject or nullThe registration group.
lines[].registration_group.idUUIDThe registration group id.
lines[].registration_group.numberstring or nullThe registration group number.
lines[].notestring or nullThe line note.
lines[].cancelledbooleanWhether the line was cancelled.
historyarrayEvery state the invoice has been in, oldest first. The last entry is the current state.
history[].statusstringThe status in that state. Same values as status.
history[].numberstring or nullThe invoice number in that state. Engagifii can number an invoice late or renumber it, for example after an automatic void.
history[].fromdate-timeWhen the state began.
history[].totalobject or nullMoney. The total in that state.
history[].balance_dueobject or nullMoney. The balance Engagifii computes for that state. It can differ from the top-level balance_due, which is computed from the invoice's payments and credit notes.
history[].sent_atdate-time or nullThe sent time in that state.
history[].issued_atdate-time or nullThe invoice date in that state.
history[].due_atdate-time or nullThe due date in that state.
history[].by_person_idUUID or nullThe person Engagifii records against that state.
created_atdate-time or nullWhen the first state began.
updated_atdate-timeWhen the invoice itself last changed.

Reproducing Engagifii's figures ​

Engagifii compares dates in the workspace's time zone, not in UTC. Read it from GET /workspace.

  • Aged receivables today: the sum of balance_due over invoices whose status is not held. Engagifii leaves held invoices out until they are sent.
  • Aged receivables as of a date D: for each invoice, take the last history entry whose from is on or before D. Sum history[].balance_due over those entries whose status is unpaid or partially_paid.
  • Invoiced revenue for a period: for each invoice, take the first history entry with status unpaid whose sent_at falls in the period. Sum its total.

Keeping invoices in sync ​

  • Payments, credit notes and refunds change an invoice's amounts without changing its updated_at. Voiding a payment can even move an invoice's updated_at to an earlier time. Sync /payments, /credit-notes and /refunds with updated_since too, and re-fetch the invoices they name: allocations[].invoice_id on payments, applications[].invoice_id on credit notes and lines[].invoice_id on refunds.
  • Engagifii can change a line's account and department on past invoices without changing updated_at. Reload invoices in full from time to time.
  • Deleting an invoice records no change time. Use /invoices/ids to find deleted invoices.

Payments ​

A payment is money received from a person or organization, or a credit note spent as a payment. Each payment shows how it was allocated to invoices and invoice lines, and every status it has been in.

EndpointMeaning
GET /paymentsList payments, with their allocations.
GET /payments/idsThe id of every payment.
GET /payments/{id}One payment.

Filters ​

ParameterTypeMeaning
invoice_idUUIDOnly payments allocated to this invoice.
event_idUUIDOnly payments allocated to an invoice whose source.item_id is this event.
statusstringOne or more statuses, comma-separated, for example success,retry_success. Values are listed under status below.

created_since is no longer accepted and returns 400. Use updated_since.

Example ​

json
{
  "id": "6b2e…",
  "number": "PMT-08812",
  "status": "success",
  "succeeded": true,
  "method": "credit_card",
  "is_cash": true,
  "amount": { "amount": "500.00", "currency": "USD" },
  "customer": { "type": "organization", "id": "7a21…" },
  "reference_number": null,
  "cleared_at": null,
  "gateway": { "name": "Main card account", "type": "stripe" },
  "card": {
    "type": "Visa", "last4": "4242", "payment_intent_id": "pi_3P…", "charge_id": "ch_3P…",
    "attempts": 1, "failure": null
  },
  "credit_note_id": null,
  "original_payment_id": null,
  "payment_batch_id": null,
  "note": null,
  "void_remark": null,
  "system_remark": null,
  "pay_later": false,
  "status_set_by": "registration",
  "initiated_by_person_id": "c4d2…",
  "allocations": [
    {
      "invoice_id": "3f0c…",
      "amount": { "amount": "500.00", "currency": "USD" },
      "lines": [ { "invoice_line_id": "0b7e…", "amount": { "amount": "500.00", "currency": "USD" } } ]
    }
  ],
  "history": [
    { "status": "processing", "succeeded": false, "from": "2026-09-12T10:20:01Z", "by_person_id": "c4d2…" },
    { "status": "success", "succeeded": true, "from": "2026-09-12T10:20:33Z", "by_person_id": "c4d2…" }
  ],
  "paid_at": "2026-09-12T10:20:01Z",
  "created_at": "2026-09-12T10:20:01Z",
  "updated_at": "2026-09-12T10:20:33Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe payment id. It does not change when the payment's status changes.
numberstringThe payment number.
statusstringfailed, success, void, retry_success, retry_failed, processing, refunded, abandoned or unknown.
succeededbooleantrue only for success and retry_success. Engagifii counts a payment towards an invoice only when this is true.
methodstringcredit_card, check, cash, credit_card_external, account_transfer, ach, ach_record, credit_note or other.
is_cashbooleanfalse for method credit_note, which moves no money. true for every other method.
amountobjectMoney. The payment amount.
customerobjectWho paid.
customer.typestringperson or organization.
customer.idUUID or nullThe person or organization. See People and organizations.
reference_numberstring or nullThe check, ACH, cash or credit-note reference.
cleared_atdate-time or nullWhen a check cleared the bank.
gatewayobject or nullThe payment gateway used.
gateway.namestring or nullThe gateway's name in the workspace.
gateway.typestringauthorize_net, stripe, paypal, cybersource or other.
cardobject or nullFor card payments, the latest attempt with the gateway.
card.typestring or nullThe card type, for example Visa.
card.last4string or nullThe last four digits of the card number.
card.payment_intent_idstring or nullThe gateway's payment intent id.
card.charge_idstring or nullThe gateway's charge id.
card.attemptsinteger or nullHow many attempts were made.
card.failureobject or nullWhy the attempt failed. null if it did not fail.
card.failure.codestring or nullThe failure code.
card.failure.descriptionstring or nullThe failure description.
credit_note_idUUID or nullFor method credit_note, the credit note spent. See Credit notes.
original_payment_idUUID or nullFor method credit_note, the payment the credit note's money came from.
payment_batch_idUUID or nullThe payment batch that recorded this payment. See Payment batches.
notestring or nullThe payment note.
void_remarkstring or nullThe remark staff entered when voiding the payment.
system_remarkstring or nullA remark Engagifii adds itself.
pay_laterbooleanWhether the customer chose to pay later.
status_set_bystring or nullWhat last set the status: staff, registration, scheduled_job, gateway_webhook, split_payment or other.
initiated_by_person_idUUID or nullThe person who made the payment or entered it.
allocationsarrayHow the payment is split across invoices.
allocations[].invoice_idUUIDThe invoice. See Invoices.
allocations[].amountobjectMoney. The amount allocated to that invoice.
allocations[].linesarrayThe invoice lines the allocation paid. On a few payments these do not add up to allocations[].amount.
allocations[].lines[].invoice_line_idUUIDThe invoice line (lines[].id on the invoice).
allocations[].lines[].amountobjectMoney. The amount paid on that line.
historyarrayEvery status the payment has been in, oldest first. The last entry is the current status.
history[].statusstringThe status. Same values as status.
history[].succeededbooleansucceeded in that state.
history[].fromdate-timeWhen the state began.
history[].by_person_idUUID or nullThe person who started that state.
paid_atdate-time or nullThe payment date.
created_atdate-time or nullWhen the first state began.
updated_atdate-timeWhen the status last changed.

Keeping payments in sync ​

  • cleared_at is set later by staff without changing updated_at. Reload payments in full from time to time.
  • Deleting a payment records no change time. Use /payments/ids to find deleted payments.
  • When a payment changes, re-fetch the invoices in its allocations. See Keeping invoices in sync.

Credit notes ​

A credit note is an amount owed back to a person or organization. It can be applied to invoices or refunded. Each credit note shows what it was issued against, where it was applied, its refunds and every state it has been in.

EndpointMeaning
GET /credit-notesList credit notes.
GET /credit-notes/idsThe id of every credit note.
GET /credit-notes/{id}One credit note.

Filters ​

ParameterTypeMeaning
invoice_idUUIDOnly credit notes applied to this invoice.
statusstringOne or more statuses, comma-separated. Values are listed under status below.

Example ​

json
{
  "id": "9c4a…",
  "number": "CN-00317",
  "status": "partially_used",
  "kind": "offset",
  "source": "paid_cancellation",
  "is_overpayment": false,
  "customer": { "type": "person", "id": "c4d2…" },
  "amount": { "amount": "200.00", "currency": "USD" },
  "amount_applied": { "amount": "120.00", "currency": "USD" },
  "amount_refunded": { "amount": "0.00", "currency": "USD" },
  "balance": { "amount": "80.00", "currency": "USD" },
  "reason": "Session cancelled",
  "note": null,
  "credited_lines": [
    {
      "payment_id": "6b2e…", "invoice_id": "3f0c…", "invoice_line_id": "0b7e…",
      "amount": { "amount": "200.00", "currency": "USD" }
    }
  ],
  "applications": [
    {
      "invoice_id": "4d19…", "payment_id": "8e07…",
      "amount": { "amount": "120.00", "currency": "USD" },
      "applied_at": "2026-10-03T09:15:00Z",
      "lines": [ { "invoice_line_id": "2a6f…", "amount": { "amount": "120.00", "currency": "USD" } } ]
    }
  ],
  "refunds": [],
  "history": [
    {
      "status": "issued", "from": "2026-09-20T11:00:00Z",
      "amount": { "amount": "200.00", "currency": "USD" },
      "issued_at": "2026-09-20T00:00:00Z", "by_person_id": "91be…"
    },
    {
      "status": "partially_used", "from": "2026-10-03T09:15:00Z",
      "amount": { "amount": "200.00", "currency": "USD" },
      "issued_at": "2026-09-20T00:00:00Z", "by_person_id": "91be…"
    }
  ],
  "created_by_person_id": "91be…",
  "issued_at": "2026-09-20T00:00:00Z",
  "created_at": "2026-09-20T11:00:00Z",
  "updated_at": "2026-10-03T09:15:00Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe credit note id. It does not change when the credit note changes.
numberstringThe credit note number.
statusstringissued, issued_refunded, used, partially_used, partially_used_refunded, auto_issued, issued_partially_refunded, partially_used_partially_refunded, auto_issued_refunded, auto_issued_partially_refunded or unknown.
kindstringvoucher or offset (offset against invoices).
sourcestringWhat created the credit note: manual, paid_cancellation, paid_modification, unpaid_cancellation, unpaid_modification or unspecified.
is_overpaymentbooleanWhether the credit note was created from an overpayment.
customerobjectWho the credit is for.
customer.typestringperson or organization.
customer.idUUID or nullThe person or organization. See People and organizations.
amountobjectMoney. The amount credited.
amount_appliedobjectMoney. The sum of applications[].amount.
amount_refundedobjectMoney. The sum of the credit note's refunds that succeeded, including refunds later deleted (refunds[].deleted is true).
balanceobjectMoney. amount − amount_applied − amount_refunded.
reasonstring or nullThe reason given for the credit note. Often HTML. Do not display it without escaping.
notestring or nullThe credit note's note. Often HTML. Do not display it without escaping.
credited_linesarrayWhat the credit note credits back: the payment and invoice lines it was issued against.
credited_lines[].payment_idUUID or nullThe payment. See Payments.
credited_lines[].invoice_idUUID or nullThe invoice.
credited_lines[].invoice_line_idUUID or nullThe invoice line.
credited_lines[].amountobject or nullMoney. The amount credited.
applicationsarrayEach time the credit note was applied to an invoice, oldest first.
applications[].invoice_idUUIDThe invoice it was applied to. See Invoices.
applications[].payment_idUUID or nullWhen the credit note was applied as a payment, that payment in /payments (method credit_note). null when it was applied directly.
applications[].amountobjectMoney. The amount applied.
applications[].applied_atdate-timeWhen it was applied.
applications[].linesarrayThe invoice lines credited.
applications[].lines[].invoice_line_idUUIDThe invoice line.
applications[].lines[].amountobjectMoney. The amount credited on that line.
refundsarrayThe credit note's refunds, oldest first.
refunds[].refund_idUUIDThe refund. See Refunds.
refunds[].amountobjectMoney. The refund amount.
refunds[].succeededbooleantrue when the refund's status is success or retry_success.
refunds[].refunded_atdate-time or nullThe refund date.
refunds[].deletedbooleanWhether the refund was deleted. A deleted refund still counts in amount_refunded.
historyarrayEvery state the credit note has been in, oldest first. The last entry is the current state.
history[].statusstringThe status. Same values as status.
history[].fromdate-timeWhen the state began.
history[].amountobjectMoney. The amount in that state.
history[].issued_atdate-time or nullThe credit note date in that state.
history[].by_person_idUUID or nullThe person who made the change that began the state.
created_by_person_idUUID or nullThe person who created the credit note.
issued_atdate-time or nullThe credit note date.
created_atdate-time or nullWhen the first state began.
updated_atdate-timeWhen the credit note itself last changed.

Balance as of a date ​

Engagifii's credit-note balance as of a date compares applications[].applied_at and refunds[].refunded_at with that date in the workspace's time zone. Read it from GET /workspace.

Keeping credit notes in sync ​

  • A refund that settles later changes amount_refunded and balance without changing the credit note's updated_at. Sync /refunds with updated_since too, and re-fetch the credit notes a changed refund names (refunds[].credit_note_id on the refund).
  • Deleting a credit note records no change time. Use /credit-notes/ids to find deleted credit notes.
  • When a credit note changes, re-fetch the invoices in its applications. See Keeping invoices in sync.

Refunds ​

A refund is money paid back to a person or organization. It pays back a credit note or a payment, and covers one or more invoice lines.

EndpointMeaning
GET /refundsList refunds.
GET /refunds/idsThe id of every refund.
GET /refunds/{id}One refund.

Filters ​

ParameterTypeMeaning
statusstringOne or more statuses, comma-separated. Values are listed under status below.

Example ​

json
{
  "id": "e5a0…",
  "number": "RF-00092",
  "status": "success",
  "succeeded": true,
  "method": "check",
  "customer": { "type": "person", "id": "c4d2…" },
  "amount": { "amount": "80.00", "currency": "USD" },
  "reason": "Remaining credit returned",
  "note": null,
  "reference_number": "CHK-2207",
  "card": null,
  "initiated_by_person_id": "91be…",
  "refunds": [ { "type": "credit_note", "credit_note_id": "9c4a…", "payment_id": null } ],
  "lines": [
    { "invoice_id": "3f0c…", "invoice_line_id": "0b7e…", "amount": { "amount": "80.00", "currency": "USD" } }
  ],
  "history": [
    {
      "status": "success", "from": "2026-10-15T13:40:00Z",
      "amount": { "amount": "80.00", "currency": "USD" },
      "refunded_at": "2026-10-15T00:00:00Z", "by_person_id": "91be…"
    }
  ],
  "refunded_at": "2026-10-15T00:00:00Z",
  "cleared_at": null,
  "created_at": "2026-10-15T13:40:00Z",
  "updated_at": "2026-10-15T13:40:00Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe refund id. It does not change when the refund changes.
numberstringThe refund number.
statusstringfailed, success, retry_success, retry_failed, initiated or unknown.
succeededbooleantrue when status is success or retry_success. Engagifii's balances count only these refunds.
methodstringcredit_card, check, cash, credit_card_external, account_transfer, ach, ach_record, credit_note or other.
customerobjectWho was refunded.
customer.typestringperson or organization.
customer.idUUID or nullThe person or organization. See People and organizations.
amountobjectMoney. The refund amount.
reasonstring or nullThe reason given for the refund. Often HTML. Do not display it without escaping.
notestring or nullThe refund note. Often HTML. Do not display it without escaping.
reference_numberstring or nullThe refund's reference number, for example a check number.
cardobject or nullFor card refunds, the latest attempt with the gateway.
card.typestring or nullThe card type.
card.last4string or nullThe last four digits of the card number.
card.gateway_transaction_idstring or nullThe gateway's transaction id.
card.attemptsinteger or nullHow many attempts were made.
initiated_by_person_idUUID or nullThe person who started the refund.
refundsarrayWhat this refund pays back.
refunds[].typestringcredit_note, payment or other.
refunds[].credit_note_idUUID or nullThe credit note refunded. See Credit notes.
refunds[].payment_idUUID or nullThe payment refunded. See Payments.
linesarrayThe invoice lines the refund covers.
lines[].invoice_idUUID or nullThe invoice. See Invoices.
lines[].invoice_line_idUUID or nullThe invoice line.
lines[].amountobjectMoney. The amount refunded on that line.
historyarrayEvery state the refund has been in, oldest first. The last entry is the current state.
history[].statusstringThe status. Same values as status.
history[].fromdate-timeWhen the state began.
history[].amountobjectMoney. The amount in that state.
history[].refunded_atdate-time or nullThe refund date in that state.
history[].by_person_idUUID or nullThe person who started the refund.
refunded_atdate-time or nullThe refund date.
cleared_atdate-time or nullWhen the refund cleared.
created_atdate-time or nullWhen the first state began.
updated_atdate-timeWhen the refund last changed.

Keeping refunds in sync ​

  • Setting cleared_at or reference_number does not change updated_at. Reload refunds in full from time to time.
  • Deleting a refund records no change time. Use /refunds/ids to find deleted refunds.
  • When a refund changes, re-fetch the credit notes in its refunds and the invoices in its lines. See Keeping credit notes in sync and Keeping invoices in sync.

Payment batches ​

A payment batch is a set of checks or cash that staff enter at once against several invoices. It has the control total staff typed and, for each invoice, the amount applied and the payment the batch created.

EndpointMeaning
GET /payment-batchesList payment batches, with their invoices and lines.
GET /payment-batches/idsThe id of every payment batch.
GET /payment-batches/{id}One payment batch.

This resource has no filters beyond those in Paging.

Example ​

json
{
  "id": "1d8f…",
  "name": "October check deposit",
  "description": null,
  "status": "completed",
  "control_amount": { "amount": "1200.00", "currency": "USD" },
  "created_by_person_id": "91be…",
  "invoices": [
    {
      "invoice_id": "3f0c…",
      "invoice_number": "INV-10245",
      "amount": { "amount": "350.00", "currency": "USD" },
      "applied_amount": { "amount": "350.00", "currency": "USD" },
      "balance_due_before": { "amount": "350.00", "currency": "USD" },
      "method": "check",
      "reference_number": "CHK-5120",
      "memo": null,
      "payment_id": "7f33…",
      "lines": [
        {
          "invoice_line_id": "0b7e…",
          "amount": { "amount": "350.00", "currency": "USD" },
          "applied_amount": { "amount": "350.00", "currency": "USD" }
        }
      ]
    }
  ],
  "created_at": "2026-10-20T15:00:00Z",
  "updated_at": "2026-10-20T15:12:44Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe payment batch id.
namestring or nullThe batch name.
descriptionstring or nullThe batch description.
statusstringfailed, created, completed, draft, processing or other. The error text of a failed batch is not returned.
control_amountobject or nullMoney. The total staff expected the batch to add up to.
created_by_person_idUUID or nullThe person who created the batch.
invoicesarrayThe invoices in the batch, ordered by invoice number.
invoices[].invoice_idUUID or nullThe invoice. See Invoices.
invoices[].invoice_numberstring or nullThe invoice number.
invoices[].amountobject or nullMoney. The amount entered for the invoice.
invoices[].applied_amountobject or nullMoney. The amount applied to the invoice.
invoices[].balance_due_beforeobject or nullMoney. The invoice's balance before the batch.
invoices[].methodstringThe payment method. Same values as method on payments.
invoices[].reference_numberstring or nullThe check or cash reference.
invoices[].memostring or nullThe memo entered for the invoice.
invoices[].payment_idUUID or nullThe payment the batch created for this invoice. null until the batch is completed.
invoices[].linesarrayThe invoice lines in the batch.
invoices[].lines[].invoice_line_idUUID or nullThe invoice line.
invoices[].lines[].amountobject or nullMoney. The amount entered for the line.
invoices[].lines[].applied_amountobject or nullMoney. The amount applied to the line.
created_atdate-timeWhen the batch was created.
updated_atdate-timeWhen the batch last changed.

Invoice reminders ​

An invoice reminder is a payment reminder that staff sent for one or more unpaid invoices: when, by whom, the subject, which invoices and to which addresses.

EndpointMeaning
GET /invoice-remindersList invoice reminders, ordered by the time sent.
GET /invoice-reminders/idsThe id of every invoice reminder.
GET /invoice-reminders/{id}One invoice reminder.

Filters ​

ParameterTypeMeaning
invoice_idUUIDOnly reminders that include this invoice.

Example ​

json
{
  "id": "b7c1…",
  "subject": "Reminder: invoice INV-10245 is past due",
  "from_email": "billing@example.org",
  "customer": { "type": "organization", "id": "7a21…" },
  "invoice_ids": ["3f0c…"],
  "recipients": [ { "email": "ap@example.com", "person_id": "c4d2…" } ],
  "sent_by_person_id": "91be…",
  "sent_at": "2026-10-08T12:30:00Z",
  "updated_at": "2026-10-08T12:30:00Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe reminder id.
subjectstring or nullThe email subject.
from_emailstring or nullThe address the reminder was sent from.
customerobject or nullWho was reminded.
customer.typestringperson or organization.
customer.idUUID or nullThe person or organization. See People and organizations.
invoice_idsarray of UUIDThe invoices the reminder covers. See Invoices.
recipientsarrayWho the reminder was sent to, ordered by email address.
recipients[].emailstring or nullThe recipient's email address.
recipients[].person_idUUID or nullThe recipient, if they are a person in Engagifii.
sent_by_person_idUUID or nullThe staff member who sent the reminder, when that person belongs to this workspace.
sent_atdate-timeWhen the reminder was sent.
updated_atdate-timeSame as sent_at.

Keeping invoice reminders in sync ​

Reminders are never edited or deleted, so updated_since returns the reminders sent at or after that time.

Transaction activities ​

The activity log Engagifii keeps on invoices, payments, credit notes and refunds: created, sent, paid, voided, deleted, cancelled, edits to the memo, date, amount or payment term, reminders, views and downloads. It is the only place Engagifii records the time of deletions, voids and edits, so use it to find which records to re-fetch or remove between full reloads.

EndpointMeaning
GET /transaction-activitiesList activity entries, ordered by time.
GET /transaction-activities/idsThe id of every activity entry.
GET /transaction-activities/{id}One activity entry.

Filters ​

ParameterTypeMeaning
entity_typestringOnly entries about one kind of record: invoice, payment, credit_note or refund.

Example ​

json
{
  "id": "f04d…",
  "entity": { "type": "invoice", "id": "3f0c…", "number": "INV-10245" },
  "invoice_line_id": null,
  "activity": "voided",
  "amount": { "amount": "850.00", "currency": "USD" },
  "by_person_id": "91be…",
  "description": "Invoice <b>INV-10245</b> voided",
  "detail": null,
  "entity_at": null,
  "at": "2026-10-22T08:05:19Z",
  "updated_at": "2026-10-22T08:05:19Z"
}

Fields ​

FieldTypeMeaning
idUUIDThe activity entry id.
entityobjectThe record the entry is about.
entity.typestringinvoice, payment, credit_note, refund or other.
entity.idUUID or nullThe record's id in /invoices, /payments, /credit-notes or /refunds.
entity.numberstring or nullThe record's number.
invoice_line_idUUID or nullThe invoice line the entry is about, if any.
activitystringWhat happened. See the values below.
amountobject or nullMoney. The amount the entry records, if any.
by_person_idUUID or nullThe person who did it.
descriptionstring or nullEngagifii's description of the activity. Often HTML. Do not display it without escaping.
detailstring or nullMore detail from Engagifii. Often HTML. Do not display it without escaping.
entity_atdate-time or nullThe date the activity is about, where Engagifii records one, for example the new date after a date change.
atdate-timeWhen the activity happened.
updated_atdate-timeSame as at.

activity values: created, updated, recorded, added, deleted, voided, marked_favorite, unmarked_favorite, viewed, downloaded, printed, notification_sent, partially_paid, sent, removed, paid, memo_changed, shared, generated, date_changed, amount_changed, payment_term_changed, billing_information_changed, reference_or_address_changed (a payment reference or a delivery address), ach_payment_failed, cancelled, reminder_sent and other.

Keeping transaction activities in sync ​

Entries are only added. But Engagifii dates recorded, paid and partially_paid entries with the payment date staff enter, which can be in the past, so updated_since can miss them. Take payment changes from /payments, whose updated_since is reliable, and use this feed for voids, deletions, cancellations and edits.

Accounting setup ​

The workspace's GL accounts and departments, and which of them each event, class, session, bundle or booth posts to.

GL accounts ​

A GL account is a revenue account in the workspace's chart of accounts. Invoice lines name it in lines[].account.

EndpointMeaning
GET /gl-accountsList GL accounts.
GET /gl-accounts/idsThe id of every GL account.
GET /gl-accounts/{id}One GL account.

This resource has no filters beyond those in Paging.

json
{
  "id": "a1c9…",
  "code": "4100",
  "name": "Conference revenue",
  "description": "Registration fees for the annual conference",
  "parent_id": null,
  "type": { "id": "5b02…", "name": "Revenue" },
  "alias": null,
  "created_at": "2024-01-15T17:00:00Z",
  "updated_at": "2025-06-02T09:41:12Z"
}
FieldTypeMeaning
idUUIDThe GL account id.
codestring or nullThe account code.
namestring or nullThe account name.
descriptionstring or nullThe account description.
parent_idUUID or nullThe parent GL account.
typeobject or nullThe account type.
type.idUUIDThe account type id.
type.namestring or nullThe account type name.
aliasstring or nullThe name Engagifii shows instead of the code, where set.
created_atdate-timeWhen the account was created.
updated_atdate-timeWhen the account last changed.

Old invoice lines can still name a deleted GL account in lines[].account.

Departments ​

A department is a department code that invoice lines post to. Invoice lines name it in lines[].department.

EndpointMeaning
GET /departmentsList departments.
GET /departments/idsThe id of every department.
GET /departments/{id}One department.

This resource has no filters beyond those in Paging.

json
{
  "id": "e2d4…",
  "code": "EVT",
  "name": "Events",
  "short_name": "Events",
  "created_at": "2024-01-15T17:00:00Z",
  "updated_at": "2024-01-15T17:00:00Z"
}
FieldTypeMeaning
idUUIDThe department id.
codestring or nullThe department code.
namestring or nullThe department name.
short_namestring or nullThe department's short name.
created_atdate-timeWhen the department was created.
updated_atdate-timeWhen the department last changed.

Old invoice lines can still name a deleted department in lines[].department.

GL assignments ​

A GL assignment says which GL accounts and department an event, class, session, bundle or booth posts to: the revenue account, the accounts for cancellation and modification fees, and the department. New invoice lines take their account from here.

EndpointMeaning
GET /gl-assignmentsList GL assignments.
GET /gl-assignments/idsThe id of every GL assignment.
GET /gl-assignments/{id}One GL assignment.
ParameterTypeMeaning
item_idUUIDOnly the assignment for this item, for example an event or class id (item.id).
json
{
  "id": "c83b…",
  "item": { "type": "event", "id": "5e8a…" },
  "revenue_account_id": "a1c9…",
  "cancellation_account_id": "a1d0…",
  "modification_account_id": null,
  "department_id": "e2d4…",
  "history": [
    {
      "changed_at": "2026-07-01T10:00:00Z",
      "by_person_id": "91be…",
      "revenue_account_id": { "from": "a1b7…", "to": "a1c9…" },
      "cancellation_account_id": { "from": null, "to": "a1d0…" },
      "modification_account_id": { "from": null, "to": null },
      "department_id": { "from": "e2d4…", "to": "e2d4…" }
    }
  ],
  "created_at": "2026-05-12T14:22:00Z",
  "updated_at": "2026-07-01T10:00:00Z"
}
FieldTypeMeaning
idUUIDThe GL assignment id.
itemobjectWhat the assignment is for.
item.typestringThe kind of item. Same values as lines[].category on invoices, for example event, class, event_session, event_bundle or exhibitor_booth.
item.idUUID or nullThe item. See Events and Training.
revenue_account_idUUID or nullThe GL account for revenue. See GL accounts.
cancellation_account_idUUID or nullThe GL account for cancellation fees.
modification_account_idUUID or nullThe GL account for modification fees.
department_idUUID or nullThe department. See Departments.
historyarrayEvery change to the assignment, oldest first.
history[].changed_atdate-timeWhen the change was made.
history[].by_person_idUUID or nullThe person who made it.
history[].revenue_account_idobjectThe revenue account before (from) and after (to) the change. Each is a UUID or null.
history[].cancellation_account_idobjectThe cancellation-fee account before (from) and after (to). Each is a UUID or null.
history[].modification_account_idobjectThe modification-fee account before (from) and after (to). Each is a UUID or null.
history[].department_idobjectThe department before (from) and after (to). Each is a UUID or null.
created_atdate-timeWhen the assignment was created.
updated_atdate-timeWhen the assignment last changed.