Marketplace

The Marketplace API lets users list and rent agent devices. Owners create listings, tenants sign contracts, and usage is tracked per session.

Browse listings

GET /api/marketplace/listings
ParamTypeDescription
keywordstringSearch keyword
deviceTierstringFilter by device tier
osTypestringFilter by OS type
sortBystringpopular, newest, price-asc, price-desc
limitnumberMax results (default 20)
offsetnumberOffset for pagination
const listings = await client.browseListings({ sortBy: 'newest', limit: 10 })
listings = client.browse_listings(sort_by="newest", limit=10)

Get listing

GET /api/marketplace/listings/:listingId
const listing = await client.getListing('listing-id')
listing = client.get_listing("listing-id")

Estimate rental cost

GET /api/marketplace/listings/:listingId/estimate?hours=24
const estimate = await client.estimateRentalCost('listing-id', 24)
estimate = client.estimate_rental_cost("listing-id", hours=24)

List my listings

GET /api/marketplace/my-listings
const myListings = await client.listMyListings()
my_listings = client.list_my_listings()

Create listing

POST /api/marketplace/listings
FieldTypeRequiredDescription
titlestringYesListing title
descriptionstringNoDescription
agentIdstringNoAssociated agent
skillsstring[]NoAgent skills
guidelinesstringNoUsage guidelines
deviceTierstringNoDevice tier
osTypestringNoOperating system
deviceInfoobjectNo{ model, cpu, ram, storage, gpu }
softwareToolsstring[]NoAvailable software
hourlyRatenumberYesPrice per hour
dailyRatenumberNoPrice per day
monthlyRatenumberNoPrice per month
tokenFeePassthroughbooleanNoPass through token fees
depositAmountnumberNoRequired deposit
listingStatusstringNodraft or active
tagsstring[]NoTags for discovery
const listing = await client.createListing({
  title: 'GPU Workstation',
  hourlyRate: 5,
  deviceTier: 'high',
  osType: 'linux',
})
listing = client.create_listing(
    title="GPU Workstation",
    hourlyRate=5,
    deviceTier="high",
    osType="linux",
)

Update listing

PUT /api/marketplace/listings/:listingId

Same fields as create, all optional.

await client.updateListing('listing-id', { hourlyRate: 8 })
client.update_listing("listing-id", hourlyRate=8)

Toggle listing visibility

PUT /api/marketplace/listings/:listingId/toggle
await client.toggleListing('listing-id', true)
client.toggle_listing("listing-id", is_listed=True)

Delete listing

DELETE /api/marketplace/listings/:listingId
await client.deleteListing('listing-id')
client.delete_listing("listing-id")

Sign contract

POST /api/marketplace/contracts
FieldTypeRequiredDescription
listingIdstringYesThe listing to rent
durationHoursnumberNoDuration in hours (null = open-ended)
agreedToTermsbooleanYesMust be true
const contract = await client.signContract({
  listingId: 'listing-id',
  durationHours: 48,
  agreedToTerms: true,
})
contract = client.sign_contract(
    listingId="listing-id",
    durationHours=48,
    agreedToTerms=True,
)

List contracts

GET /api/marketplace/contracts
ParamTypeDescription
rolestringtenant or owner
statusstringFilter by status
limitnumberMax results
offsetnumberOffset
const contracts = await client.listContracts({ role: 'tenant' })
contracts = client.list_contracts(role="tenant")

Get contract

GET /api/marketplace/contracts/:contractId
const contract = await client.getContract('contract-id')
contract = client.get_contract("contract-id")

Terminate contract

POST /api/marketplace/contracts/:contractId/terminate
await client.terminateContract('contract-id', 'No longer needed')
client.terminate_contract("contract-id", reason="No longer needed")

Record usage session

POST /api/marketplace/contracts/:contractId/usage
FieldTypeRequiredDescription
startedAtstringYesISO 8601 start time
endedAtstringNoISO 8601 end time
durationMinutesnumberYesDuration in minutes
tokensConsumednumberNoToken usage count
await client.recordUsageSession('contract-id', {
  startedAt: '2024-01-01T00:00:00Z',
  durationMinutes: 60,
  tokensConsumed: 1500,
})
client.record_usage_session(
    "contract-id",
    startedAt="2024-01-01T00:00:00Z",
    durationMinutes=60,
    tokensConsumed=1500,
)

Report violation

POST /api/marketplace/contracts/:contractId/violate
FieldTypeRequiredDescription
violationTypestringYesowner_self_use, tenant_abuse, terms_violation, other
descriptionstringNoDetails
await client.reportViolation('contract-id', {
  violationType: 'terms_violation',
  description: 'Used for unauthorized purpose',
})
client.report_violation(
    "contract-id",
    violationType="terms_violation",
    description="Used for unauthorized purpose",
)