How it fits together
  1. Build the order from your server: one API call creates the cart (one line per item, each with its seller), the order that wraps it and a signed payment link.
  2. Send the buyer to the hosted page with the link you received, or with a link you sign yourself that carries the cart identifier.
  3. The page charges the whole cart once on your processing merchant and marks the cart as paid.
  4. We stamp every cart line with the transaction, the paid date and the fee snapshot, and the order moves to Paid. Your notification URL is called as usual.
  5. Sellers are settled from their lines, and refunds are recorded per line.

Before you start: your program must be set up as a marketplace on the Platform model with a processing merchant, your sellers must be linked to the program, and a cart with lines of several sellers needs the program's mixed-cart rule switched on. Your account manager does this for you.

Step 1 - Build the cart and the order

Call CreateMarketplaceOrder on the OMS.svc V2 service, logged in as your processing merchant (application token, credentials token and request signature as on every V2 call). The call creates the cart, the order and the payment link together and returns them.

Field Description Required
MerchantNumberYour processing merchant number. A merchant login may leave it empty.Optional
CustomerIdThe buyer's customer id when the buyer has a wallet with you.Optional
CurrencyIsoThe cart currency, 3 letters (example: EUR). Every line is charged in it.Yes
OrderNameThe name the buyer sees on the payment page and on the order.Yes
ReferenceYour own order reference, kept on the cart (50 characters).Optional
NotificationUrlWhere the payment result is posted. Leave it empty to use our order status endpoint, which also marks the lines paid; give your own URL to be notified directly.Optional
RedirectUrlWhere the buyer's browser goes after the payment.Optional
InstallmentsNumber of installments, 1 for a regular transaction.Optional
LinesOne entry per item (below). At least one.Yes
Each line
Field Description Required
SellerMerchantNumberThe merchant number of the seller of this line. Empty = your own line. The seller must be linked to your marketplace program.Optional
ProductIdA product from the seller's catalogue. The line takes the product's name and price.Optional
NameFree-form line name, when there is no ProductId (200 characters).Yes without ProductId
PriceUnit price in the cart currency, when there is no ProductId.Yes without ProductId
QuantityUnits, at least 1.Yes
VatPercentVAT rate of the line in percent (17 = 17%), printed on the page.Optional
Response
Field Description
IsSuccess, Code, MessageCode 0 = created. Other codes: 2 no lines, 3 currency missing, 4 order name missing, 6 merchant not found, 8 the merchant is not the processing merchant of a Platform marketplace, 9 seller rejected (not found or not in your program), 10 the product is not the seller's, 11 free-form line without a name, 13 lines of several sellers but the mixed-cart rule is off.
OrderIdThe order id (GUID). It is the trans_refNum of the payment and the key we match the payment on.
OrderNumberThe order's number in your order list.
CartIdentifierThe cart identifier (GUID): shop_cartId on the hosted page, CartId on a server-to-server charge.
Total, CurrencyIsoThe cart total. The payment must be for exactly this amount in this currency.
CheckoutUrlA hosted payment page link for the whole cart, already signed with your hash key. Valid as long as the order is open.
LineCountHow many lines were created.

Building the cart step by step instead: the Shop.svc SetCart operation accepts SellerMerchantNumber on every item and returns the cart cookie; GetCartByIdentifier reads the cart back with the seller, the paid date and the settlement of every line. You then wrap the cart in an order with CreateFullOrder and build the link yourself as in step 2.

Request example

POST https://webservices.coriunder.cloud/v2/OMS.svc/CreateMarketplaceOrder
{
  "request": {
    "CurrencyIso": "EUR",
    "OrderName": "Order 1001",
    "Reference": "1001",
    "RedirectUrl": "https://shop.example.com/thank-you/1001",
    "Installments": 1,
    "Lines": [
      { "SellerMerchantNumber": "7001234", "Name": "Blue mug", "Price": 12.50, "Quantity": 2, "VatPercent": 17 },
      { "SellerMerchantNumber": "7005678", "ProductId": 4411, "Quantity": 1 },
      { "Name": "Gift wrap", "Price": 3.00, "Quantity": 1 }
    ]
  }
}
Response
{
  "IsSuccess": true,
  "Code": 0,
  "Message": "OK",
  "OrderId": "3f2b7c1e-9a4d-4e2b-8c6f-1d2e3f4a5b6c",
  "OrderNumber": 5120,
  "CartIdentifier": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
  "CartId": 88341,
  "Total": 55.90,
  "CurrencyIso": "EUR",
  "CheckoutUrl": "https://uiservices.coriunder.cloud/Hosted/?merchantID=...&shop_cartId=a1b2c3d4-...&signature=...",
  "LineCount": 3
}

The third line has no seller: it is your own line and carries no marketplace commission.

Step 2 - Send the buyer to the hosted page

The simplest way is to redirect the buyer to CheckoutUrl as returned. If you build the link yourself (to add display fields, a template or the buyer's details), these are the fields that matter for a cart payment. Every other field of the SALE request is available as well.

Field Description Required
merchantIDYour processing merchant number.Yes
trans_amountExactly the cart Total. A different amount is charged but the lines are not marked paid and the order is left for review.Yes
trans_currencyThe cart CurrencyIso.Yes
trans_type0 = sale. Charge the full cart at checkout; funds for a seller are held in settlement until the line is settleable. A pre-authorisation is not suited to a multi-seller cart, because the capture is for the whole cart.Yes
trans_installments1 for a regular transaction.Yes
trans_refNumThe OrderId. This is how the payment is matched to the order.Yes
trans_orderThe OrderId again, for the order status notification.Yes
shop_cartIdThe CartIdentifier. The page loads the cart, checks that it belongs to your merchant and to the order, shows the lines and passes the cart to processing.Yes
ui_version11 for the Flow design, which prints the cart lines, quantities and VAT. Optional; other designs show the total only.Optional
disp_payForText shown to the buyer, usually the order name.Optional
notification_urlWhere the result is posted. The order's notification URL is the default.Optional
url_redirectWhere the buyer goes after the payment.Optional
signatureAll values in the order they appear in the request, then your hash key, SHA256, Base64, URL encoded. See Wrong Signature if the page rejects it.Yes

Code example

Build and sign the link
// values from the CreateMarketplaceOrder response
var orderId = order.OrderId, cartId = order.CartIdentifier;
var amount = order.Total.toFixed(2), currency = order.CurrencyIso;

var signature = CryptoJS.SHA256(MerchantNumber + amount + currency + 0 + 1 + orderId + orderId +
		cartId + 11 + payFor + notification_url + url_redirect + PersonalHashKey);
var hash = encodeURIComponent(signature.toString(CryptoJS.enc.Base64));

var src = "https://uiservices.coriunder.cloud/hosted/default.aspx?merchantID=" + MerchantNumber +
	"&trans_amount=" + amount + "&trans_currency=" + currency + "&trans_type=0" + "&trans_installments=1" +
	"&trans_refNum=" + orderId + "&trans_order=" + orderId + "&shop_cartId=" + cartId + "&ui_version=11" +
	"&disp_payFor=" + encodeURIComponent(payFor) + "&notification_url=" + encodeURIComponent(notification_url) +
	"&url_redirect=" + encodeURIComponent(url_redirect) + "&signature=" + hash;

Keep the field order of the link and of the signature the same. The values go into the signature as sent, before URL encoding.

Step 3 - After the payment

  • One transaction for the cart total is recorded on your processing merchant, and the cart is marked paid with it.
  • The order moves to Paid when the captured amount covers the order. The notification is posted to the order's notification URL with the usual result fields; trans_order carries the OrderId.
  • Every cart line is stamped with the transaction, the paid date, the marketplace commission on that line (the program default or the seller's own rate, taken at that moment) and the line's share of the processing fees. Lines of your own carry no commission. Read them back with GetCartByIdentifier: each item shows SellerMerchantNumber, PaidDate and, once paid out, SettlementId.
  • Sellers are settled from their lines on the schedule agreed for the marketplace. A line is settleable once paid, or once marked shipped when the program settles on fulfilment.
  • Refunds are recorded per cart line: the refund is a partial refund of the cart transaction for the lines and quantities chosen, and a line refunded after it was settled is taken back from the seller's next settlement.
  • Partial payments do not mark the lines. The lines are stamped only when the order is fully paid.

If the lines of a paid cart are not marked within half an hour, the charged amount or currency did not match the cart. Check the order and contact support.

Server to server instead of the page

If you collect the card yourself, or charge a stored card, send the same cart to the processing endpoint: call remote_charge.asp with your processing merchant (CompanyNum), the amount and currency of the cart, Order = the OrderId and CartId = the CartIdentifier. The cart is marked paid the same way, and the lines are stamped by our sweep within half an hour even when no order notification is sent.

Wallet buyers signed in to your app pay the cart through the Transactions.svc Process operation with the cart cookie from SetCart.