# InvoiceActivityDto

A model the API reference uses in a request or a response. The operation pages link every field typed as this model here.

Read DTO for an invoice activity timeline entry.

## Fields
- `id` (string(uuid))
- `timestamp` (string(date-time))
- `type` ([InvoiceActivityType](https://devportal.signapay-sbx.winkpg.io/docs/api/models/InvoiceActivityType.md)): Classifies entries in the invoice activity timeline.
  Values:
  - `Created`: Invoice was created.
  - `Sent`: Invoice was sent to the recipient.
  - `Viewed`: Recipient viewed the invoice.
  - `PaymentReceived`: A payment was received.
  - `PaymentDeclined`: A payment attempt was declined.
  - `ReminderSent`: A reminder was sent.
  - `StatusChanged`: Invoice status changed.
  - `Edited`: Invoice was edited (Draft only).
  - `Closed`: Invoice was closed.
  - `Cancelled`: Invoice was cancelled.
  - `Refunded`: Invoice was refunded.
  - `CreditApplied`: A credit note was applied.
  - `NoteAdded`: An internal note was added.
  - `AutoChargeAttempted`: An automatic payment was attempted (auto-charge or smart-retry).
  - `PaymentRetryScheduled`: A soft-declined automatic payment was scheduled for a retry.
  - `PaymentRetriesExhausted`: Smart-retry attempts were exhausted (max attempts or retry window reached).
  - `PaymentRetriesStopped`: Smart-retry attempts were stopped (hard decline or manual intervention).
  - `PaymentPlanStarted`: A payment plan was set up against the invoice balance.
  - `InstallmentCollected`: An installment was collected (manually recorded or auto-charged).
  - `InstallmentCollectionFailed`: An automatic installment collection attempt failed (declined).
  - `PaymentPlanCancelled`: The payment plan was cancelled before all installments were collected.
  - `PaymentIndeterminate`: A payment attempt came back with a result the invoice cannot act on (a referral, a pending or submitted authorization, a partial approval, or an unrecognized status). Nothing was credited. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `PaymentLinkReissued`: An operator replaced the payment link with a fresh one without notifying the recipient. The previous link stopped working. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `PaymentLinkNotIssued`: The invoice was sent with no payment link. The description says why in operator terms and the metadata carries the stable InvoicePaymentLinkNotIssuedReason code. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `PaymentLinkWithdrawn`: A payment left a balance owed, and the payment link could not be moved onto a fresh payment session for that balance, so the invoice no longer has a working link. The description says why in operator terms and the metadata carries the stable InvoicePaymentLinkNotIssuedReason code. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `EmailNotSent`: The invoice was marked as sent, but the invoice email did not go out. The description says why in operator terms and the metadata carries the stable InvoiceEmailNotSentReason code. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `ReminderNotSent`: A reminder was due and attempted, but its email did not go out. It takes the reminder's slot exactly as ReminderSent does, so the schedule does not retry it. The metadata carries the stable InvoiceEmailNotSentReason code. Appended last: the numeric value is stored on the activity row and must never be renumbered.
  - `PaymentUnallocated`: A gateway payment was larger than the balance it paid. The invoice was credited the balance, and the rest of the charge belongs to no invoice until an operator refunds it. The description names the unallocated amount and the transaction; the metadata carries both. Appended last: the numeric value is stored on the activity row and must never be renumbered.
- `description` (string): (nullable)
- `userId` (string(uuid)): (nullable)
- `metadata` (string): Extra context for the entry as a JSON object, or null. A `PaymentLinkNotIssued` or `PaymentLinkWithdrawn` entry carries `{"reason": "<code>"}`, plus `"errorCode"` when the hosted page refused the payment session for a reason without its own code. Reason codes are stable; treat an unrecognized one as a generic "no payment link" reason. A `PaymentUnallocated` entry carries `{"unallocatedAmount": n, "transactionId": "<id>"}`: the part of a payment above the balance that no invoice was credited, and the transaction to refund it from. (nullable)

## See also

- [All documentation](https://devportal.signapay-sbx.winkpg.io/llms.txt): the machine-readable index of every public page on this site.
