Foxy Pro API

API reference

Foxy Pro answers questions about digital-asset markets in plain language. For each request it decides what it needs to look at, analyses live market structure, derivatives, institutional and on-chain flows, news, the macro calendar and the Foxy signal that powers the BottomUP app, and returns one clear answer or a full research note.

Base URL: https://foxy-pro-api-production.up.railway.app. JSON in, JSON out. Information only: Foxy Pro does not execute orders or give investment advice.

Authentication

Create keys in the workspace under API. Send the key in the x-api-key header (or as a Bearer token). Keys belong to your organisation and draw on its token balance; keep them server side.

curl https://foxy-pro-api-production.up.railway.app/v1/models -H "x-api-key: fp_live_..."

Models

foxy-pro-1-fasttierLowest latency. Quotes, single-metric questions, summaries. Up to 2 data rounds.
foxy-pro-1defaultMulti-factor analysis of assets and the market. Up to 5 analysis rounds.
foxy-pro-1-deeptierExtended reasoning for complex questions and research notes. Up to 8 analysis rounds.

GET /v1/models returns each tier with its current price in Foxy tokens per million input and output tokens, the fee per data call, and the hold placed while a request runs. Holds are released when the request finishes; you pay only what it used, and failed requests are free. Balances and prices are in Foxy tokens, the billing unit; in API responses these fields keep the name credits so they are not confused with model token counts such as input_tokens.

Messages

POST /v1/messages. Stateless: send the conversation so far, ending with a user turn.

modelstringOne of the model ids. Default foxy-pro-1.
messagesarrayUp to 40 turns of {role: "user" | "assistant", content: string}. The last must be from the user.
max_tokensintegerCap on the written answer. Defaults per tier.
streambooleanStream server-sent events (see below).
languagestringForce the response language, for example "Spanish". Default: the language of the question.
instructionsstringYour house preferences (focus, tone, format). They cannot override Foxy Pro policy.
curl https://foxy-pro-api-production.up.railway.app/v1/messages \
  -H "x-api-key: $FOXY_PRO_API_KEY" -H "content-type: application/json" \
  -d '{
    "model": "foxy-pro-1",
    "messages": [{"role": "user", "content": "Is BTC positioning crowded? Where are the squeeze levels?"}],
    "instructions": "Write for a bank risk committee. Keep it under 300 words."
  }'
{
  "id": "msg_9xQ...",
  "type": "message",
  "role": "assistant",
  "model": "foxy-pro-1",
  "content": [{ "type": "text", "text": "Positioning is moderately crowded on the long side. Aggregate open interest rose 4.1% in 24h while funding sits above its 7-day average on most venues ..." }],
  "data_as_of": "2026-10-08T12:00:03Z",
  "usage": { "input_tokens": 18234, "output_tokens": 612, "cache_read_input_tokens": 9120, "tool_calls": 5, "credits": 2.41 },
  "prompt_version": "foxy-pro-prompt-2026-10-08",
  "policy_version": "foxy-pro-policy-1",
  "disclaimer": "Digital-asset market information only. Not investment advice, no order execution."
}

Streaming

With "stream": true the response is text/event-stream. Events, in order:

status{stage}gathering or writing.
step{id, name, asset, state}What Foxy Pro is analysing, for example derivatives for BTC; state is running, done or failed.
text_delta{text}A piece of the answer as it is written.
messageobjectThe complete message, identical to the non-streamed response. Last event.
error{type, message}The request failed after the stream opened. No tokens are charged for failed requests.

Reports

Long-form research notes run in the background. POST /v1/reports with prompt, depth (standard or deep) and optional language and instructions returns 202 with the report id. Poll GET /v1/reports/:id until status is succeeded or failed; GET /v1/reports lists them. A report carries a markdown content, its title, the time of the data it used and usage. Standard notes take one to three minutes, deep notes up to six.

curl https://foxy-pro-api-production.up.railway.app/v1/reports -H "x-api-key: $FOXY_PRO_API_KEY" -H "content-type: application/json" \
  -d '{"prompt": "Two-week outlook for ETH with scenarios and the levels that matter", "depth": "deep"}'
# => {"id": "rpt_...", "status": "running", ...}

Data freshness

Every answer and report carries data_as_of, the time of the most recent market data behind it. Foxy Pro works only from data it retrieves at request time, never from memory, and says plainly in the answer when part of the picture is unavailable.

Account and usage

GET /v1/organizationOrganisation, token balance and partner.
GET /v1/usage?days=30Daily totals, usage by model and by key, and recent requests.
GET /statusService status: operational, degraded or unavailable. No key needed.

Errors and limits

{ "type": "error", "error": { "type": "insufficient_credits_error", "message": "...", "required_credits": 25, "balance_credits": 3 }, "request_id": "..." }
400invalid_request_errorThe body is malformed or out of range.
401authentication_errorMissing, invalid, revoked or expired key.
402insufficient_credits_errorBalance is below the hold for this request.
403permission_errorThe organisation is suspended.
429rate_limit_error120 requests per minute per key, 4 concurrent requests per organisation.
502upstream_errorThe request could not be completed. Nothing was charged.

Coverage

Foxy Pro covers the whole market and individual assets: price and market structure (trend, momentum, volatility, support and resistance), derivatives positioning (open interest, funding, liquidations, long/short), large-holder and on-chain activity, US institutional demand, news with sentiment, the macro and crypto calendar, and the Foxy signal. Coverage expands over time without changes to the API.

Questions or volume pricing: [email protected].

Foxy Pro API reference Β· Foxy Pro