Skip to main content

Conditional Bidding

Overview

Create standing orders that automatically bid on auctions matching your criteria. No need to respond to individual bid requests — define your strategy once and bids are applied 24/7.

Checkout Exchanges

See Checkout Exchanges for supported platforms and the getSupportedCheckoutExchanges query.

Creating Conditional Bids

Mutation

mutation CreateConditionalBid($input: CreateConditionalBidInput!) {
createConditionalBid(input: $input) {
conditionalBid {
id
externalReferenceId
recipientAddressId
paymentTokenId
paymentRail
assetType
bidAmountCents
allInPriceCents
status
isActive
currentFilledQuantity
maxFilledQuantity
keyIds
checkoutExchanges
expiresAt
createdAt
}
error {
message
code
}
}
}

Input Fields

FieldTypeRequiredDescription
assetTypeAssetTypeEnumYesType of asset — see Asset Types for supported values
bidAmountCentsIntConditionalPer-unit bid amount in cents. Required if allInPriceCents is not provided
allInPriceCentsIntConditionalTotal price including platform + processing fees. The system derives bidAmountCents automatically. Required if bidAmountCents is not provided
conditionsJSONYesMatching criteria (see Condition Structure)
maxFilledQuantityIntNoMax total quantity to acquire (default: unlimited)
minQuantityPerCheckoutIntNoMin quantity per match (default: any)
externalReferenceIdStringNoYour reference ID for tracking
recipientAddressIdIDNoSaved address for shipping purchases from this bid (see Address Management)
paymentTokenIdIDNoSaved payment method to charge when this bid wins (overrides account default)
paymentRailPaymentRailNoHow to charge the payment token: CARD, ACH, WIRE (require paymentTokenId), or TRADEPOST_BALANCE, CRYPTO (wallet-based, no token needed)
checkoutExchanges[String!]NoPlatforms where bid can execute (default: ["TRADEPOST"])
expiresAtDateTimeNoWhen the bid expires

Pricing: bidAmountCents vs allInPriceCents

Provide exactly one:

  • bidAmountCents — the per-unit bid amount you want to offer the seller. Fees are added on top at checkout.
  • allInPriceCents — the total amount you're willing to pay per unit, including platform fees and payment processing fees. The system automatically derives bidAmountCents by subtracting fees.

When using allInPriceCents, the derived bidAmountCents depends on your account's fee configuration and payment method. If your fee configuration changes, bids created with allInPriceCents are automatically recalculated.

Full Example (Ticket)

{
"query": "mutation CreateConditionalBid($input: CreateConditionalBidInput!) { createConditionalBid(input: $input) { conditionalBid { id externalReferenceId status isActive } error { message code } } }",
"variables": {
"input": {
"assetType": "TICKET",
"bidAmountCents": 15000,
"externalReferenceId": "partner-cb-002",
"maxFilledQuantity": 20,
"checkoutExchanges": ["TRADEPOST"],
"expiresAt": "2025-12-31T23:59:59Z",
"conditions": [
{
"mappingData": {
"externalIdentifiers": {
"SEATGEEK": "6234567",
"TICKETMASTER": "vvG1YZ4bJalaRJ"
}
},
"filterData": {
"sections": ["Floor A", "Floor B", "Floor C"],
"rows": ["1", "2", "3", "4", "5"],
"isParking": false
}
}
]
}
}
}

Full Example (Sealed TCG)

{
"query": "mutation CreateConditionalBid($input: CreateConditionalBidInput!) { createConditionalBid(input: $input) { conditionalBid { id externalReferenceId status isActive } error { message code } } }",
"variables": {
"input": {
"assetType": "SEALED_TCG",
"bidAmountCents": 8500,
"externalReferenceId": "partner-tcg-001",
"maxFilledQuantity": 50,
"checkoutExchanges": ["TRADEPOST"],
"conditions": [
{
"mappingData": {
"externalIdentifiers": {
"TCGPLAYER": "593355"
}
},
"filterData": {
"conditions": ["UNOPENED"]
}
}
]
}
}
}

Condition Structure

Each condition has two parts: mappingData (what asset to target) and filterData (criteria for matching). Both vary by asset type.

mappingData

Identify the target asset using exactly one (mutually exclusive):

externalIdentifiers — platform IDs:

{
"mappingData": {
"externalIdentifiers": {
"SEATGEEK": "6234567"
}
}
}
{
"mappingData": {
"externalIdentifiers": {
"TCGPLAYER": "593355"
}
}
}

internalIdentifiers — Tradepost asset config ID:

{
"mappingData": {
"internalIdentifiers": {
"assetConfigId": "550e8400-e29b-41d4-a716-446655440000"
}
}
}

filterData (Tickets)

FieldTypeDescription
sections[String]Acceptable section names. Omit to accept any section. Case-insensitive, spacing matters ("102A""102 A")
rows[String]Acceptable row identifiers. Omit to accept any row
isParkingBooleanMatch parking tickets (default: false)

Section/row names vary across platforms. Include variations to maximize matches (e.g., ["102", "Section 102", "SEC 102"]).

filterData (Sealed TCG)

FieldTypeDescription
conditions[String]Acceptable product conditions: UNOPENED, OPENED, DAMAGED. Omit to accept any condition

ConditionalBid Type

Returned by all create, update, cancel, delete, and query operations.

FieldTypeDescription
idID!Unique identifier
accountIdID!Account that owns this bid
externalReferenceIdStringYour reference ID
recipientAddressIdIDSaved address for shipping purchases from this bid (see Address Management)
paymentTokenIdIDSaved payment method to charge when this bid wins (overrides account default)
paymentRailPaymentRailHow to charge: CARD, ACH, WIRE (require token), or TRADEPOST_BALANCE, CRYPTO (wallet, no token)
assetTypeAssetTypeEnum!Asset type — see Asset Types for supported values
bidAmountCentsInt!Per-unit bid amount in cents (derived automatically when allInPriceCents is used)
allInPriceCentsIntTotal price including platform + processing fees (null if bid was created with bidAmountCents directly)
conditionsJSON!Matching criteria (see Condition Structure)
maxFilledQuantityIntMax quantity to acquire
currentFilledQuantityInt!Items already acquired
minQuantityPerCheckoutIntMin quantity per match
statusConditionalBidStatus!Current status
isActiveBoolean!Whether bid is actively matching
keyIds[ID!]Resolved key IDs (populated after creation from filterData)
checkoutExchanges[String!]!Platforms where purchases execute
expiresAtDateTimeExpiration (null = never)
createdAtDateTime!Created timestamp
updatedAtDateTime!Last modified timestamp
pausedAtDateTimeWhen the bid was paused (null if never paused or resumed)
deletedAtDateTimeWhen the bid was soft-deleted (null if not deleted)

Querying Bids

List Bids

query GetMyConditionalBids($input: GetConditionalBidsInput!) {
getConditionalBids(input: $input) {
conditionalBids {
id
externalReferenceId
recipientAddressId
paymentTokenId
paymentRail
assetType
bidAmountCents
allInPriceCents
status
isActive
currentFilledQuantity
maxFilledQuantity
checkoutExchanges
conditions
createdAt
updatedAt
}
pagination {
totalCount
hasNextPage
}
error {
message
code
}
}
}

Get Single Bid

query GetConditionalBid($input: GetConditionalBidInput!) {
getConditionalBid(input: $input) {
conditionalBid {
id
externalReferenceId
recipientAddressId
paymentTokenId
paymentRail
assetType
bidAmountCents
allInPriceCents
status
isActive
checkoutExchanges
conditions
}
error {
message
code
}
}
}

Lookup by either conditionalBidId or externalReferenceId:

{
"input": {
"externalReferenceId": "partner-cb-001"
}
}

Filter Options

FilterTypeDescription
assetTypeAssetTypeEnumFilter by single asset type
assetTypes[AssetTypeEnum!]Filter by multiple asset types
statusConditionalBidStatusFilter by single status (deprecated — use statuses)
statuses[ConditionalBidStatus!]Filter by statuses
isActiveBooleanActive/inactive bids only
ids[ID!]Filter by conditional bid IDs
externalReferenceIds[String!]Filter by your reference IDs
externalIdentifiersJSONFilter by external identifiers in conditions (single value or list per exchange)
recipientAddressIdIDBids assigned to a specific saved address
paymentTokenIdIDBids assigned to a specific payment token
paymentRailPaymentRailFilter by payment rail (CARD, ACH, WIRE, TRADEPOST_BALANCE, CRYPTO)
checkoutExchanges[String!]Bids that include ANY of these exchanges
minBidAmountCentsIntAmount greater than or equal to this value
maxBidAmountCentsIntAmount less than or equal to this value
createdAfterDateTimeCreated after timestamp
createdBeforeDateTimeCreated before timestamp
expiresAfterDateTimeExpires after timestamp
expiresBeforeDateTimeExpires before timestamp
hasRemainingCapacityBooleanOnly bids that can still be filled
includeExpiredBooleanInclude expired bids (default: false)
includeDeletedBooleanInclude soft-deleted bids (default: false)
paginationSimplePaginationInputLimit and offset

Sorting

FieldTypeDefaultDescription
sortByConditionalBidSortByCREATED_ATCREATED_AT, UPDATED_AT, BID_AMOUNT_CENTS, MAX_FILLED_QUANTITY, CURRENT_FILLED_QUANTITY, EXPIRES_AT
sortDirectionSortDirectionDESCASC or DESC

Filter by External Identifiers

Single identifier:

{
"input": {
"externalIdentifiers": {
"TICKETMASTER": "vvG1YZ4bJalaRJ"
}
}
}
{
"input": {
"externalIdentifiers": {
"TCGPLAYER": "593355"
}
}
}

Multiple identifiers:

{
"input": {
"externalIdentifiers": {
"TICKETMASTER": ["event-123", "event-456"]
}
}
}

Updating Bids

mutation UpdateConditionalBid($input: UpdateConditionalBidInput!) {
updateConditionalBid(input: $input) {
conditionalBid {
id
recipientAddressId
paymentTokenId
paymentRail
bidAmountCents
allInPriceCents
isActive
checkoutExchanges
}
error {
message
code
}
}
}

Identify by conditionalBidId or externalReferenceId. Updatable fields: bidAmountCents, allInPriceCents, conditions, maxFilledQuantity, minQuantityPerCheckout, recipientAddressId, paymentTokenId, paymentRail, isActive, checkoutExchanges, expiresAt.

{
"input": {
"externalReferenceId": "partner-cb-001",
"bidAmountCents": 17500,
"isActive": true
}
}

Cancelling Bids

mutation CancelConditionalBid($input: CancelConditionalBidInput!) {
cancelConditionalBid(input: $input) {
conditionalBid {
id
status
}
error {
message
code
}
}
}

Identify by conditionalBidId or externalReferenceId.

Deleting Bids

Soft-deletes a conditional bid. The bid is marked as DELETED and excluded from all queries by default. A scheduled cleanup job permanently removes soft-deleted bids after a retention period.

mutation DeleteConditionalBid($input: DeleteConditionalBidInput!) {
deleteConditionalBid(input: $input) {
conditionalBid {
id
status
deletedAt
}
error {
message
code
}
}
}

Identify by conditionalBidId or externalReferenceId.

Key behaviors:

  • Idempotent — deleting an already-deleted bid returns success without error
  • Irreversible — deleted bids cannot be updated, cancelled, or un-deleted
  • Invisible — deleted bids are excluded from list queries unless includeDeleted: true is set
  • Visible by ID — you can still look up a deleted bid by conditionalBidId or externalReferenceId to confirm it's gone
  • External reference preserved — the externalReferenceId is NOT freed after deletion; you cannot reuse it for a new bid
  • Webhook — a CONDITIONAL_BID_STATUS_CHANGE webhook is sent with new_status: "DELETED"

Bulk Operations

Bulk Create

Each bid in the array accepts the same fields as CreateConditionalBidInput (including recipientAddressId, paymentTokenId, and paymentRail).

mutation BulkCreateBids($input: BulkCreateConditionalBidsInput!) {
bulkCreateConditionalBids(input: $input) {
results {
conditionalBid {
id
externalReferenceId
checkoutExchanges
}
error {
message
code
}
}
successCount
errorCount
totalCount
}
}

Bulk Update

Each bid in the array accepts the same fields as UpdateConditionalBidInput (including recipientAddressId, paymentTokenId, and paymentRail).

mutation BulkUpdateBids($input: BulkUpdateConditionalBidsInput!) {
bulkUpdateConditionalBids(input: $input) {
results {
conditionalBid {
id
bidAmountCents
allInPriceCents
isActive
checkoutExchanges
}
error {
message
code
}
externalReferenceId
}
successCount
errorCount
totalCount
}
}
{
"input": {
"conditionalBids": [
{
"externalReferenceId": "partner-cb-001",
"bidAmountCents": 20000
},
{
"conditionalBidId": "550e8400-e29b-41d4-a716-446655440000",
"isActive": false
}
]
}
}

Bulk Cancel

mutation BulkCancelBids($input: BulkCancelConditionalBidsInput!) {
bulkCancelConditionalBids(input: $input) {
results {
conditionalBid {
id
status
}
error {
message
code
}
externalReferenceId
}
successCount
errorCount
totalCount
}
}

Supports two modes (can be combined):

By specific bids:

{
"input": {
"conditionalBids": [
{ "externalReferenceId": "partner-cb-001" },
{ "conditionalBidId": "550e8400-e29b-41d4-a716-446655440000" }
]
}
}

By external identifiers (cancels ALL matching bids):

{
"input": {
"externalIdentifiers": {
"TICKETMASTER": ["event-123", "event-456", "event-789"]
}
}
}
{
"input": {
"externalIdentifiers": {
"TCGPLAYER": ["593355", "285229"]
}
}
}
FieldTypeDescription
conditionalBids[CancelConditionalBidInput!]Cancel specific bids by ID or externalReferenceId
externalIdentifiersJSONCancel ALL bids matching these identifiers. Supports single value or list per exchange

At least one of conditionalBids or externalIdentifiers must be provided.

Bulk Delete

Soft-deletes multiple bids. Supports the same two modes as bulk cancel.

mutation BulkDeleteBids($input: BulkDeleteConditionalBidsInput!) {
bulkDeleteConditionalBids(input: $input) {
results {
conditionalBid {
id
status
deletedAt
}
error {
message
code
}
}
successCount
errorCount
totalCount
}
}

By specific bids:

{
"input": {
"conditionalBids": [
{ "externalReferenceId": "partner-cb-001" },
{ "conditionalBidId": "550e8400-e29b-41d4-a716-446655440000" }
]
}
}

By external identifiers (deletes ALL matching bids):

{
"input": {
"externalIdentifiers": {
"TICKETMASTER": ["event-123", "event-456"]
}
}
}
FieldTypeDescription
conditionalBids[DeleteConditionalBidInput!]Delete specific bids by ID or externalReferenceId
externalIdentifiersJSONDelete ALL bids matching these identifiers. Supports single value or list per exchange

At least one of conditionalBids or externalIdentifiers must be provided.

Pause All

mutation PauseAllBids($input: PauseAllConditionalBidsInput!) {
pauseAllConditionalBids(input: $input) {
pausedCount
error {
message
code
}
}
}

Requires confirm: true.

Status Values

StatusDescription
NOT_FILLEDActive, no matches yet
PARTIALLY_FILLEDSome quantity filled
FILLEDMax quantity reached
CANCELLEDManually cancelled
EXPIREDPast expiration date
ON_HOLDUnder risk review
DELETEDSoft-deleted, excluded from queries by default

Webhook Notifications

CONDITIONAL_BID_APPLIED

Sent when a conditional bid is applied to an auction:

{
"msg_type": "CONDITIONAL_BID_APPLIED",
"msg_id": "770e8400-e29b-41d4-a716-446655440002",
"sent_at": 1736616000,
"source_id": "tradepost_auction_service",
"destination_id": "partner_acme",
"payload": {
"conversation_id": "conv_123",
"external_reference_id": "partner-cb-001",
"ico_id": "ico_456",
"ico_item_id": "icoi_789",
"reference_type": "INSTANT_CASH_OFFER",
"reference_id": "ico_456",
"bid_amount_cents": 15000,
"applied_at": 1736616000,
"asset_type": "TICKET | SEALED_TCG",
"external_ids": { ... },
"asset_details": { ... },
"config_details": { ... },
"item_details": { ... }
}
}

CONDITIONAL_BID_STATUS_CHANGE

Sent when a conditional bid status changes:

{
"msg_type": "CONDITIONAL_BID_STATUS_CHANGE",
"msg_id": "770e8400-e29b-41d4-a716-446655440003",
"sent_at": 1736616000,
"source_id": "tradepost_auction_service",
"destination_id": "partner_acme",
"payload": {
"conditional_bid_id": "550e8400-e29b-41d4-a716-446655440000",
"external_reference_id": "partner-cb-001",
"old_status": "NOT_FILLED",
"new_status": "ON_HOLD",
"reason": "Aggregate risk $7,500.00 exceeds threshold",
"external_identifiers": {
"TICKETMASTER": "vvG1YZ4bJalaRJ"
},
"status_changed_at": 1736616000
}
}

Common Status Transitions:

  • NOT_FILLEDON_HOLD (risk review triggered)
  • ON_HOLDNOT_FILLED (mapping verified, bid resumed)
  • ON_HOLDCANCELLED (mapping rejected)
  • NOT_FILLED/PARTIALLY_FILLEDEXPIRED (bid reached expires_at deadline)
  • Any status → DELETED (bid soft-deleted via deleteConditionalBid)
  • DELETED is a terminal state — deleted bids cannot be updated, cancelled, or un-deleted

CONDITIONAL_BID_EXPIRING_SOON

Advisory notification sent when a conditional bid is approaching its expiration deadline. The bid remains active — this is an advance warning.

{
"msg_type": "CONDITIONAL_BID_EXPIRING_SOON",
"msg_id": "880e8400-e29b-41d4-a716-446655440010",
"sent_at": 1736616000,
"source_id": "tradepost_auction_service",
"destination_id": "partner_acme",
"payload": {
"conditional_bid_id": "550e8400-e29b-41d4-a716-446655440000",
"external_reference_id": "partner-cb-001",
"current_status": "NOT_FILLED",
"expires_at": 1736619600,
"seconds_remaining": 3600
}
}

Sent once per expiration deadline (default: 1 hour before). If you extend expires_at, a new notification is sent as the updated deadline approaches. Use this to renew the bid or adjust your strategy.

Error Codes

CodeDescription
NOT_FOUNDBid not found — check your reference ID
ACCESS_DENIEDNot authorized to access this bid
DUPLICATE_REFERENCEExternal reference ID already exists — must be unique
VALIDATION_ERRORInvalid input data
MAPPING_CONFLICTExternal identifiers map to different assets
PAYMENT_TOKEN_NOT_FOUNDPayment token not found or doesn't belong to your account
INVALID_PAYMENT_RAILPayment rail is incompatible with the token type (e.g., CARD rail on a bank account token) or violates constraints (e.g., token-based rail without a token, wallet rail with a token)
BUYER_CONFIGURATION_NOT_FOUNDNo buyer configuration found — required when using allInPriceCents
REJECTED_ASSET_MAPPINGAsset mapping was previously rejected — verify event IDs or contact support
BID_DELETEDCannot update or cancel a deleted bid — the bid has been soft-deleted

Support


← Webhooks | GraphQL API →

© 2026 Tradepost Markets Inc. All rights reserved.