Concordal
FOR DEVELOPERS

Use Concordal as your backend

The same decision pipeline is available as JSON during a managed beta. Self-serve billing and API-key provisioning are not open yet.

JSON REST API

Same endpoints as our frontend uses. POST /v1/decisions returns a job id; poll /v1/decisions/job/{id} until done.

Bearer auth

Use the JWT returned by the existing invite or magic-link flow. Requests are rate-limited per identity.

Real-only runtime

The router uses only providers configured in production. If real data or a real model is unavailable, the request fails explicitly instead of returning a synthetic result.

Quick start (Python)

import requests, time

API = "https://trading-agents-platform.onrender.com"
TOKEN = "<JWT from /v1/auth/redeem>"

# Kick off a decision job
job = requests.post(
    f"{API}/v1/decisions",
    headers={"Authorization": f"Bearer {TOKEN}"},
    json={"ticker": "AAPL", "debate_rounds": 2, "locale": "en"},
).json()

# Poll until done (typical 60-90s for real LLM)
while True:
    r = requests.get(
        f"{API}/v1/decisions/job/{job['job_id']}",
        headers={"Authorization": f"Bearer {TOKEN}"},
    ).json()
    if r["status"] == "done":
        break
    if r["status"] == "error":
        raise RuntimeError(r["error"])
    time.sleep(2)

decision = r["result"]["decision"]
print(decision["side"], decision["target_weight"], decision["confidence"])

…or just curl

curl -X POST https://trading-agents-platform.onrender.com/v1/decisions \
  -H "Authorization: Bearer sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{"ticker": "AAPL", "debate_rounds": 2}'
Custom data integration

Register a private source without changing consumers

A source handler joins the priority-ordered data bus. The handler remains responsible for licensing, authentication and returning timestamped data that satisfies the schema.

from trading_agents.ecosystem.data_bus import bus, Source, NeedKind

bus.register(Source(
    project_slug="your_firm_source",
    handles=NeedKind.OHLCV,
    priority=1,
    handler=lambda need: client.get_bars(
        ticker=need.params["ticker"],
        asof=need.params["asof"],
        lookback_days=need.params.get("lookback_days", 90),
    ),
    description="Licensed internal OHLCV source",
))

API access is currently a managed beta

Self-serve billing and an API-key console have not passed production verification. Tell us the use case first so we can confirm limits, data coverage, and latency.

Request access

The full OpenAPI schema is auto-generated by FastAPI at /docs (interactive Swagger UI). Source on GitHub if you want to self-host instead.