CFGI Developer API
The Edge Your App Cannot Get From Price Data Alone.
Every dashboard has candles. Every bot has price. The products that feel smarter have unique data. CFGI gives you live and historical Fear and Greed sentiment across 300 crypto tokens, 300 stocks, 4 timeframes and 10 transparent sub-signals, in one API.
- 1,000 free credits
- 1:1 team group
- Plans from $29 / 4 weeks
- REST API + webhooks
- Public docs and live endpoints you can check before you pay
600
crypto + stock assets
240M+
sentiment data points
10
transparent sub-signals
4
15m / 1h / 4h / 1d timeframes
The developer pain
Your Users Do Not Need Another Chart. They Need a Signal They Cannot Get Everywhere Else.
Price is commoditised. OHLC data is everywhere. A clean chart is expected. If your app, bot, newsletter, screener or AI agent only reacts to price, it looks like every other tool in the stack.
The best edge a trading product can have is useful data other products do not explain.
What CFGI Adds
- A market-emotion layer your users understand instantly
- Sub-signals behind every score, not one mystery number
- Historical sentiment for backtests, reports and model features
- Webhooks so products can react when sentiment changes
- Crypto and stock coverage in the same key
The avoided build
Do Not Spend Months Building the Sentiment Infrastructure.
To build this properly, you would need to collect, clean, score, store and serve a full signal layer across hundreds of assets and multiple timeframes.
Collect
Price, volatility, volume, impulse, technicals, social, dominance, trends, whale pressure and order-book pressure.
Score
Normalise every signal into usable 0 to 100 readings across crypto, stocks and each timeframe.
Store and Serve
Maintain live data, historical snapshots, webhooks, usage billing, docs, responses and errors.
CFGI gives you the finished layer. One key. One endpoint. Live and historical sentiment your product can ship with today.
One call
One Request Returns the Score, Price and Every Signal Behind It.
Use one endpoint for live widgets, dashboards, models, alerts, backtests and reports. Request one asset or many. Pull only the fields you need.
Request
https://cfgi.io/api/v3/scores?api_key=YOUR_API_KEY&symbols=BTC,AAPL&timeframe=1d&fields=score,volatility,technical,orders&limit=1Response
{
"data": [
{
"symbol": "BTC",
"name": "Bitcoin",
"asset_class": "crypto",
"image": "https://cfgi.io/iconos/BTC.png",
"timestamp": "2026-07-08T16:00:00Z",
"latest": true,
"age_seconds": 900,
"stale": false,
"price": 30000,
"market_cap": 594000000000,
"score": 38,
"classification": "Fear",
"components": {
"volatility": 41,
"technical": 47,
"orders": 49
}
},
{
"symbol": "AAPL",
"name": "Apple Inc.",
"asset_class": "stock",
"image": "https://cfgi.io/stock-logo/AAPL.png",
"timestamp": "2026-07-08T16:00:00Z",
"latest": true,
"age_seconds": 1800,
"stale": false,
"price": 214.5,
"market_cap": 3210000000000,
"score": 61,
"classification": "Greed",
"components": {
"volatility": 55,
"technical": 64,
"orders": 58
}
}
],
"meta": { "rows": 2, "symbols": 2, "timeframe": "1d" }
}Use cases
Make the Product Feel Smarter the Moment Sentiment Changes.
CFGI is a data layer for any product that needs market context users can actually understand.
Trading Dashboards
Add fear, greed and sub-signal context beside price charts so users understand what the move means.
Bots and Alert Engines
Use sentiment as a live input, trigger or filter instead of reacting to price alone.
Screeners
Sort assets by fear, greed, whale pressure, social pressure, technical pressure or order-book pressure.
Portfolio Tools
Explain holdings with sentiment, not just balances, allocation and profit and loss.
Newsletters and Reports
Turn raw market emotion into daily, weekly or asset-specific market commentary.
AI Agents
Give agents structured market context with scores, history and sub-signals they can cite.
Historical data
Backtest Against Years of Sentiment, Not Just Price.
Price history tells you what happened. Sentiment history helps you study how the crowd behaved before, during and after stress and euphoria. On any annual plan it costs 75% less than live data.
- 75% cheaper than live data on every annual plan
- Every CFGI score and all 10 sub-signals, on 15m, 1h, 4h and daily
- Pull any date range with start and end
- Check the exact depth we hold for your asset before you buy, no key needed
Why It Matters
If you are building a model, a dashboard or a signal product, historical sentiment lets you test the idea before you ship it to users. And because every row over 7 days old bills at a quarter rate on an annual plan, testing an idea that turns out not to work costs a quarter as much too.
Historical range
symbols=BTC,ETH,AAPL
timeframe=1d
fields=score,technical,whales
start=2022-01-01
end=2026-06-01Live data, 24/7
React the Moment the Market Mood Moves.
Poll the REST API on your own schedule, or skip polling and let CFGI push score updates to your endpoint by webhook.
- Every new reading as it is scored
- REST polling or signed webhooks
- Build bots, dashboards and alerts that react in real time
Webhook event
POST https://your-app.com/hooks/cfgi
{
"event": "score.updated",
"token": "BTC",
"timeframe": "4h",
"date": "2026-06-19 16:00:00",
"price": 30000,
"cfgi": 38,
"classification": "Fear"
}Pricing
Start Free. Subscribe When You Ship.
Every account starts with 1,000 free credits. Use them to test real calls, then subscribe for the best production rate or buy one-off packs for backfills and spikes.A subscription is a usage limit, not a top-up. Each plan sets how much you can use in a 4-week cycle, and it resets at the start of the next one rather than building up. One-off credit packs are the opposite: they never expire, and they are only spent once your cycle limit is used.
Starter
$319/ year
Up to 100k credits every 4 weeks, about $0.22 per 1k, or $0.06 on history
A usage limit that resets each cycle. Unused credits do not carry over.
$58 less than paying every 4 weeks
Historical data 75% cheaper
Best for one dashboard, one bot or a serious prototype.
Growth
$2,189/ year
Up to 1M credits every 4 weeks, about $0.17 per 1k, or $0.04 on history
A usage limit that resets each cycle. Unused credits do not carry over.
$398 less than paying every 4 weeks
Historical data 75% cheaper
Best for production apps, heavier polling and multiple assets.
Scale
$10,989/ year
Up to 10M credits every 4 weeks, about $0.08 per 1k, or $0.02 on history
A usage limit that resets each cycle. Unused credits do not carry over.
$1,998 less than paying every 4 weeks
Historical data 75% cheaper
Best for full coverage, backfills, webhooks and multi-product use.
Historical data, 75% cheaper
on every annual planEvery row older than 7 days bills at a quarter of the normal rate. A full Bitcoin backfill across all four timeframes drops from roughly 3,052,000 credits to about 784,000, so testing an idea that might not work stops being a budget decision. On Growth Annual that turns five backtests a year into twenty-one.
- Historical data 75% cheaper, on every row over 7 days old
- Two cycles free versus paying every 4 weeks
- Same credits every 4 weeks, so nothing about your day-to-day changes
Every Paid Subscription Includes
- Historical data 75% cheaper on any annual plan
- Every supported asset on every tier, crypto and stocks alike
- Check our exact data coverage, endpoints and response format before you pay a penny
- A private 1:1 group with the CFGI team
- Commercial use for apps, dashboards and internal products
- REST API, request builder, public docs and webhooks
Need more than 10M? Tell us what you are building and we will put together custom quotas, custom terms and a redistribution licence.
Talk to UsTop-ups
Need a Burst? Buy Credits Without Changing Plan.
Use one-off packs for backfills, launch spikes and experiments. Subscribe for the best rate when it is running in production.
| Pack | Credits | Best for | Buy |
|---|---|---|---|
| Free | 1,000 | Testing | |
| Starter | 100k | Small backfill | |
| Growth | 1M | Project spike | |
| Scale | 10M | Large backfill | |
| Enterprise | 100M+ | Custom terms | Talk to Us |
Credits
Usage Is Simple and Visible.
One credit = 1 field × 1 token × 1 value. You only pay for the exact data requested, and every response shows usage and remaining credits.
| Request | Credits | Cost at Starter rate |
|---|---|---|
| 1 token × 4 fields × 1 value | 4 credits | $0.00116 |
| 5 tokens × 4 fields × 1 value | 20 credits | $0.0058 |
| 2 tokens × 3 fields × 100 values | 600 credits | $0.174 |
Historical data, 75% cheaper
Any row at least 7 days old bills at a quarter of the normal rate, on every annual plan. Live and recent data is unchanged. The split is applied per row, so a request that spans the boundary is charged accordingly, and the X-Rows-Live / X-Rows-Archive / X-Archive-Rate response headers show exactly what you were charged for.
A full Bitcoin backfill across all four timeframes is about 3,052,000 credits at the standard rate. On an annual plan it is about 784,000, roughly 78% of one Growth cycle instead of three.
Documentation
Public Docs, So Developers Can Test Before They Talk to Anyone.
Everything important is public. Build a request, read the reference, and see the exact assets, fields and webhooks the API returns.
Request Builder
Request builder
Build Your Request
Pick your token, timeframe and signals. We write the URL. Paste in your key and go.
Timeframe
Signals (2 selected)
Your request URL
https://cfgi.io/api/v3/scores?api_key=YOUR_API_KEY&symbols=BTC&timeframe=1d&fields=score,price&limit=1Replace YOUR_API_KEY with your key. Estimated cost: 2 credits (2 fields × 1 row).
Authentication
Every request is authenticated with your API key, passed as the api_key parameter or an Authorization: Bearer header. Generate one from your account and claim 1,000 free credits.
Making a Request
The endpoint accepts GET and returns JSON from https://cfgi.io/api/v3/scores. Discover everything we score at https://cfgi.io/api/v3/assets (free, no key).
| Parameter | Example | Meaning |
|---|---|---|
| api_key | YOUR_API_KEY | Authenticates the request. Also accepted as an Authorization: Bearer header. |
| symbols | BTC,AAPL,MARKET | Crypto or stock symbols, comma-separated. MARKET and STOCK_MARKET are the whole-market indexes. |
| timeframe | 1d | One of 15m, 1h, 4h, 1d. Default 1d. |
| fields | score,whales | Which signals to return, and the credit cost. Default: all. |
| start / end | 2026-01-01 / 2026-06-01 | A historical window (ISO 8601 or epoch seconds, UTC). |
| limit | 100 | Latest N rows (default 1, the live reading). Inside a date range it caps the window; default there is the full window. Max 1200 rows total per request, split across symbols. |
| include_inactive | 1 | Set to 1 to also reach delisted or inactive assets. Off by default, so /scores and /assets agree on the live roster. |
The newest row in each result carries latest: true plus age_seconds (seconds since that reading) and stale (true when a reading is older than its timeframe expects, for example across a market close), so you can tell a live value from a lagging one.
Supported Assets
Use symbols=MARKET for the whole crypto market index, symbols=STOCK_MARKET for the stock market index, or any symbol below: one or several, crypto or stock. If a ticker exists in both classes, crypto wins the bare form; force a class with a prefix: STOCK:CVX or CRYPTO:CVX.
300 crypto + 300 stocks
Crypto
MARKET0G1INCH2ZAAVEADAADIAEROAEVOAGLDAIAIXAIXBTALGOALICEALLOALTAMPANSEMAPEAPEPEAPTAPUARARBARKMASTERATATMATOMAUDIOAURAAVAXAWEAXSBBABYDOGEBANANABANANAS31BANKBASEDBATBCHBDXBEATBERABIOBITCOINBLUAIBLURBNBBOBOBOMEBONKBPBTCBTTBTWCAKECASHCATCATICCCELOCFXCHEEMSCHZCOMPCORNCROCRVCVXDASHDATADCRDEXEDOGDOGEDOGSDOTDYDXEDENEDUEGLDEIGENENAENJENSOEOSETCETHETHFIEULFARTCOINFETFFFILFLOKIFLOWFLRFOLKSFORMFTFWOGGALAGENIUSGIGAGMTGNOGOMININGGPSGRASSGRTGWEIHHBARHMSTRHNTHOLOHOMEHTXHUMAHYPEHYPERICPIDIMXINJIOIOTAIOTXJASMYJOEJSTJTOJUPKAIAKAITOKASKATKAVAKITEKMNOLABLAYERLDOLINEALINKLITLTCLUNALUNCMMAGMAMANAMANTAMANTRAMBGMBLMEMEGAMELANIAMEWMINAMIRAMMTMNTMOGMONMOODENGMORPHOMOVRMUBARAKMXNEARNEIRONEONEXNEXONFTNIGHTNMRNOTNPCNXTOGONDOONGOPENOPGORDIOZOPENDLEPENGUPEPEPIPIEVERSEPLUMEPNUTPOLPOPCATPROMPUMPQFIQNTRAILRAINRAYREREALREDREZRIFROBOROSERSRRUNERVNSSAHARASANDSCRTSEDASEISENTSFPSHIBSKLSKYSKYAISLXSNEKSNXSOLSOMISPELLSPKSPXSTGSTRKSTXSUISUNSXTSYNSYRUPTACTAOTELTETTHETATIATLMTONTOSHITRACTRBTRIATRUMPTRXTSTTURBOTWTUBUFDULTIMAUNIUSATUSELESSUSUALVANAVANRYVELVETVETVINEVIRTUALVSNVVVWWBTWEMIXWIFWLDWLFIWOJAKWOLFXDCXLMXMRXPLXRPXTZYFIZAMAZANOZBCNZBTZECZENZIGZKZROStocks
SPCXAAPLMSFTNVDAAMZNGOOGLMETAAVGOTSLABRK-BJPMLLYVXOMUNHMACOSTHDPGJNJWMTNFLXABBVBACCRMORCLKOCVXWFCAMDPEPCSCOADBELINACNMCDTMOABTGEPMIBMTXNISRGQCOMDISCATGSINTUVZAMGNMRKNOWPLTRUBERPANWCRWDFTNTADSKWDAYSNOWDDOGNETMSTRSHOPABNBDASHRBLXAPPRDDTSNPSCDNSARMMUADILRCXKLACAMATMRVLNXPIMCHPONANETAPHTELGLWDELLGFSHPEWDCTTMUSCMCSAWBDSPOTEATTWOMSCSCHWUSBPNCTFCCOFBKAXPBLKSPGIMCOICECMEMSCIBXKKRAPOMMCAONAJGPGRCBTRVALLMETPRUAIGAFLFIDFSPFEBMYGILDVRTXREGNMRNACVSCIELVHUMMCKCORHCADHRSYKBSXMDTBDXEWIDXXIQVARMDLOWTJXTGTROSTAZOORLYSBUXCMGBKNGMARHLTYUMRCLCCLFGMCVNAMOMDLZCLKMBSYYKRMNSTKDPHSYADMKVUEBARTXLMTGDNOCGEVHONDEMMMUPSUNPCSXNSCETNEMRITWPHCMIPCARFDXWMURITDGAXONCARRCOPSLBEOGMPCPSXVLOWMBOKEKMIOXYFANGLNGAPDSHWECLFCXNEMNUEVMCMLMCTVANEESODUKCEGAEPDEXCSREVSTXELPEGPCGPLDAMTEQIXWELLSPGOPSACCIDLRHOODCOINRKLBTSMASMLINTCHSBCNVSRYAZNSNDKBABAMUFGSHELNVOTMBHPSANTDSTXSAPTTEUBSIBKRBUDSCCORIOBBVAHDBBTIULMFGVRTBMOSONYPDDENBPBRHWMCMBNSGSKSNYIBNTTBPPWRSMFGADPBNASXINGBCSMELIITUBFields
Choose what comes back with fields=. The 10 signals arrive inside components (here price means the price sub-signal); score and its classification are included in every row, along with the real asset price and market_capwhere available. Only the STOCK_MARKET index (the S&P 500) is score and price only; the crypto MARKET index returns its full components like any asset. Each requested field costs one credit per row.
scoreThe composite Fear and Greed score with its classification.
priceThe price sub-signal (the real asset price is always included for free).
volatilityPrice instability and fluctuation pressure.
volumeTrading participation behind the move.
impulseForce of the latest market shift.
technicalWeighted trend and oscillator signals.
socialCrowd attention and social sentiment.
dominanceRisk concentration versus the wider market.
trendsSearch-interest and intent signals.
whalesLarge-holder exchange flow pressure.
ordersOrder-book buying and selling pressure.
Webhooks
Skip polling and have CFGI push each new reading to your endpoint. Add a webhook URL, token, timeframe and fields. We send a signing secret, POST the payload and retry failed deliveries. Webhook deliveries draw on the same credits as API calls: one credit per field, per reading delivered.
Verify signature
import crypto from 'node:crypto'
const signature = req.headers['x-cfgi-signature']
const expected = 'sha256=' + crypto
.createHmac('sha256', YOUR_SECRET)
.update(rawBody)
.digest('hex')
if (signature !== expected) return res.status(401).end()Migrating From v2
The v2 endpoint (/api/api_request_v2.php) is deprecated and sunsets on Sat 1 Aug 2026. It keeps working unchanged until then, and every v2 response now carries Deprecation and Sunset headers. v3 serves the same signals on the same [1,99] scale under cleaner names, adds stocks, and costs exactly the same credits. Readings from 8 Jul 2026 onward come from the upgraded scoring engine. Your webhooks are handled for you: they keep running unchanged, sending the exact v2 payload they always have, so nothing broke. They stay on v2 until 1 August 2026 (sooner than the API, since they run on the box we retire first), then move to v3 automatically. Update your receiver to accept the v3 payload before then, using the before and after below. To move one early, pausing, resuming, or deleting it in your account switches it to v3 immediately. Deliveries draw on the same credits as calls.
| v2 (deprecated) | v3 |
|---|---|
| GET /api/api_request_v2.php | GET /api/v3/scores |
| api_key=KEY (query only) | api_key=KEY or Authorization: Bearer KEY |
| token=BTC,ETH | symbols=BTC,ETH (stocks now return data too) |
| period=4 (1=15m … 4=1d) | timeframe=1d (15m, 1h, 4h, 1d) |
| fields=cfgi,price,whales | fields=score,price,whales (same 11 signals, cfgi is now score) |
| values=N | limit=N |
| Flat rows: token, nombre, date, cfgi, data_* | Nested: symbol, name, timestamp (ISO UTC), score, classification, components{}, market_cap where available |
| ultimo: true on the live row | latest: true |
| Credits: fields × rows | Unchanged. Same [1,99] scale, same credit math, same X-* billing headers. Values from 8 Jul 2026 onward come from the upgraded scoring engine. |
v2 request and response
GET /api/api_request_v2.php
?api_key=KEY&token=BTC&period=4&fields=cfgi,whales&values=1
[
{
"token": "BTC",
"nombre": "Bitcoin",
"date": "2026-07-08 16:00:00",
"price": 30000,
"ultimo": true,
"cfgi": 38,
"data_whales": 49
}
]v3 request and response
GET /api/v3/scores
?api_key=KEY&symbols=BTC&timeframe=1d&fields=score,whales&limit=1
{
"data": [{
"symbol": "BTC",
"name": "Bitcoin",
"asset_class": "crypto",
"timestamp": "2026-07-08T16:00:00Z",
"latest": true,
"age_seconds": 900,
"stale": false,
"price": 30000,
"market_cap": 594000000000,
"score": 38,
"classification": "Fear",
"components": { "whales": 49 }
}],
"meta": { "rows": 1, "symbols": 1, "timeframe": "1d" }
}Webhook payload: v2 to v3
If you receive score updates by webhook, this is the only change on your side. Point your handler at the v3 keys below before 1 August 2026, when your webhooks move over automatically.
Webhook payload
POST https://your-app.com/hooks/cfgi
(no signature header)
{
"id": 987654,
"token": "BTC",
"timeframe": "4h",
"date": "2026-07-08 16:00:00",
"price": 30000,
"data_cfgi": 38,
"data_search": 55,
"data_orderbook": 41,
"data_whales": 49
}Webhook payload
POST https://your-app.com/hooks/cfgi
X-CFGI-Signature: sha256=6b6f0e…
{
"event": "score.updated",
"token": "BTC",
"timeframe": "4h",
"date": "2026-07-08 16:00:00",
"price": 30000,
"cfgi": 38,
"classification": "Fear",
"data_trends": 55,
"data_orders": 41,
"data_whales": 49
}data_cfgibecomescfgi, plus a newclassificationlabel (Fear, Greed, and so on).data_searchbecomesdata_trends, anddata_orderbookbecomesdata_orders. The otherdata_*signals keep their names.- A new
eventfield replaces the old numericid. - Every v3 delivery is signed: verify the
X-CFGI-Signatureheader against your signing secret (see the Webhooks section above).
New in v3
- Stocks and the STOCK_MARKET index sit next to crypto and MARKET on the same key.
- Bearer auth: send the key as an Authorization header, not only the api_key query.
- Freshness on the live row: age_seconds and a stale flag mark a lagging reading.
- ISO 8601 UTC timestamps replace the v2 Madrid-local date strings.
- include_inactive=1 reaches delisted assets, and a free, keyless /api/v3/assets lists the whole roster.
Unchanged: the [1,99] scale, the fields × rows credit math, the history, and the X-* billing headers. Migrating is a rename, not a re-integration: keep your key, swap the endpoint and parameter names, and read score where you read cfgi.
Errors moved to a single envelope: { "error": { "code", "message" } } with the same status codes (400, 401, 402, 429). Billing headers (X-Credits-Used, X-Credits-Remaining) are identical across both versions.
Check what we hold before you pay
No account, no key, no card. Type any symbol and see exactly how many rows we hold on each timeframe and how far back they go. These are the same numbers the API bills you against.
Developer Questions
How do I start, and is it really free?
Generate an API key and claim 1,000 free credits. Use them to test real calls before paying.
Subscription or credit packs: which should I pick?
Use subscriptions for production because they give the best rate. Use credit packs for one-off backfills, experiments and project spikes.
Can I use CFGI commercially?
Yes. Use the data in any product, application, dashboard, report or internal system you operate, including ones you sell. Display it, chart it, transform it and derive from it. What is not permitted is redistributing the data as data: bulk export, resale, sublicensing, or serving it through your own API, feed, file delivery or dataset, whether raw, cached or substantially reconstructed. That needs enterprise terms.
What counts as historical data?
Any row whose own timestamp is at least 7 days old. It is judged per row on the data itself, never on how you phrase the request, so a range that straddles the boundary is billed part live and part archive. The response headers break down exactly what you were charged for.
How much history do you have for my asset?
It varies by asset, and you can check before you pay. Use the coverage lookup at the end of these docs, or call the free, keyless /api/v3/coverage endpoint with any symbol. It reports the exact number of stored rows per timeframe, the first and last date, and the sampling density.
Do unused subscription credits roll over?
No, and this is the thing worth understanding before you buy. A subscription is a usage limit, not a top-up: your plan sets how much you can use in each 4-week cycle, and whatever you have not used is gone when the next cycle starts. It does not accumulate. Credit packs work the other way round: they never expire, they sit underneath your cycle limit, and they are only spent once that limit is used up. So if your usage is spiky rather than steady, packs may suit you better than a bigger plan.
Can I use CFGI data in a trading bot?
Yes, as a data input. CFGI provides sentiment data, not financial advice, trade execution or guaranteed buy or sell signals.
What happens if I run out of credits?
Calls return an insufficient-credits response and webhooks pause until you top up or upgrade.
Start
Give Your Product a Data Edge Today.
Generate an API key, claim 1,000 credits and see what CFGI returns before paying. Subscribe or top up only when you need more.
CFGI provides sentiment data and market context. It does not provide financial advice, trade execution or investment recommendations.
Not building with it yourself but know someone who would? Create an affiliate link and earn 25% of everything they ever pay, rising to 50% the longer they stay.