> ## Documentation Index
> Fetch the complete documentation index at: https://docs.droyd.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Investor Portal API

> Read Droyd's public investor events, initiatives, roadmap, updates, asks, and X metrics.

The investor portal exposes a small public JSON surface for Droyd progress
updates. Read routes do not require authentication. The preferred base URL is
`https://investors.droyd.ai/api/v1`.

```bash theme={null}
curl -sS "https://investors.droyd.ai/api/v1/events?limit=20"
```

Available routes:

* `GET /api/v1/events`: unified event feed;
* `GET /api/v1/feed`: alias for the unified event feed, intended for the
  investor Codex skill;
* `GET /api/v1/initiatives`: strategy and product-area initiatives with
  project rollups;
* `GET /api/v1/initiatives/{slug}`: one initiative and its nested roadmap
  items;
* `GET /api/v1/roadmap`: roadmap items with checklist progress;
* `GET /api/v1/roadmap/{slug}`: one item, its checklist, and its linked
  update timeline;
* `GET /api/v1/status`: short status updates;
* `GET /api/v1/updates`: longer investor updates;
* `GET /api/v1/asks`: active and historical investor asks, including an
  optional linked resource;
* `GET /api/v1/asks/{slug}`: ask details, including introduction targets
  and the connector leaderboard;
* `GET /api/v1/x`: ordered company and founder X analytics with daily
  history, a latest-30-day total, and the change from the preceding 30 days.

List routes accept `limit` from 1 to 100 and an optional `before` timestamp.
The event route also accepts comma-separated event types, including
`roadmap_item_update`.

```bash theme={null}
curl -sS \
  "https://investors.droyd.ai/api/v1/events?type=roadmap_item_update&limit=10"
```

Responses use the normal Droyd envelope: successful payloads include
`"ok": true`; errors include `"ok": false` and an `error` object.

The investor-domain facade is intentionally anonymous and GET-only. `GET /feed` and `GET /events` are the same contract. Do not attach a Droyd API key or private contact information to these reads. List and static-detail responses use `Cache-Control: public, max-age=30, stale-while-revalidate=300` and a best-effort 60-second shared cache. `GET /api/v1/asks/{slug}` instead uses `Cache-Control: no-store` because introduction details include mutable warm-connection and leaderboard state. Accepted event types are `status_update`, `investor_letter`, `investor_ask`, `roadmap_item_added`, and `roadmap_item_update`. Initiatives are a browse surface and do not emit feed events. Initiative statuses are `proposed`, `planned`, `active`, and `completed`. Priorities are `none`, `low`, `medium`, `high`, and `urgent`. `GET /api/v1/initiatives/{slug}` embeds child roadmap items in list shape; load `GET /api/v1/roadmap/{slug}` when checklist rows and the complete linked timeline are needed. `roadmap_item_update` events include both `status_update_id` and `roadmap_item_id`. Optional `video_embed_url` values are HTTPS Descript, YouTube, or Vimeo URLs only. The legacy backend URLs under `https://api.droyd.ai/v1/investors/*` and `https://api.droyd.ai/api/v1/investors/*` remain supported for compatibility, but new public read integrations should use this facade.

Ask list and detail records contain `resource: null` or `{ "url": "https://…", "label": "Open the worksheet" }`. Resource URLs always use HTTP(S), and `label` may be null; clients should fall back to “Open resource.” The resource is an external public link, not a Droyd-hosted file or authenticated download.

`GET /api/v1/x` returns up to 90 chronological account-overview points in
each account's `daily` array. `impressions_30d` is the sum of the latest 30
complete daily buckets and `impressions_change_percent_30d` compares that
window with the immediately preceding complete 30 days. The percentage is
`null` when either window is incomplete or the preceding total is zero.
`engagement_rate_30d` and `tweet_count` use the same current window. The
legacy `series` array contains rolling public-X snapshots and may be empty;
clients should use `daily` for daily impression charts.

Investor actions, private contact intake, and content publication are not part
of the investor-domain facade. They remain internal portal/backend workflows
and are not a general integration surface.
