Record a payment against a fee
Records a manual (offline/bank-transfer) payment against a payment plan fee, mirroring the internal staff manual-transaction flow: creating the transaction recomputes the fee's paid status and the plan status. The currency must match the fee's currency and the amount must be a positive integer in minor units, otherwise the request is rejected with 422 field errors. Requires an API token with write access. Pass an Idempotency-Key header to make retries safe.
- Type: stringprofile
_id requiredUnique identifier of the profile the fee belongs to.
- Type: stringfee
_id requiredUnique identifier of the payment plan fee being paid.
- Type: stringIdempotency
- Key max length:255Optional client-generated key (at most 255 characters) that makes the request safe to retry. A repeat carrying the same key replays the original response instead of recording a duplicate (the replay carries an Idempotent-Replayed: true header); the key is scoped to the token, method, and path. A repeat with the same key but a different request (a different body or query string) returns 422, and a repeat while the first request is still in progress returns 409.
- Type: integeramountrequired
Amount paid, in the fee's minor currency units (e.g. cents). Must be a positive integer; fractional or non-integer values are rejected.
- Type: stringcurrencyrequired
ISO currency code. Must match the fee's currency.
- Type: stringdescriptionrequired
Human-readable description of the payment.
- Type: stringdate
Optional payment date in ISO 8601 (yyyy-mm-dd). When omitted the transaction has no payment date (returned as an empty string); created_at records when it was created.
- Type: stringreference
Optional free-form reference (e.g. a bank transfer id). A label only; it is not used for idempotency.
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
curl https://ff-business-school.fullfabric.cloud/apis/payments/profiles/6385bdd4976a7719120108e9/fees/6977b3de3b5d00baac7cd25e/transactions \
--request POST \
--header 'Content-Type: application/json' \
--header 'FF-Auth: YOUR_SECRET_TOKEN' \
--data '{
"amount": 500000,
"currency": "EUR",
"description": "Deposit – MBA Standard Payment Plan",
"date": "2026-04-15",
"reference": "INV-2026-001"
}'
{
"id": "6311b20d9a52af7df8000200",
"state": "succeeded",
"amount": 500000,
"currency": "EUR",
"description": "Deposit – MBA Standard Payment Plan",
"date": "2026-04-15",
"reference": "INV-2026-001",
"reverses_id": null,
"payable_id": "6977b3de3b5d00baac7cd25e",
"payable_type": "BookKeeper::PaymentPlan::Fee",
"profile_id": "6385bdd4976a7719120108e9",
"created_at": 1744675200,
"updated_at": 1744675200,
"payment_id": "6977b3de3b5d00baac7cd25e",
"fee_id": "6977b3de3b5d00baac7cd25e"
}