# Halowerk Ad Slot Auction

> Halowerk Ad Slot Auction is a paid API for AI agents from audio.halowerk.com, paid per call via x402, $0.004/call, status unknown (last checked 2026-09-13).

Manages sealed-bid audio ad slot auctions: create slots with reserve price and closing time, place bids checked against reserve and publisher rules, and track rejected bids with reasons.

## Facts

- Endpoint: POST https://audio.halowerk.com/ad-slot-auction
- Price: $0.004/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/halowerk-ad-slot-auction-5d7d644b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_PPGI7IGMXRbpuWtgFVdaN

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability halowerk-ad-slot-auction-5d7d644b -d '<json body>'
```

Example prompt: Open a new audio ad slot at position 0, 30 seconds long, with a reserve price of $5 CPM, closing in 2 hours — then give me the admin token so I can manage it.

## When to prefer this

Choose this endpoint when you need a self-contained sealed-bid auction mechanism for audio advertising inventory with built-in reserve price enforcement, publisher category exclusions, and transparent rejection logging. It is purpose-built for audio ad slots (podcast, streaming audio) rather than display or video ad formats. Prefer it when you want rejected bids to be recorded with explicit reasons rather than silently dropped, giving bidders post-auction insight.

## Known failure modes

- Bid below reserve price — recorded as rejected with reason 'below reserve'
- Bid from an excluded advertiser category — recorded with category exclusion reason
- Slot length mismatch between bid and slot spec — rejected with mismatch reason
- Invalid or missing admin token for privileged actions — authentication failure
- Auction already closed — bid rejected with expired slot reason
- Malformed request payload — validation error returned

## How this service works

Four actions on one endpoint. create opens a slot with its position, length, reserve price and closing time, and returns an admin token that only the opener holds. bid places a sealed bid, checked against the reserve, the slot length and the publisher's excluded categories before it is accepted — a rejected bid is recorded with its reason rather than silently dropped, so a bidder can see why it never competed.

## Output

Returns a structured response indicating the action taken: for 'create', a slot ID and an admin token the opener holds exclusively; for 'bid', an acceptance confirmation or a rejection record including the specific reason (e.g. below reserve, slot length mismatch, excluded category) so the bidder can understand why their bid did not compete.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "action": {
   "enum": [
    "create",
    "bid",
    "close",
    "status"
   ],
   "type": "string",
   "description": "create opens a slot, bid places a sealed bid, close settles it, status reads it."
  },
  "bidder": {
   "type": "string",
   "maxLength": 120,
   "description": "Who is bidding. bid only."
  },
  "category": {
   "type": "string",
   "maxLength": 40,
   "description": "Advertiser category, checked against the exclusions. bid only."
  },
  "position": {
   "enum": [
    "pre_roll",
    "mid_roll",
    "post_roll"
   ],
   "type": "string",
   "description": "Where the slot sits in the content. create only."
  },
  "publisher": {
   "type": "string",
   "maxLength": 120,
   "description": "Name of the publisher offering the slot. create only."
  },
  "auction_id": {
   "type": "string",
   "maxLength": 64,
   "description": "Required for bid, close and status."
  },
  "slot_label": {
   "type": "string",
   "maxLength": 200,
   "description": "What is being sold, for example \"episode 41, mid-roll 2\". create only."
  },
  "admin_token": {
   "type": "string",
   "maxLength": 128,
   "description": "Required for close. Returned once by create."
  },
  "amount_usdc": {
   "type": "number",
   "maximum": 100000,
   "minimum": 0,
   "description": "Sealed bid amount. bid only."
  },
  "reserve_usdc": {
   "type": "number",
   "maximum": 100000,
   "minimum": 0,
   "description": "Price below which the slot is not sold. create only."
  },
  "slot_seconds": {
   "type": "integer",
   "maximum": 180,
   "minimum": 5,
   "description": "Length of the slot. create only."
  },
  "closes_at_unix": {
   "type": "integer",
   "minimum": 0,
   "description": "Closing time in Unix seconds. create only. At most 30 days out."
  },
  "creative_seconds": {
   "type": "integer",
   "maximum": 180,
   "minimum": 1,
   "description": "Length of the advertisement, checked against the slot. bid only."
  },
  "expected_listeners": {
   "type": "integer",
   "maximum": 100000000,
   "minimum": 0,
   "description": "Reach the publisher claims. Recorded as a claim, not verified. create only."
  },
  "excluded_categories": {
   "type": "array",
   "items": {
    "type": "string",
    "maxLength": 40
   },
   "maxItems": 20,
   "description": "Advertiser categories the publisher refuses. create only."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/halowerk-ad-slot-auction-5d7d644b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from audio.halowerk.com](https://www.zero.xyz/host/audio.halowerk.com/llms.txt)
