Game ideas & features

Your next feature

Marketplace

Trade an original inventory item between two players.

SDK developRequires a player session
Godot
Illustration of Marketplace
Your visible result

The buyer receives the same item and the seller receives the agreed price minus the configured fee.

Video coming later

This step does not have a video yet. The guide and MCP request are ready to use.

Marketplace

Prepare the same project

  1. Choose the same project in the dashboard as in your game configuration.

    Marketplace →
  2. No additional definition is needed for the first request. An empty result is valid until matching game data exists.

    Set a currency, a fee and at least one active item price rule.

    Use two signed-in players in the same project. Configure the currency, fee and item price rule, then list one unequipped item and explicitly confirm its purchase.

    Items →Player values →

Build this feature

You can preview the guide. Running it requires an active project key. Prepare project

SDK installed, project configuration imported and player signed in.

This SDK example uses develop. Check whether the required APIs exist in your installed SDK.

Complete the Quickstart connection with the intended player. Call read_listing(listing_id) from an explicit button or scene action. Opening the file alone sends no request.

GDScript
res://scripts/marketplace.gd
horizOn call
1extends Node
2​
3const MarketStart = preload("res://addons/horizon_sdk/examples/features/marketplace_quickstart.gd")
4# Attach marketplace_example.gd to this screen, set its stable project_id,
5# and use the existing authenticated Horizon session for this project.
6@export var screen: Node
7​
8func read_listing(listing_id: String) -> Dictionary:
9 return await MarketStart.read_one_listing(screen, listing_id)
10​
11# Wire only to explicit Buy confirmation after displaying a successful read.
12func confirm_purchase(listing_id: String) -> Dictionary:
13 return await MarketStart.buy_reviewed_listing(screen, listing_id)
14​
15# Unknown outcome: await screen.retry_pending() or recover_original_operation().
16# Keep the original until Inventory, Values and Marketplace have refreshed.
17# Never delete a pending operation or unknown send-owner lock to buy again.
Open the complete SDK sample ↗

Try with two players

Use two signed-in players in the same project. Configure the currency, fee and item price rule, then list one unequipped item and explicitly confirm its purchase.

Use the existing signed-in session. After an uncertain purchase, keep and retry the same original request, then refresh inventory and balances.

Cancellation keeps the original item protected until its owner claims it. Recovery is available only when the previous owner was deleted.

Listings and replay protection are stored once in the project. Players retain references and limited status data.

Test your new feature.

The buyer receives the same item and the seller receives the agreed price minus the configured fee.

Choose the same project in the dashboard as in your game configuration.

Endpoints
  • GET/marketplace/limits
  • GET/marketplace/rules
  • GET/marketplace
  • GET/marketplace/listings
  • GET/marketplace/listings/{listingId}
  • POST/marketplace/listings
  • POST/marketplace/listings/{listingId}/buy
  • POST/marketplace/listings/{listingId}/cancel
  • GET/marketplace/operations/{operationId}
  • POST/marketplace/listings/{listingId}/retry-return
All endpoints in the API reference
Our suggestion for your next step

Give every round a high score.

Save the score after a round and show who's ahead. Keep using your connection and player session.