---
title: "Issue a 14-day SDK developer trial key (100 calls/day)"
method: POST
path: "/api/keys/trial"
tags: ["API Keys"]
---

# Issue a 14-day SDK developer trial key (100 calls/day)

`POST /api/keys/trial`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/keys/trial`
- Auth: none declared

User-sim Item D 2026-05-06 (OWNER ratified): issue ONE 14-day
SDK developer trial key per user lifetime. 100 calls/day cap on
a curated 8-endpoint moat subset (insiders / 13F / institutional-
holdings consensus / BDC / short-interest + search; the
"institutional-holdings consensus" name dates from the 2026-05-20
rename — see rename-history). After 14 days the
key auto-reverts
to free-tier limits — the developer's stub script keeps working
at lower velocity until they upgrade.

Gates (CISO pre-flight):
  1. require_auth — must be logged in
  2. user.email_verified must be True (defense against disposable-
     email signup-flood)
  3. v60 partial unique index ensures one active trial per user
     (DB-layer enforcement; UniqueViolation → 409 Conflict)

## Response `200`

Successful Response

- TrialKeyIssueResponse: Response from POST /api/keys/trial — successful issuance returns the raw trial key (shown ONCE) plus trial metadata. Required fields match what the FE's _issueTrialKey handler reads to render the masked-after-30s input + days/cap badges.
  - `status` string, required: 'ok' on success
  - `key` string, required: Raw trial API key, shown ONCE. Distinct ol_trial_ prefix.
  - `prefix` string, required: Stable key prefix for display in subsequent UI surfaces
  - `name` string, required: Human-readable key name
  - `expires_at` string, required: ISO 8601 timestamp (now + 14 days)
  - `is_trial` boolean, required: Always True for this endpoint
  - `days_remaining` integer, required: Whole days until trial expires (always 14 at issuance)
  - `daily_cap` integer, required: Per-day call quota (always 100 per OWNER ratification)
  - `id` integer, required: Internal api_keys.id for the new key

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
