-
-
Notifications
You must be signed in to change notification settings - Fork 0
Incoming Credit Notes
Manage incoming (purchase) credit notes from suppliers in Teamleader Focus.
The Incoming Credit Notes resource manages credit notes received from suppliers β corrections or refunds on previously issued purchase invoices. They follow the same review workflow as Incoming Invoices: pending β approved/refused β bookkeeping.
Access via Teamleader::incomingCreditNotes().
list()throwsInvalidArgumentException. Use theExpensesresource to list and filter expense documents.
create()posts toincomingCreditNotes.addβ not.create.create()is an alias foradd().Payment statuses:
unknown,paid,not_paidonly β there is nopartially_paidhere. That status exists only on Incoming Invoices.
incomingCreditNotes
| Capability | Supported |
|---|---|
| Pagination | β Not supported β use Expenses resource |
| Filtering | β Not supported β use Expenses resource |
| Sorting | β Not supported |
| Sideloading | β Not supported |
| Creation | β Supported |
| Update | β Supported |
| Deletion | β Supported |
| Payment management | β Supported |
Throws if $id is empty. Returns full credit note detail including payment_status and iban_number.
use McoreServices\TeamleaderSDK\Facades\Teamleader;
$creditNote = Teamleader::incomingCreditNotes()->info('credit-note-uuid');
$paymentStatus = $creditNote['data']['payment_status']; // unknown | paid | not_paid
$ibanNumber = $creditNote['data']['iban_number']; // nullable
$reviewStatus = $creditNote['data']['review_status']; // pending | approved | refusedCreates a new incoming credit note. Posts to incomingCreditNotes.add. create() is an alias.
Required fields (validated before the request):
| Field | Notes |
|---|---|
title |
Credit note title |
currency.code |
Valid currency code |
total |
Must include at least tax_exclusive or tax_inclusive
|
$creditNote = Teamleader::incomingCreditNotes()->add([
'title' => 'Credit for returned goods',
'supplier_id' => 'company-uuid', // optional
'document_number' => 'CN-2025-007', // optional
'invoice_date' => '2025-04-05', // optional
'currency' => ['code' => 'EUR'],
'total' => [
'tax_exclusive' => ['amount' => 200.0],
'tax_inclusive' => ['amount' => 242.0],
],
'file_id' => 'file-uuid', // optional
]);
$id = $creditNote['data']['id'];Merges ['id' => $id] with $data before posting. Validates currency if provided.
Teamleader::incomingCreditNotes()->update('credit-note-uuid', [
'title' => 'Updated credit note title',
]);Teamleader::incomingCreditNotes()->delete('credit-note-uuid');Teamleader::incomingCreditNotes()->approve('credit-note-uuid');Teamleader::incomingCreditNotes()->refuse('credit-note-uuid');Resets a refused credit note back to pending for re-review.
Teamleader::incomingCreditNotes()->markAsPendingReview('credit-note-uuid');Teamleader::incomingCreditNotes()->sendToBookkeeping('credit-note-uuid');Returns all payments with a meta.total.amount summary.
$payments = Teamleader::incomingCreditNotes()->listPayments('credit-note-uuid');
$totalPaid = $payments['meta']['total']['amount'];
foreach ($payments['data'] as $payment) {
echo $payment['payment']['amount'] . ' ' . $payment['payment']['currency'];
echo ' β ' . $payment['paid_at'];
}registerPayment(string $id, array $payment, string $paidAt, ?string $paymentMethodId = null, ?string $remark = null)
$paidAt is required. $payment must have amount (numeric) and currency (valid code) β both validated before the request.
Teamleader::incomingCreditNotes()->registerPayment(
'credit-note-uuid',
['amount' => 242.0, 'currency' => 'EUR'],
'2025-04-10T10:00:00+02:00',
'payment-method-uuid', // optional
'Received as bank credit' // optional
);Teamleader::incomingCreditNotes()->removePayment('credit-note-uuid', 'payment-uuid');updatePayment(string $id, string $paymentId, array $payment, ?string $paidAt = null, ?string $paymentMethodId = null, ?string $remark = null)
$paidAt is optional on update.
Teamleader::incomingCreditNotes()->updatePayment(
'credit-note-uuid',
'payment-uuid',
['amount' => 121.0, 'currency' => 'EUR'],
null,
null,
'Corrected to half amount'
);Payment statuses (payment_status on info() response):
unknown, paid, not_paid
No
partially_paidβ that status exists only on Incoming Invoices.
Review statuses (review_status on info() response):
pending, approved, refused
// Create
$cn = Teamleader::incomingCreditNotes()->add([
'title' => 'Returned goods credit',
'currency' => ['code' => 'EUR'],
'total' => ['tax_exclusive' => ['amount' => 200.0], 'tax_inclusive' => ['amount' => 242.0]],
]);
$id = $cn['data']['id'];
// Review and approve
Teamleader::incomingCreditNotes()->approve($id);
// Register receipt of the credit
Teamleader::incomingCreditNotes()->registerPayment(
$id,
['amount' => 242.0, 'currency' => 'EUR'],
now()->toIso8601String()
);
// Send to bookkeeping
Teamleader::incomingCreditNotes()->sendToBookkeeping($id);Teamleader::incomingCreditNotes()->refuse('credit-note-uuid');
// After the supplier reissues:
Teamleader::incomingCreditNotes()->update('credit-note-uuid', [
'total' => ['tax_exclusive' => ['amount' => 180.0]],
]);
Teamleader::incomingCreditNotes()->markAsPendingReview('credit-note-uuid');
Teamleader::incomingCreditNotes()->approve('credit-note-uuid');use InvalidArgumentException;
// list() not supported
try {
Teamleader::incomingCreditNotes()->list();
} catch (InvalidArgumentException $e) {
// 'The list method is not supported for incoming credit notes. Use info() to get a specific credit note.'
}
// Missing required fields on create
try {
Teamleader::incomingCreditNotes()->add(['title' => 'Test']);
} catch (InvalidArgumentException $e) {
// 'currency.code is required'
}
// paid_at missing on registerPayment
try {
Teamleader::incomingCreditNotes()->registerPayment('uuid', ['amount' => 100, 'currency' => 'EUR'], '');
} catch (InvalidArgumentException $e) {
// 'paid_at is required when registering a payment'
}- Bookkeeping Submissions β Track submission history per credit note
-
Incoming Invoices β Incoming invoices (same workflow, adds
partially_paid) - Receipts β Smaller expense receipts (same workflow)
-
Payment Methods β Optional on
registerPayment()
Last Updated: August 2026 β’ SDK Version: 2.2.2 β’ Made with β€οΈ by MCore Services
- Departments
- Users
- Teams
- Custom Fields
- Work Types
- Document Templates
- Currencies
- Notes
- Email Tracking
- Closing Days
- Day Off Types
- Days Off
- User Schedules
- Invoices
- Credit Notes
- Subscriptions
- Payment Methods
- Payment Terms
- Tax Rates
- Withholding Tax Rates
- Commercial Discounts
Next Gen Projects
Legacy Projects