Appearance
Billing and accounting
- Money amounts
- Invoices
- Payments
- Credit notes
- Refunds
- Payment batches
- Invoice reminders
- Transaction activities
- Accounting setup: GL accounts, departments, GL assignments
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" }amountis a string in US dollars with two decimal places. It can be negative.currencyis alwaysUSD.
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).
| Endpoint | Meaning |
|---|---|
GET /invoices | List invoices, with their lines. page_size is at most 200 for this endpoint (see Paging). |
GET /invoices/ids | The id of every invoice. |
GET /invoices/{id} | One invoice. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
event_id | UUID | Only invoices whose source.item_id is this event. See Events. |
status | string | One 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The invoice id. It does not change when the invoice changes. |
number | string or null | The invoice number. |
type | string | invoice, or consolidated for an invoice that combines other invoices. |
status | string | paid, unpaid, partially_paid, void, held, auto_void or cancelled. |
customer | object | Who is billed. |
customer.type | string | person or organization. |
customer.id | UUID or null | The person or organization. See People and organizations. |
total | object | Money. The invoice total. |
amount_paid | object | Money. The sum of this invoice's allocations from payments that succeeded (see Payments). This includes payments with method credit_note. |
amount_credited | object | Money. Credit notes applied directly to the invoice, without a payment. The "amount paid" Engagifii shows on screen is amount_paid plus amount_credited. |
balance_due | object | Money. total − amount_paid − amount_credited. Always 0.00 for void, auto_void and cancelled invoices. |
issued_at | date-time or null | The invoice date. |
due_at | date-time or null | When payment is due. |
sent_at | date-time or null | When the invoice was sent. |
payment_term | string or null | The payment term's name, for example Net 30. |
purchase_order_number | string or null | The customer's purchase order number. |
tax | object | Money. Tax on the invoice. |
discount | object or null | A discount on the whole invoice. null when there is none. |
discount.value | string | The discount, for example "10.00". |
discount.type | string | percentage (value is a percent) or amount (value is dollars). |
note | string or null | The invoice note. |
void_remark | string or null | The remark staff entered when voiding the invoice. |
system_remark | string or null | A remark Engagifii adds itself, for example why an invoice was voided automatically. |
is_recognized | boolean | The invoice's "recognized" flag in Engagifii. |
billing_contact_person_ids | array of UUID | The invoice's billing contacts. |
remittance_contact_person_ids | array of UUID | The invoice's remittance contacts. |
bill_to_address | object or null | The bill-to address saved with the invoice. |
bill_to_address.line1 | string or null | Address line 1. |
bill_to_address.line2 | string or null | Address line 2. |
bill_to_address.city | string or null | City. |
bill_to_address.state | string or null | State. |
bill_to_address.postal_code | string or null | Postal code. |
bill_to_address.country | string or null | Country. |
requested_by_person_id | UUID or null | The person who requested the invoice, when that person belongs to this workspace. |
created_by_person_id | UUID or null | The person who created the invoice. |
source | object or null | What the invoice is for, as Engagifii records it. |
source.item_id | UUID or null | The item invoiced, for example an event. |
source.item_name | string or null | The item's name. |
source.category | string | The kind of item. Same values as lines[].category. |
source.registration_type | string | exhibitor for an exhibitor registration, attendee for every other invoice. |
source.registration_group_id | UUID or null | The registration group. |
source.registered_at | date-time or null | When the registration was made. |
source.original_invoice_id | UUID or null | For a cancellation-fee or modification invoice, the invoice it was raised from. |
registration_id | UUID or null | The registration this invoice is for. See Registrations. |
consolidated_invoice_id | UUID or null | The consolidated invoice that includes this invoice. |
replaces_invoice_id | UUID or null | After a registration change, Engagifii issues a new invoice and credits the original. On the new invoice, this is the original. |
replaced_by_invoice_id | UUID or null | On the original invoice, the new invoice that replaced it. |
lines | array | The invoice lines, in invoice order. |
lines[].id | UUID | The line id. Payments, credit notes, refunds and payment batches name lines by this id. |
lines[].item_id | UUID or null | The item on the line, for example an event, class or product. |
lines[].item_name | string or null | The item's name. |
lines[].description | string or null | The line description. |
lines[].sku | string or null | The product SKU. |
lines[].event_id | UUID or null | The 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[].category | string | manual, subscription, event, endorsement, class, product, event_session, event_bundle, modification, cancellation_fee, exhibitor_booth, additional_exhibitor_booth, workspace or other. |
lines[].quantity | string | The quantity, with three decimal places, for example "1.000". |
lines[].unit_price | object or null | Money. The price of one unit. |
lines[].tax | object | Money. Tax on the line. |
lines[].discount | object | Money. Discount on the line. |
lines[].amount | object or null | Money. The line amount. |
lines[].amount_paid | object | Money. Paid on this line by payments that succeeded. |
lines[].amount_credited | object | Money. Credited on this line by credit notes applied directly, without a payment. |
lines[].amount_refunded | object | Money. Refunded on this line by refunds that succeeded. |
lines[].amount_retained | object | Money. Kept from a payment when the line was cancelled. |
lines[].recorded_balance_due | object or null | Money. The line balance Engagifii stores and shows in its line-item export. |
lines[].item_type | string or null | manual, membership, service, general, conference, merchandise, modification or cancellation_fee. |
lines[].account | object or null | The GL account the line posts to. See GL accounts. |
lines[].account.id | UUID | The GL account id. |
lines[].account.code | string or null | The account code. |
lines[].account.name | string or null | The account name. |
lines[].department | object or null | The department the line posts to. See Departments. |
lines[].department.id | UUID | The department id. |
lines[].department.code | string or null | The department code. |
lines[].department.name | string or null | The department name. |
lines[].person_id | UUID or null | The person the line is for. |
lines[].organization_id | UUID or null | The organization the line is for. |
lines[].registration_id | UUID or null | The registration the line is for. |
lines[].registration_number | string or null | The registration number. |
lines[].registration_group | object or null | The registration group. |
lines[].registration_group.id | UUID | The registration group id. |
lines[].registration_group.number | string or null | The registration group number. |
lines[].note | string or null | The line note. |
lines[].cancelled | boolean | Whether the line was cancelled. |
history | array | Every state the invoice has been in, oldest first. The last entry is the current state. |
history[].status | string | The status in that state. Same values as status. |
history[].number | string or null | The invoice number in that state. Engagifii can number an invoice late or renumber it, for example after an automatic void. |
history[].from | date-time | When the state began. |
history[].total | object or null | Money. The total in that state. |
history[].balance_due | object or null | Money. 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_at | date-time or null | The sent time in that state. |
history[].issued_at | date-time or null | The invoice date in that state. |
history[].due_at | date-time or null | The due date in that state. |
history[].by_person_id | UUID or null | The person Engagifii records against that state. |
created_at | date-time or null | When the first state began. |
updated_at | date-time | When 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_dueover invoices whosestatusis notheld. Engagifii leaves held invoices out until they are sent. - Aged receivables as of a date D: for each invoice, take the last
historyentry whosefromis on or before D. Sumhistory[].balance_dueover those entries whose status isunpaidorpartially_paid. - Invoiced revenue for a period: for each invoice, take the first
historyentry with statusunpaidwhosesent_atfalls in the period. Sum itstotal.
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'supdated_atto an earlier time. Sync/payments,/credit-notesand/refundswithupdated_sincetoo, and re-fetch the invoices they name:allocations[].invoice_idon payments,applications[].invoice_idon credit notes andlines[].invoice_idon refunds. - Engagifii can change a line's
accountanddepartmenton past invoices without changingupdated_at. Reload invoices in full from time to time. - Deleting an invoice records no change time. Use
/invoices/idsto 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.
| Endpoint | Meaning |
|---|---|
GET /payments | List payments, with their allocations. |
GET /payments/ids | The id of every payment. |
GET /payments/{id} | One payment. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
invoice_id | UUID | Only payments allocated to this invoice. |
event_id | UUID | Only payments allocated to an invoice whose source.item_id is this event. |
status | string | One 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The payment id. It does not change when the payment's status changes. |
number | string | The payment number. |
status | string | failed, success, void, retry_success, retry_failed, processing, refunded, abandoned or unknown. |
succeeded | boolean | true only for success and retry_success. Engagifii counts a payment towards an invoice only when this is true. |
method | string | credit_card, check, cash, credit_card_external, account_transfer, ach, ach_record, credit_note or other. |
is_cash | boolean | false for method credit_note, which moves no money. true for every other method. |
amount | object | Money. The payment amount. |
customer | object | Who paid. |
customer.type | string | person or organization. |
customer.id | UUID or null | The person or organization. See People and organizations. |
reference_number | string or null | The check, ACH, cash or credit-note reference. |
cleared_at | date-time or null | When a check cleared the bank. |
gateway | object or null | The payment gateway used. |
gateway.name | string or null | The gateway's name in the workspace. |
gateway.type | string | authorize_net, stripe, paypal, cybersource or other. |
card | object or null | For card payments, the latest attempt with the gateway. |
card.type | string or null | The card type, for example Visa. |
card.last4 | string or null | The last four digits of the card number. |
card.payment_intent_id | string or null | The gateway's payment intent id. |
card.charge_id | string or null | The gateway's charge id. |
card.attempts | integer or null | How many attempts were made. |
card.failure | object or null | Why the attempt failed. null if it did not fail. |
card.failure.code | string or null | The failure code. |
card.failure.description | string or null | The failure description. |
credit_note_id | UUID or null | For method credit_note, the credit note spent. See Credit notes. |
original_payment_id | UUID or null | For method credit_note, the payment the credit note's money came from. |
payment_batch_id | UUID or null | The payment batch that recorded this payment. See Payment batches. |
note | string or null | The payment note. |
void_remark | string or null | The remark staff entered when voiding the payment. |
system_remark | string or null | A remark Engagifii adds itself. |
pay_later | boolean | Whether the customer chose to pay later. |
status_set_by | string or null | What last set the status: staff, registration, scheduled_job, gateway_webhook, split_payment or other. |
initiated_by_person_id | UUID or null | The person who made the payment or entered it. |
allocations | array | How the payment is split across invoices. |
allocations[].invoice_id | UUID | The invoice. See Invoices. |
allocations[].amount | object | Money. The amount allocated to that invoice. |
allocations[].lines | array | The invoice lines the allocation paid. On a few payments these do not add up to allocations[].amount. |
allocations[].lines[].invoice_line_id | UUID | The invoice line (lines[].id on the invoice). |
allocations[].lines[].amount | object | Money. The amount paid on that line. |
history | array | Every status the payment has been in, oldest first. The last entry is the current status. |
history[].status | string | The status. Same values as status. |
history[].succeeded | boolean | succeeded in that state. |
history[].from | date-time | When the state began. |
history[].by_person_id | UUID or null | The person who started that state. |
paid_at | date-time or null | The payment date. |
created_at | date-time or null | When the first state began. |
updated_at | date-time | When the status last changed. |
Keeping payments in sync
cleared_atis set later by staff without changingupdated_at. Reload payments in full from time to time.- Deleting a payment records no change time. Use
/payments/idsto 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.
| Endpoint | Meaning |
|---|---|
GET /credit-notes | List credit notes. |
GET /credit-notes/ids | The id of every credit note. |
GET /credit-notes/{id} | One credit note. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
invoice_id | UUID | Only credit notes applied to this invoice. |
status | string | One 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The credit note id. It does not change when the credit note changes. |
number | string | The credit note number. |
status | string | issued, 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. |
kind | string | voucher or offset (offset against invoices). |
source | string | What created the credit note: manual, paid_cancellation, paid_modification, unpaid_cancellation, unpaid_modification or unspecified. |
is_overpayment | boolean | Whether the credit note was created from an overpayment. |
customer | object | Who the credit is for. |
customer.type | string | person or organization. |
customer.id | UUID or null | The person or organization. See People and organizations. |
amount | object | Money. The amount credited. |
amount_applied | object | Money. The sum of applications[].amount. |
amount_refunded | object | Money. The sum of the credit note's refunds that succeeded, including refunds later deleted (refunds[].deleted is true). |
balance | object | Money. amount − amount_applied − amount_refunded. |
reason | string or null | The reason given for the credit note. Often HTML. Do not display it without escaping. |
note | string or null | The credit note's note. Often HTML. Do not display it without escaping. |
credited_lines | array | What the credit note credits back: the payment and invoice lines it was issued against. |
credited_lines[].payment_id | UUID or null | The payment. See Payments. |
credited_lines[].invoice_id | UUID or null | The invoice. |
credited_lines[].invoice_line_id | UUID or null | The invoice line. |
credited_lines[].amount | object or null | Money. The amount credited. |
applications | array | Each time the credit note was applied to an invoice, oldest first. |
applications[].invoice_id | UUID | The invoice it was applied to. See Invoices. |
applications[].payment_id | UUID or null | When the credit note was applied as a payment, that payment in /payments (method credit_note). null when it was applied directly. |
applications[].amount | object | Money. The amount applied. |
applications[].applied_at | date-time | When it was applied. |
applications[].lines | array | The invoice lines credited. |
applications[].lines[].invoice_line_id | UUID | The invoice line. |
applications[].lines[].amount | object | Money. The amount credited on that line. |
refunds | array | The credit note's refunds, oldest first. |
refunds[].refund_id | UUID | The refund. See Refunds. |
refunds[].amount | object | Money. The refund amount. |
refunds[].succeeded | boolean | true when the refund's status is success or retry_success. |
refunds[].refunded_at | date-time or null | The refund date. |
refunds[].deleted | boolean | Whether the refund was deleted. A deleted refund still counts in amount_refunded. |
history | array | Every state the credit note has been in, oldest first. The last entry is the current state. |
history[].status | string | The status. Same values as status. |
history[].from | date-time | When the state began. |
history[].amount | object | Money. The amount in that state. |
history[].issued_at | date-time or null | The credit note date in that state. |
history[].by_person_id | UUID or null | The person who made the change that began the state. |
created_by_person_id | UUID or null | The person who created the credit note. |
issued_at | date-time or null | The credit note date. |
created_at | date-time or null | When the first state began. |
updated_at | date-time | When 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_refundedandbalancewithout changing the credit note'supdated_at. Sync/refundswithupdated_sincetoo, and re-fetch the credit notes a changed refund names (refunds[].credit_note_idon the refund). - Deleting a credit note records no change time. Use
/credit-notes/idsto 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.
| Endpoint | Meaning |
|---|---|
GET /refunds | List refunds. |
GET /refunds/ids | The id of every refund. |
GET /refunds/{id} | One refund. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
status | string | One 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The refund id. It does not change when the refund changes. |
number | string | The refund number. |
status | string | failed, success, retry_success, retry_failed, initiated or unknown. |
succeeded | boolean | true when status is success or retry_success. Engagifii's balances count only these refunds. |
method | string | credit_card, check, cash, credit_card_external, account_transfer, ach, ach_record, credit_note or other. |
customer | object | Who was refunded. |
customer.type | string | person or organization. |
customer.id | UUID or null | The person or organization. See People and organizations. |
amount | object | Money. The refund amount. |
reason | string or null | The reason given for the refund. Often HTML. Do not display it without escaping. |
note | string or null | The refund note. Often HTML. Do not display it without escaping. |
reference_number | string or null | The refund's reference number, for example a check number. |
card | object or null | For card refunds, the latest attempt with the gateway. |
card.type | string or null | The card type. |
card.last4 | string or null | The last four digits of the card number. |
card.gateway_transaction_id | string or null | The gateway's transaction id. |
card.attempts | integer or null | How many attempts were made. |
initiated_by_person_id | UUID or null | The person who started the refund. |
refunds | array | What this refund pays back. |
refunds[].type | string | credit_note, payment or other. |
refunds[].credit_note_id | UUID or null | The credit note refunded. See Credit notes. |
refunds[].payment_id | UUID or null | The payment refunded. See Payments. |
lines | array | The invoice lines the refund covers. |
lines[].invoice_id | UUID or null | The invoice. See Invoices. |
lines[].invoice_line_id | UUID or null | The invoice line. |
lines[].amount | object | Money. The amount refunded on that line. |
history | array | Every state the refund has been in, oldest first. The last entry is the current state. |
history[].status | string | The status. Same values as status. |
history[].from | date-time | When the state began. |
history[].amount | object | Money. The amount in that state. |
history[].refunded_at | date-time or null | The refund date in that state. |
history[].by_person_id | UUID or null | The person who started the refund. |
refunded_at | date-time or null | The refund date. |
cleared_at | date-time or null | When the refund cleared. |
created_at | date-time or null | When the first state began. |
updated_at | date-time | When the refund last changed. |
Keeping refunds in sync
- Setting
cleared_atorreference_numberdoes not changeupdated_at. Reload refunds in full from time to time. - Deleting a refund records no change time. Use
/refunds/idsto find deleted refunds. - When a refund changes, re-fetch the credit notes in its
refundsand the invoices in itslines. 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.
| Endpoint | Meaning |
|---|---|
GET /payment-batches | List payment batches, with their invoices and lines. |
GET /payment-batches/ids | The 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The payment batch id. |
name | string or null | The batch name. |
description | string or null | The batch description. |
status | string | failed, created, completed, draft, processing or other. The error text of a failed batch is not returned. |
control_amount | object or null | Money. The total staff expected the batch to add up to. |
created_by_person_id | UUID or null | The person who created the batch. |
invoices | array | The invoices in the batch, ordered by invoice number. |
invoices[].invoice_id | UUID or null | The invoice. See Invoices. |
invoices[].invoice_number | string or null | The invoice number. |
invoices[].amount | object or null | Money. The amount entered for the invoice. |
invoices[].applied_amount | object or null | Money. The amount applied to the invoice. |
invoices[].balance_due_before | object or null | Money. The invoice's balance before the batch. |
invoices[].method | string | The payment method. Same values as method on payments. |
invoices[].reference_number | string or null | The check or cash reference. |
invoices[].memo | string or null | The memo entered for the invoice. |
invoices[].payment_id | UUID or null | The payment the batch created for this invoice. null until the batch is completed. |
invoices[].lines | array | The invoice lines in the batch. |
invoices[].lines[].invoice_line_id | UUID or null | The invoice line. |
invoices[].lines[].amount | object or null | Money. The amount entered for the line. |
invoices[].lines[].applied_amount | object or null | Money. The amount applied to the line. |
created_at | date-time | When the batch was created. |
updated_at | date-time | When 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.
| Endpoint | Meaning |
|---|---|
GET /invoice-reminders | List invoice reminders, ordered by the time sent. |
GET /invoice-reminders/ids | The id of every invoice reminder. |
GET /invoice-reminders/{id} | One invoice reminder. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
invoice_id | UUID | Only 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The reminder id. |
subject | string or null | The email subject. |
from_email | string or null | The address the reminder was sent from. |
customer | object or null | Who was reminded. |
customer.type | string | person or organization. |
customer.id | UUID or null | The person or organization. See People and organizations. |
invoice_ids | array of UUID | The invoices the reminder covers. See Invoices. |
recipients | array | Who the reminder was sent to, ordered by email address. |
recipients[].email | string or null | The recipient's email address. |
recipients[].person_id | UUID or null | The recipient, if they are a person in Engagifii. |
sent_by_person_id | UUID or null | The staff member who sent the reminder, when that person belongs to this workspace. |
sent_at | date-time | When the reminder was sent. |
updated_at | date-time | Same 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.
| Endpoint | Meaning |
|---|---|
GET /transaction-activities | List activity entries, ordered by time. |
GET /transaction-activities/ids | The id of every activity entry. |
GET /transaction-activities/{id} | One activity entry. |
Filters
| Parameter | Type | Meaning |
|---|---|---|
entity_type | string | Only 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
| Field | Type | Meaning |
|---|---|---|
id | UUID | The activity entry id. |
entity | object | The record the entry is about. |
entity.type | string | invoice, payment, credit_note, refund or other. |
entity.id | UUID or null | The record's id in /invoices, /payments, /credit-notes or /refunds. |
entity.number | string or null | The record's number. |
invoice_line_id | UUID or null | The invoice line the entry is about, if any. |
activity | string | What happened. See the values below. |
amount | object or null | Money. The amount the entry records, if any. |
by_person_id | UUID or null | The person who did it. |
description | string or null | Engagifii's description of the activity. Often HTML. Do not display it without escaping. |
detail | string or null | More detail from Engagifii. Often HTML. Do not display it without escaping. |
entity_at | date-time or null | The date the activity is about, where Engagifii records one, for example the new date after a date change. |
at | date-time | When the activity happened. |
updated_at | date-time | Same 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.
| Endpoint | Meaning |
|---|---|
GET /gl-accounts | List GL accounts. |
GET /gl-accounts/ids | The 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"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The GL account id. |
code | string or null | The account code. |
name | string or null | The account name. |
description | string or null | The account description. |
parent_id | UUID or null | The parent GL account. |
type | object or null | The account type. |
type.id | UUID | The account type id. |
type.name | string or null | The account type name. |
alias | string or null | The name Engagifii shows instead of the code, where set. |
created_at | date-time | When the account was created. |
updated_at | date-time | When 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.
| Endpoint | Meaning |
|---|---|
GET /departments | List departments. |
GET /departments/ids | The 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"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The department id. |
code | string or null | The department code. |
name | string or null | The department name. |
short_name | string or null | The department's short name. |
created_at | date-time | When the department was created. |
updated_at | date-time | When 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.
| Endpoint | Meaning |
|---|---|
GET /gl-assignments | List GL assignments. |
GET /gl-assignments/ids | The id of every GL assignment. |
GET /gl-assignments/{id} | One GL assignment. |
| Parameter | Type | Meaning |
|---|---|---|
item_id | UUID | Only 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"
}| Field | Type | Meaning |
|---|---|---|
id | UUID | The GL assignment id. |
item | object | What the assignment is for. |
item.type | string | The kind of item. Same values as lines[].category on invoices, for example event, class, event_session, event_bundle or exhibitor_booth. |
item.id | UUID or null | The item. See Events and Training. |
revenue_account_id | UUID or null | The GL account for revenue. See GL accounts. |
cancellation_account_id | UUID or null | The GL account for cancellation fees. |
modification_account_id | UUID or null | The GL account for modification fees. |
department_id | UUID or null | The department. See Departments. |
history | array | Every change to the assignment, oldest first. |
history[].changed_at | date-time | When the change was made. |
history[].by_person_id | UUID or null | The person who made it. |
history[].revenue_account_id | object | The revenue account before (from) and after (to) the change. Each is a UUID or null. |
history[].cancellation_account_id | object | The cancellation-fee account before (from) and after (to). Each is a UUID or null. |
history[].modification_account_id | object | The modification-fee account before (from) and after (to). Each is a UUID or null. |
history[].department_id | object | The department before (from) and after (to). Each is a UUID or null. |
created_at | date-time | When the assignment was created. |
updated_at | date-time | When the assignment last changed. |
