Seller-led marketplace

Create payment links for sellers who have their own Mamo accounts, and earn a commission on every payment.

In the seller-led model, your marketplace creates payment links for connected sellers and earns a commission on each payment. The buyer pays the seller, and Mamo moves your commission from the seller's balance to yours.

PartyRole
MarketplaceYour business. Connects sellers, creates links for them, and earns a commission.
SellerA business with its own Mamo account. It owns the link and receives the payment.
BuyerPays the seller's link and sees the seller's name, not yours.

This is different from Split payments, where your business collects every payment and splits part of it to a recipient. There, you are the merchant of record and sellers don't need a Mamo account. Here, each seller is a Mamo merchant and owns its payments.

Before you start

  • Ask Mamo to enable the seller-led marketplace model on your account. Until then, every marketplace endpoint returns 403 FORBIDDEN_ACCESS. Sellers don't need it enabled.
  • Each seller needs a Mamo account. You connect to it with the login email of any of its users.
  • Use your own API key for every call. See Authentication.

How it works

  1. Request a connection with Request seller connection, sending the seller's login email. Mamo emails every admin on the seller's account a link to accept.
  2. Get the seller's identifier with List marketplace connections. Once a seller admin accepts, the connection is accepted and its seller.identifier (MER-...) is filled in.
  3. Create a link for the seller with Create marketplace payment link: the seller's identifier, your commission in payouts_share, and the usual payment link fields. Send the returned payment_url to the buyer.
  4. The buyer pays. The payment belongs to the seller's account, and Mamo takes its fee and VAT from the seller's balance as usual.
  5. Mamo moves your commission from the seller's balance to yours (see When the commission moves).

Steps 1 and 2 happen once per seller. Repeat step 3 for every link.

The calls below show the shape of each request. They aren't a script you can run as is: replace the email and seller_identifier with your seller's, and a seller admin has to accept the email between steps 1 and 2.

B=https://sandbox.dev.business.mamopay.com/manage_api/v1

# 1. Request a connection
curl -X POST "$B/marketplace_connections" \
  -H "Authorization: Bearer $MAMO_API_KEY" -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

# 2. After the seller accepts, get their identifier
curl "$B/marketplace_connections?status=accepted" \
  -H "Authorization: Bearer $MAMO_API_KEY"

# 3. Create a link for the seller with a 3% commission
curl -X POST "$B/marketplace/links" \
  -H "Authorization: Bearer $MAMO_API_KEY" -H "Content-Type: application/json" \
  -d '{
        "seller_identifier": "MER-F6A7B8C9D0",
        "title": "Consulting session",
        "amount": 500,
        "amount_currency": "AED",
        "payouts_share": { "percentage_to_recipient": 3 }
      }'

You can repeat step 1 for the same seller. It returns the same connection, and sends the email again while the connection is still pending. Each email has a new accept link, and only the newest one works: an older link sends the admin to the Mamo login page without accepting, and the connection stays pending.

Setting your commission

On a marketplace link, payouts_share holds your commission. You are always its recipient, so you don't send a recipient_id.

  • percentage_to_recipient (0 to 100): a percentage of the amount the buyer pays.
  • amount_to_recipient (greater than 0): a fixed amount per payment, in the link's currency. If the buyer pays in another currency, it is converted.
  • recipient_pays_fees: who carries Mamo's fee and VAT. Defaults to false.
  • release_date: the earliest day the commission moves to you. Optional.

Send at most one of percentage_to_recipient and amount_to_recipient. Leave out payouts_share for a link with no commission. The terms are fixed when you create the link: the seller can't change them with Update payment link.

Who pays Mamo's fee

Mamo always takes its fee and VAT from the seller's balance. recipient_pays_fees decides whether that cost stays with the seller or comes out of your commission.

  • false (default): you receive the full commission, and the seller carries Mamo's fee.
  • true: Mamo's fee and VAT are deducted from your commission, down to 0. If the fee and VAT are larger than your commission, you receive 0 and the seller pays the rest. For example, on an AED 100.00 payment with an AED 1.00 commission and AED 3.15 of fee and VAT, you receive 0 and the seller still pays AED 2.15.

For example, take an AED 500.00 payment, an AED 15.00 commission, and AED 10.50 of Mamo fee and VAT:

AEDrecipient_pays_fees: falserecipient_pays_fees: true
Buyer pays500.00500.00
Mamo fee and VAT, from the seller−10.50−10.50
Commission moved to you−15.00−4.50
Seller keeps474.50485.00
You receive15.004.50

When the commission moves

release_date on the linkWhen your commission moves
Not setWhen the payment is captured
On or before the payment's settlement date, or already passedWhen the payment is captured
Later than the payment's settlement dateIn the first hourly run on or after the release date

The commission shows in the seller's balance as a Marketplace commission debit and in yours as a Marketplace commission received credit, both referencing the payment. It moves once per payment.

A commission still waiting for its release date doesn't move if the payment is refunded or its funds are held before that day. A release date never delays the seller's own funds.

A refund doesn't reverse a commission that has already moved. If the seller refunds a payment after your commission moved (for example at capture, on a link with no release_date), the seller refunds the buyer in full and the commission stays with you. Settle it with the seller outside Mamo if you need to.

Things to know

  • The link and the payment belong to the seller. They appear on the seller's account, not yours, and the seller handles refunds and disputes for its payments.
  • Each link has one commission. A marketplace link can't also split the payment to one of your recipients.
  • Keep your own record of which link you created for which seller and order, for example with external_id.

Did this page help you?
// (the JavaScript box only runs on Enterprise; we are on Pro). Re-paste it after editing. (function () { var WORD = /\b(recipe)(s?)\b/gi; var SKIP = { CODE: 1, PRE: 1, SCRIPT: 1, STYLE: 1, TEXTAREA: 1, INPUT: 1 }; function relabel(match, word, plural) { var out = 'use case' + (plural ? 's' : ''); if (word === word.toUpperCase()) return out.toUpperCase(); return word[0] === 'R' ? 'U' + out.slice(1) : out; } function fix(root) { var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { acceptNode: function (node) { for (var el = node.parentElement; el; el = el.parentElement) { if (SKIP[el.tagName] || el.isContentEditable) return NodeFilter.FILTER_REJECT; } WORD.lastIndex = 0; return WORD.test(node.nodeValue) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT; }, }); var nodes = []; while (walker.nextNode()) nodes.push(walker.currentNode); nodes.forEach(function (node) { node.nodeValue = node.nodeValue.replace(WORD, relabel); }); WORD.lastIndex = 0; if (WORD.test(document.title)) document.title = document.title.replace(WORD, relabel); } function start() { fix(document.body); // ReadMe renders client-side; relabel whatever it adds or changes later. new MutationObserver(function (mutations) { mutations.forEach(function (m) { if (m.type === 'characterData') fix(m.target.parentNode || document.body); m.addedNodes.forEach(function (n) { if (n.nodeType === 1 || n.nodeType === 3) fix(n.nodeType === 1 ? n : n.parentNode || document.body); }); }); }).observe(document.body, { childList: true, subtree: true, characterData: true }); } if (document.body) start(); else document.addEventListener('DOMContentLoaded', start); })();