{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/alpaca/json-schema/alpaca-ipoevent-schema.json",
  "title": "IPOEvent",
  "description": "Represents an IPO offering lifecycle event delivered over the IPO events streaming API (`/v2/events/ipos`).\n\nIPO events come in six `verb` types:\n- **`Offering`** - initial publication of an offering. The `payload` carries `name`, `available_to_order`, `ticker_symbol`, `min_price`, `max_price` (and optional `source`).\n- **`OfferingUpdate`** - update to a previously published offering. The `payload` shape is identical to `Offering`.\n- **`Prospectus`** - prospectus document is now available. The `payload` carries `prospectus_url` and `subject`.\n- **`SixtyMinMail`** - 60-minute pricing window has opened, no new orders accepted. The `payload` carries `sixty_minute_expiration_time` and `subject`.\n- **`Allocation`** - final allocation result for a specific account. The `payload` carries `cusip_id`, `final_price`, `allocated_shares`, `allocated_amount`, `subject`. **This is the only verb that is account-scoped**: `account_id` and `correspondent` are populated.\n- **`OfferingCancellation`** - offering was cancelled. **No `payload` is present.**\n\nSee the example payloads below for a concrete example per verb.\n",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/alpaca-us-broker-api-openapi.yml#/components/schemas/IPOEvent",
  "properties": {
    "account_id": {
      "description": "The account this event applies to. Only populated for `Allocation` events; omitted for system-wide verbs (`Offering`, `OfferingUpdate`, `Prospectus`, `SixtyMinMail`, `OfferingCancellation`).\n",
      "format": "uuid",
      "type": "string"
    },
    "at": {
      "description": "Timestamp the event was emitted by the streaming service.",
      "format": "date-time",
      "type": "string"
    },
    "correspondent": {
      "description": "The correspondent that owns the account. Only populated for `Allocation` events.\n",
      "type": "string"
    },
    "event_id": {
      "description": "Lexically sortable, monotonically increasing identifier for this event. Use this value with `since_id`/`until_id` to resume the stream from a known point.",
      "format": "ulid",
      "type": "string"
    },
    "offering_reference": {
      "description": "The IPO offering this event refers to. Use this value with `GET /v1/ipos/{offering_reference}` to fetch the full offering metadata.\n",
      "type": "string"
    },
    "payload": {
      "description": "Verb-specific payload. The shape varies by `verb` - see schema description and `components/examples` for the structure of each. **Omitted entirely for `OfferingCancellation`.**\n",
      "type": "object"
    },
    "received_at": {
      "description": "Timestamp the upstream event was first received by Alpaca's IPO ingestion pipeline (before fanout).",
      "format": "date-time",
      "type": "string"
    },
    "verb": {
      "description": "The IPO event type. Determines the shape of `payload`.",
      "enum": [
        "Allocation",
        "Offering",
        "OfferingUpdate",
        "Prospectus",
        "SixtyMinMail",
        "OfferingCancellation"
      ],
      "type": "string"
    }
  },
  "required": [
    "event_id",
    "at",
    "verb",
    "offering_reference",
    "received_at"
  ],
  "type": "object"
}