Skip to main content

NeuFin API documentation

1) Authentication

Base URL: https://neufin101-production.up.railway.app

Auth: Bearer token in Authorization header.

Getting started: create account → Developer → copy API key.

Authorization: Bearer nf_live_sk_xxxxxxxxxxxx

2) POST /api/swarm/analyze

Submit a portfolio for 7-agent IC analysis. Returns immediately with job_id. Poll /status/{job_id} for progress.

{
  "positions": [
    {"symbol": "AAPL", "shares": 100, "cost_basis": 150.00},
    {"symbol": "NVDA", "shares": 50, "cost_basis": 400.00}
  ],
  "total_value": 35000
}
{
  "job_id": "8f2a4b1c-...",
  "status": "queued",
  "poll_url": "/api/swarm/status/8f2a4b1c-...",
  "estimated_seconds": 75
}

3) GET /api/swarm/status/{job_id}

Poll every 3s to track agent progress and get results.

{
  "job_id": "8f2a4b1c-...",
  "status": "running",
  "progress_pct": 57,
  "agent_trace": [
    {"agent": "risk_agent", "status": "complete", "summary": "..."},
    {"agent": "sector_agent", "status": "running", "summary": "..."}
  ]
}

4) GET /api/swarm/result/{job_id}

Fetch full IC briefing when status == complete.

{
  "ic_briefing": {
    "portfolio_analyst": {...},
    "macro_strategist": {...},
    "risk_manager": {...},
    "sector_specialist": {...},
    "factor_quant": {...},
    "behavioral_agent": {...},
    "synthesis_agent": {...}
  }
}

5) GET /api/research/regime

Get current macro regime classification.

{
  "regime": "risk_off",
  "confidence": 0.82,
  "signals": ["vix_elevated", "yield_curve_inverted"],
  "narrative": "...",
  "updated_at": "2026-04-10T08:00:00Z"
}

6) GET /api/portfolio/chart/{ticker}

OHLCV chart data for candlestick rendering.

Params: period = 1mo | 3mo | 6mo | 1y | 3y

[{"date":"2026-04-01","open":181.2,"high":184.3,"low":179.5,"close":183.7,"volume":61439200}]

Sandbox

HTTP — · — ms

{
  "message": "Send a request to start."
}