# Auctions

**URL:** https://heroiclabs.com/docs/hiro/cpp/auctions/
**Keywords:** auctions, hiro
**Categories:** hiro, cpp, auctions

---


# Auctions

Read more about the Auctions system in Hiro [here](../../concepts/auctions/).

## Creating a New Auction

To create a new auction, use the `auctionsCreate` function.

```cpp
void onAuctionCreate(const Hiro::Auction& auction)
{
    for (auto it = auction.reward.items.begin(); it != auction.reward.items.end(); it++)
    {
        std::cout << "Found codex item: " << it->second.name << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::AuctionCreateRequest request;
request.templateId = "template_auction_001";
request.conditionId = "condition_001";
request.instanceIds.insert(std::make_pair<std::string, std::string>("item_instance_001", "1"));

hiroClient->auctionsCreate(session, request, onAuctionCreate, onError);
```

## Placing a Bid on an Auction

You can place a bid on an auction using the `auctionsBid` function.

```cpp
void OnAuctionsBid(const Hiro::Auction& auction)
{
    for (auto it = auction.reward.items.begin(); it != auction.reward.items.end(); it++)
    {
        std::cout << "Found codex item: " << it->second.name << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::AuctionBidRequest request;
request.id = "auction_instance_123";
request.version = "condition_001";
request.bid.currencies.insert(std::make_pair<std::string, std::string>("gold", "1000"));

hiroClient->auctionsBid(session, request, OnAuctionsBid, onError);
```

## Canceling an Auction

If an auction needs to be canceled before it ends, the `auctionsCancel` method can be used.

```cpp
void OnAuctionsCancel(const Hiro::AuctionCancel& auctionCancel)
{
    for (auto it = auctionCancel.reward.items.begin(); it != auctionCancel.reward.items.end(); it++)
    {
        std::cout << "Found codex item: " << it->second.name << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::AuctionsCancelRequest request;
request.id = "auction_instance_123";

hiroClient->auctionsCancel(session, request, OnAuctionsBid, onError);
```

## Claiming a Winning Bid

Once an auction has ended, the winning bidder can claim their item using `auctionsClaimBid`.

```cpp
void OnAuctionsClaimBid(const Hiro::AuctionClaimBid& auctionClaimBid)
{
    for (auto it = auctionClaimBid.reward.items.begin(); it != auctionClaimBid.reward.items.end(); it++)
    {
        std::cout << "Found codex item: " << it->second.name << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::AuctionClaimBidRequest request;
request.id = "auction_instance_123";

hiroClient->auctionsClaimBid(session, request, OnAuctionsBid, onError);
```

## Listing Available Auctions

You can list the currently available auctions using the `auctionsList` function.

```cpp
void OnAuctionsList(const Hiro::AuctionList& auctionList)
{
    for (auto it = auctions.begin(); it != auctions.end(); it++)
    {
        std::cout << "Auction found: " << it->second.id << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::AuctionListRequest request;

hiroClient->auctionsList(session, request, OnAuctionsBid, onError);
```
