Appearance
Settlement and the ledger
Every vendor has a ledger: an append-only list of signed money movements (VendorLedgerEntry). The vendor's balance is simply the sum of their entries, and their statement is the entry list itself — there is no separate "balance" column to keep in sync.
Entry types
| Type | Sign | Posted when |
|---|---|---|
earning | + | A vendor order is generated from a paid Sylius order (net of commission, tax excluded — see Commission calculator) |
payout | - | A VendorPayment completes, whether from a withdrawal request or an admin-initiated payout |
claw_back | - | A refund/dispute/chargeback reduces what the vendor is owed |
adjustment | ± | A manual correction |
The balance can go negative (e.g. a claw-back larger than the remaining balance). This is intentional: the core ledger is single-sided (no escrow, hold periods or double-entry accounting — that belongs to the payments-pro add-on), but it must still be able to represent "the vendor now owes the platform money" without special-casing it.
Reading the ledger
php
<?php
/** @var \Odiseo\SyliusMarketplacePlugin\Payout\Ledger\VendorLedgerInterface $ledger */
$ledger = $this->container->get('odiseo_marketplace.ledger');
$balance = $ledger->getBalance($vendor); // int, minor units, can be negative
$statement = $ledger->getStatement($vendor); // VendorLedgerEntryInterface[], newest firstSellers see their own balance and statement on the Balance page of the seller panel; admins pay out a vendor's whole current balance from Marketplace > Vendor payouts (see Your first payout).
Merchant of record
The marketplace operator (not the vendor) is the merchant of record and marketplace facilitator: the platform is the party that legally sells to the shopper, collects payment, and remits tax — the vendor is paid their net share afterwards. This is why commission is operator-remits (tax is excluded from the vendor's payout, see Commission calculator) and why earning entries carry the vendor's net share rather than the order's gross total.
An alternative posture — the vendor as merchant of record, with the platform only intermediating payment — is not supported by the core; it has different legal, tax and chargeback-liability consequences and is left for a payments add-on that models split-at-source charges (e.g. Stripe Connect destination charges) instead of collect-then-settle.