Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ The live, versioned REST API is at `https://api.tidelight.app/v1`. The OpenAPI 3

| Operation | Scope | Purpose |
| --- | --- | --- |
| `GET /market/instruments` | `market:read` | List supported Reality tokenized-equity spot instruments |
| `GET /market/instruments` | `market:read` | List supported Reality tokenized-equity spot instruments; optionally filter by `underlying_ticker` before pagination |
| `POST /research/jobs` | `research:run` | Start an asynchronous, idempotent company snapshot |
| `GET /research/jobs/{job_id}` | `research:run` | Read status/result within the key's project |
| `DELETE /research/jobs/{job_id}` | `research:run` | Cancel queued work or request cancellation |
Expand All @@ -23,7 +23,7 @@ export TIDELIGHT_API_KEY='tl_test_…'
curl --fail-with-body \
-H "Authorization: Bearer $TIDELIGHT_API_KEY" \
-H 'Accept: application/json' \
'https://api.tidelight.app/v1/market/instruments?kind=rtoken&limit=10'
'https://api.tidelight.app/v1/market/instruments?kind=rtoken&underlying_ticker=AAPL&limit=10'
```

Responses include a request ID and market provenance, including the provider source and timestamp. rToken spot instruments are tokenized products; they are not underlying shares or stock perpetual contracts. An unavailable provider returns a safe service error instead of fabricated values. Async research responses include a job ID; reuse the same `Idempotency-Key` when retrying a start request.
Expand Down
4 changes: 4 additions & 0 deletions openapi/tidelight.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ paths:
- name: limit
in: query
schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
- name: underlying_ticker
in: query
description: Filter Reality spot instruments by their underlying US stock ticker before pagination.
schema: { type: string, pattern: '^[A-Za-z][A-Za-z0-9.]{0,9}$' }
- name: cursor
in: query
schema: { type: string, pattern: '^[A-Z0-9]{2,32}$' }
Expand Down
1 change: 1 addition & 0 deletions tests/contract.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ test("contract preserves async idempotency and distinct financial instrument pro
assert.equal(schemas.Instrument.properties.instrument_type.const, "tokenized_equity_spot");
assert.equal(schemas.StockPerpetual.properties.instrument_type.const, "stock_perpetual");
assert.notEqual(schemas.Instrument.properties.source.const, schemas.StockPerpetual.properties.source.const);
assert.equal(spec.paths["/market/instruments"].get.parameters.find(parameter => parameter.name === "underlying_ticker")?.schema.pattern, "^[A-Za-z][A-Za-z0-9.]{0,9}$");
});

test("webhook secrets are documented as one-time output and excluded from list schema", () => {
Expand Down
Loading