API reference

View as Markdown

Base URL: https://iposignal.xyz. Every endpoint is a GET that returns JSON. This page is generated from the same definitions as the OpenAPI document.

Example responses are abridged. Fields may be null or absent when a filing does not state them, and new fields can be added at any time, so ignore fields you do not know.

Status codes shared by every endpoint are in Quotas and errors.

EndpointPathPrice per call
Companies with financial statements/api/agent/companiesFree
IPO snapshot by ticker/api/agent/ipo/by-symbol/{symbol}$0.01
IPO snapshot by id/api/agent/ipo/{id}$0.01
Financial statements/api/agent/financials/by-symbol/{symbol}$0.01
Live valuation metrics/api/agent/company-metrics$0.02
IPO market sentiment/api/agent/ipo-sentiment$0.01
Social sentiment for one IPO/api/agent/social-sentiment$0.01
IPO events calendar/api/agent/ipo-events$0.02

Companies with financial statements

GET /api/agent/companies

Directory of the companies we hold SEC iXBRL financial statements for. Use it to find which tickers the financials endpoint can return. Free, no key needed.

Price: free, no key needed. MCP tool: lookup_companies_with_financials.

ParameterInRequiredDescription
qqueryNoFilter by ticker or company name (case-insensitive substring). Omit to list every company.
limitqueryNoPage size, 1 to 500. Default 200.
offsetqueryNoRows to skip. Pass the previous response's nextOffset to fetch the next page. Default 0.

Try it

GET /api/agent/companies?q=circle&limit=200&offset=0

Free: sends a real request.

curl "https://iposignal.xyz/api/agent/companies?q=circle"

Response:

{
  "version": "1",
  "count": 1,
  "total": 1,
  "offset": 0,
  "limit": 200,
  "nextOffset": null,
  "data": [
    {
      "symbol": "CRCL",
      "company": "Circle Internet Group, Inc.",
      "cik": "0001876042",
      "latestPeriodEnd": "2026-09-30",
      "preIpoCount": 4,
      "postIpoCount": 8
    }
  ]
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
countintegerRows in this page.
totalintegerRows matching the query across all pages.
offsetintegerRows skipped before this page.
limitintegerPage size you asked for.
nextOffsetintegerPass as offset to get the next page. Null on the last page.
dataarray of objectsCompanies we hold SEC financial statements for, sorted by ticker.
data[].symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data[].companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data[].cikstringSEC Central Index Key: the registrant's permanent SEC identifier, as a 10-digit string with leading zeros, e.g. 0001876042.
data[].latestPeriodEndstringEnd date of the most recent period we hold, YYYY-MM-DD. Shows how current the statements are.
data[].preIpoCountintegerHow many periods (annual and interim) we hold from before the listing, read from the registration statement. 0 when we hold none. The financials endpoint returns them as preIpoPeriods.
data[].postIpoCountintegerHow many periods we hold from the 10-K, 10-Q and 20-F reports filed after the listing. 0 for a company that has not reported as a public company yet. Returned as postIpoPeriods.

IPO snapshot by ticker

GET /api/agent/ipo/by-symbol/{symbol}

The full profile of one IPO: deal terms, price range and final offer price, market capitalisation, SEC registration and prospectus details, filing history, lifecycle timeline, borrow fee, and research where available.

Price: $0.01 per delivered call over x402, or one call from an API key's quota. MCP tool: get_ipo_snapshot.

ParameterInRequiredDescription
symbolpathYesUS ticker symbol. Case-insensitive. Tickers get reassigned, so a response may carry a symbolNote.

Try it

GET /api/agent/ipo/by-symbol/CRCL

$0.01 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/ipo/by-symbol/CRCL"

The payload is in data:

{
  "version": "1",
  "data": {
    "company": "Circle Internet Group, Inc.",
    "cik": "0001876042",
    "symbol": "CRCL",
    "venue": "NYSE",
    "ipoDetails": {
      "date": "2025-06-05",
      "exchange": "NYSE",
      "shares": 34000000,
      "offerPrice": 31,
      "offerSize": 1054000000,
      "marketCap": 6898700000
    },
    "registration": {
      "form": "S-1/A",
      "filingDate": "2025-06-02",
      "effectivenessDate": null,
      "url": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/d737521ds1a.htm"
    },
    "filings": [
      {
        "formType": "S-1/A",
        "filingDate": "2025-06-02",
        "acceptedDate": null,
        "accessionNumber": "0001193125-25-132755",
        "indexUrl": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/",
        "documentUrl": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/d737521ds1a.htm"
      }
    ],
    "lifecycleEvents": [
      {
        "status": "priced",
        "date": "2025-06-05"
      }
    ],
    "borrowFee": {
      "feeRate": 0.2736,
      "asOfDate": "2026-05-22"
    }
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.cikstringSEC Central Index Key: the registrant's permanent SEC identifier, as a 10-digit string with leading zeros, e.g. 0001876042.
data.symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.venuestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.updatedAtstringWhen any part of this record last changed, ISO 8601.
data.ipoDetailsobjectDeal facts for the IPO.
data.ipoDetails.datestringFirst trading day, YYYY-MM-DD. For a deal that has not listed, the scheduled date.
data.ipoDetails.dateSourcestringWhere date comes from: observed-trading (a trade we observed on that day) or scheduled (an exchange calendar).
data.ipoDetails.exchangestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.ipoDetails.sharesnumberShares offered in the deal. Not shares outstanding.
data.ipoDetails.priceRangestringThe filed price range as text, low to high, USD per share, e.g. $16.00-$18.00. Null once the final price is known.
data.ipoDetails.offerPricenumberFinal offer price, USD per share. Null until the deal has priced.
data.ipoDetails.marketCapnumberWhat the company was worth at the offer, USD: economic shares outstanding right after the offering × offer price. Not the amount raised (see offerSize).
data.ipoDetails.marketCapSourcestringWhere marketCap comes from: sec (share count from the filing), qra-prospectus (the final prospectus), scoop (IPOScoop), override (checked by hand). Null when unknown.
data.ipoDetails.offerSizenumberGross proceeds, USD: shares offered × offer price. What the deal raised, not what the company is worth.
data.ipoDetails.issuerstringIssuer line when it differs from company. Currently never set.
data.registrationobjectThe registration statement the deal was sold on: the latest S-1, F-1 or S-11 (or amendment) filed on or before the listing date.
data.registration.formstringSEC form type: S-1, S-1/A, F-1, F-1/A, S-11 or S-11/A.
data.registration.urlstringThe statement's main document on sec.gov.
data.registration.filingDatestringDate the statement was filed, YYYY-MM-DD.
data.registration.acceptedDatestringTime EDGAR accepted the filing, ISO 8601.
data.registration.effectivenessDatestringDate the SEC declared the statement effective, YYYY-MM-DD. Currently always null: no source we read carries it.
data.registration.statusstringRegistration status. Currently always null: no source we read carries it.
data.filingsarray of objectsThe company's SEC filings we track (registration statements, amendments, 424B prospectuses, delisting notices), oldest first.
data.filings[].formTypestringSEC form type, e.g. S-1, S-1/A, 424B4, EFFECT, RW, 25-NSE.
data.filings[].filingDatestringFiling date, YYYY-MM-DD.
data.filings[].acceptedDatestringTime EDGAR accepted the filing, ISO 8601.
data.filings[].accessionNumberstringSEC accession number, the filing's unique id, e.g. 0001193125-25-132755.
data.filings[].indexUrlstringThe filing's folder on sec.gov, listing every document in it.
data.filings[].documentUrlstringThe filing's main document on sec.gov, when we resolved it.
data.lifecycleEventsarray of objectsThe deal's dated status history, oldest first.
data.lifecycleEvents[].statusstringfiled, expected, prelisting, priced, trading, postponed, withdrawn, halted, halt_resumed, delisted or acquired.
data.lifecycleEvents[].datestringDate the status took effect, YYYY-MM-DD.
data.borrowFeeobjectLatest indicative cost of borrowing the shares to sell short, from Interactive Brokers. Present once the stock trades and IBKR quotes it.
data.borrowFee.feeRatenumberAnnual borrow fee in percent, IBKR's unit: 0.25 means 0.25% a year, 35 means 35% a year.
data.borrowFee.asOfDatestringDate the rate was quoted, YYYY-MM-DD.
data.researchobjectResearch written by our AI pipeline from the prospectus: summary, competitors, board, risks and valuation work. Text, not filed figures: check a number against the filing before relying on it. Absent until the pipeline has run for the deal.
data.research.summarystringSummary of the company and the deal.
data.research.competitorsarray of stringsNamed competitors.
data.research.keyRisksarray of stringsThe main risks, one sentence each.
data.research.useOfProceedsstringWhat the company says it will do with the money raised.
data.research.boardOfDirectorsarray of objectsDirectors named in the prospectus.
data.research.boardOfDirectors[].namestringDirector's name.
data.research.boardOfDirectors[].rolestringRole on the board, e.g. Chair, Independent Director.
data.research.boardOfDirectors[].backgroundstringShort background, when the prospectus gives one.
data.research.isInvestmentVehiclebooleanTrue for a trust, fund, ETF or SPAC rather than an operating company.
data.research.interestLevelstringOur read of how much attention the deal draws: High, Medium or Low.
data.research.analystSectorstringSector we classify the company in.
data.research.analystSubsectorstringSubsector we classify the company in.
data.research.sourcesarray of stringsURLs the research cites.
data.freedom24NewsobjectNews articles about the deal from Freedom24, when it covers the company.
data.freedom24News.articlesarray of objectsArticles as Freedom24 publishes them: title, provider, date, URL and text.
data.freedom24News.lastSyncedAtstringWhen we last fetched Freedom24's list for the company, ISO 8601.
data.secobjectHow the SEC classifies the company.
data.sec.categorystringSEC filer category, e.g. Non-accelerated filer, Emerging growth company.
data.sec.descriptionstringIndustry from the company's SIC code, e.g. Services-Prepackaged Software.
data.symbolNoteobjectPresent only when the ticker you asked for has belonged to more than one company and the record served is not the current holder's. Absent on an ordinary lookup.
data.symbolNote.requestedSymbolstringThe ticker you asked for.
data.symbolNote.servedCikstringCIK of the company whose record this response holds.
data.symbolNote.currentHolderCikstringCIK of the company that holds the ticker today, when known.
data.symbolNote.currentHolderNamestringName of the company that holds the ticker today, when known.
data.symbolNote.reasonstringPlain-language explanation of the mismatch.

Errors besides the common ones: 404. None is charged.

IPO snapshot by id

GET /api/agent/ipo/{id}

The same profile as the by-ticker endpoint, addressed by the IPOSignal company id that other responses return. Use it when a ticker is ambiguous or not yet assigned.

Price: $0.01 per delivered call over x402, or one call from an API key's quota. MCP tool: get_ipo_snapshot.

ParameterInRequiredDescription
idpathYesIPOSignal company id, 24 hexadecimal characters.

Try it

GET /api/agent/ipo/

$0.01 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/ipo/6919e87469f7d961886f73f7"

The payload is in data:

{
  "version": "1",
  "data": {
    "company": "Circle Internet Group, Inc.",
    "cik": "0001876042",
    "symbol": "CRCL",
    "venue": "NYSE",
    "ipoDetails": {
      "date": "2025-06-05",
      "exchange": "NYSE",
      "shares": 34000000,
      "offerPrice": 31,
      "offerSize": 1054000000,
      "marketCap": 6898700000
    },
    "registration": {
      "form": "S-1/A",
      "filingDate": "2025-06-02",
      "effectivenessDate": null,
      "url": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/d737521ds1a.htm"
    },
    "filings": [
      {
        "formType": "S-1/A",
        "filingDate": "2025-06-02",
        "acceptedDate": null,
        "accessionNumber": "0001193125-25-132755",
        "indexUrl": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/",
        "documentUrl": "https://www.sec.gov/Archives/edgar/data/1876042/000119312525132755/d737521ds1a.htm"
      }
    ],
    "lifecycleEvents": [
      {
        "status": "priced",
        "date": "2025-06-05"
      }
    ],
    "borrowFee": {
      "feeRate": 0.2736,
      "asOfDate": "2026-05-22"
    }
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.cikstringSEC Central Index Key: the registrant's permanent SEC identifier, as a 10-digit string with leading zeros, e.g. 0001876042.
data.symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.venuestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.updatedAtstringWhen any part of this record last changed, ISO 8601.
data.ipoDetailsobjectDeal facts for the IPO.
data.ipoDetails.datestringFirst trading day, YYYY-MM-DD. For a deal that has not listed, the scheduled date.
data.ipoDetails.dateSourcestringWhere date comes from: observed-trading (a trade we observed on that day) or scheduled (an exchange calendar).
data.ipoDetails.exchangestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.ipoDetails.sharesnumberShares offered in the deal. Not shares outstanding.
data.ipoDetails.priceRangestringThe filed price range as text, low to high, USD per share, e.g. $16.00-$18.00. Null once the final price is known.
data.ipoDetails.offerPricenumberFinal offer price, USD per share. Null until the deal has priced.
data.ipoDetails.marketCapnumberWhat the company was worth at the offer, USD: economic shares outstanding right after the offering × offer price. Not the amount raised (see offerSize).
data.ipoDetails.marketCapSourcestringWhere marketCap comes from: sec (share count from the filing), qra-prospectus (the final prospectus), scoop (IPOScoop), override (checked by hand). Null when unknown.
data.ipoDetails.offerSizenumberGross proceeds, USD: shares offered × offer price. What the deal raised, not what the company is worth.
data.ipoDetails.issuerstringIssuer line when it differs from company. Currently never set.
data.registrationobjectThe registration statement the deal was sold on: the latest S-1, F-1 or S-11 (or amendment) filed on or before the listing date.
data.registration.formstringSEC form type: S-1, S-1/A, F-1, F-1/A, S-11 or S-11/A.
data.registration.urlstringThe statement's main document on sec.gov.
data.registration.filingDatestringDate the statement was filed, YYYY-MM-DD.
data.registration.acceptedDatestringTime EDGAR accepted the filing, ISO 8601.
data.registration.effectivenessDatestringDate the SEC declared the statement effective, YYYY-MM-DD. Currently always null: no source we read carries it.
data.registration.statusstringRegistration status. Currently always null: no source we read carries it.
data.filingsarray of objectsThe company's SEC filings we track (registration statements, amendments, 424B prospectuses, delisting notices), oldest first.
data.filings[].formTypestringSEC form type, e.g. S-1, S-1/A, 424B4, EFFECT, RW, 25-NSE.
data.filings[].filingDatestringFiling date, YYYY-MM-DD.
data.filings[].acceptedDatestringTime EDGAR accepted the filing, ISO 8601.
data.filings[].accessionNumberstringSEC accession number, the filing's unique id, e.g. 0001193125-25-132755.
data.filings[].indexUrlstringThe filing's folder on sec.gov, listing every document in it.
data.filings[].documentUrlstringThe filing's main document on sec.gov, when we resolved it.
data.lifecycleEventsarray of objectsThe deal's dated status history, oldest first.
data.lifecycleEvents[].statusstringfiled, expected, prelisting, priced, trading, postponed, withdrawn, halted, halt_resumed, delisted or acquired.
data.lifecycleEvents[].datestringDate the status took effect, YYYY-MM-DD.
data.borrowFeeobjectLatest indicative cost of borrowing the shares to sell short, from Interactive Brokers. Present once the stock trades and IBKR quotes it.
data.borrowFee.feeRatenumberAnnual borrow fee in percent, IBKR's unit: 0.25 means 0.25% a year, 35 means 35% a year.
data.borrowFee.asOfDatestringDate the rate was quoted, YYYY-MM-DD.
data.researchobjectResearch written by our AI pipeline from the prospectus: summary, competitors, board, risks and valuation work. Text, not filed figures: check a number against the filing before relying on it. Absent until the pipeline has run for the deal.
data.research.summarystringSummary of the company and the deal.
data.research.competitorsarray of stringsNamed competitors.
data.research.keyRisksarray of stringsThe main risks, one sentence each.
data.research.useOfProceedsstringWhat the company says it will do with the money raised.
data.research.boardOfDirectorsarray of objectsDirectors named in the prospectus.
data.research.boardOfDirectors[].namestringDirector's name.
data.research.boardOfDirectors[].rolestringRole on the board, e.g. Chair, Independent Director.
data.research.boardOfDirectors[].backgroundstringShort background, when the prospectus gives one.
data.research.isInvestmentVehiclebooleanTrue for a trust, fund, ETF or SPAC rather than an operating company.
data.research.interestLevelstringOur read of how much attention the deal draws: High, Medium or Low.
data.research.analystSectorstringSector we classify the company in.
data.research.analystSubsectorstringSubsector we classify the company in.
data.research.sourcesarray of stringsURLs the research cites.
data.freedom24NewsobjectNews articles about the deal from Freedom24, when it covers the company.
data.freedom24News.articlesarray of objectsArticles as Freedom24 publishes them: title, provider, date, URL and text.
data.freedom24News.lastSyncedAtstringWhen we last fetched Freedom24's list for the company, ISO 8601.
data.secobjectHow the SEC classifies the company.
data.sec.categorystringSEC filer category, e.g. Non-accelerated filer, Emerging growth company.
data.sec.descriptionstringIndustry from the company's SIC code, e.g. Services-Prepackaged Software.
data.symbolNoteobjectPresent only when the ticker you asked for has belonged to more than one company and the record served is not the current holder's. Absent on an ordinary lookup.
data.symbolNote.requestedSymbolstringThe ticker you asked for.
data.symbolNote.servedCikstringCIK of the company whose record this response holds.
data.symbolNote.currentHolderCikstringCIK of the company that holds the ticker today, when known.
data.symbolNote.currentHolderNamestringName of the company that holds the ticker today, when known.
data.symbolNote.reasonstringPlain-language explanation of the mismatch.

Errors besides the common ones: 404. None is charged.

Financial statements

GET /api/agent/financials/by-symbol/{symbol}

SEC iXBRL income statement, balance sheet and cash-flow line items for a company we cover, before and after its IPO, with margins, growth, leverage and return ratios per period. Interim periods carry annualised figures beside the reported ones.

Price: $0.01 per delivered call over x402, or one call from an API key's quota. MCP tool: get_company_financials.

ParameterInRequiredDescription
symbolpathYesUS ticker symbol. Case-insensitive. Tickers get reassigned, so a response may carry a symbolNote.

Try it

GET /api/agent/financials/by-symbol/CRCL

$0.01 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/financials/by-symbol/CRCL"

The payload is in data:

{
  "version": "1",
  "data": {
    "company": "Circle Internet Group, Inc.",
    "symbol": "CRCL",
    "cik": "0001876042",
    "sec": {
      "periodicFinancials": {
        "fetchedAt": "2026-06-23T11:23:08.986Z"
      }
    }
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.cikstringSEC Central Index Key: the registrant's permanent SEC identifier, as a 10-digit string with leading zeros, e.g. 0001876042.
data.fetchedAtstringWhen we last read the statements from SEC, ISO 8601.
data.preIpoPeriodsarray of objectsPeriods reported in the registration statement, before the listing.
data.preIpoPeriods[].periodEndDatestringLast day of the period, YYYY-MM-DD.
data.preIpoPeriods[].periodStartDatestringFirst day of the period, YYYY-MM-DD. Absent for a balance-sheet-only period.
data.preIpoPeriods[].periodTypestringAnnual, Quarterly, Semi-Annual, Nine Months Ended, Instant (a balance-sheet date with no income or cash-flow figures), or N-Day Period for any other length, e.g. 45-Day Period.
data.preIpoPeriods[].durationMonthsintegerLength of the period in whole months: 12 for a year, 3 for a quarter, 6 or 9 for year-to-date, 0 for an Instant.
data.preIpoPeriods[].currencystringISO 4217 currency the figures in metrics are in, e.g. USD, CNY. USD when absent.
data.preIpoPeriods[].fxToUsdnumberUSD per one unit of currency. Multiply a figure by it to get USD. Absent for USD.
data.preIpoPeriods[].fxRateDatestringDate the fxToUsd rate was taken, YYYY-MM-DD: the IPO date for pre-IPO periods, the period end for later ones.
data.preIpoPeriods[].metricsmap of name → numberStatement line items as filed, keyed by line name, in currency, whole units (not thousands). Only the lines the filing reports are present. Every key is listed under Line items.
data.preIpoPeriods[].annualizedMetricsmap of name → numberInterim periods only: the flow items in metrics scaled to twelve months, so a quarter compares with a year. Balance-sheet items are copied unchanged.
data.preIpoPeriods[].annualizationMethodstringHow annualizedMetrics was made: ttm (last full year + this year to date − last year to date) or scaled (× 12 ÷ durationMonths).
data.preIpoPeriods[].derivedmap of name → numberRatios computed from metrics, in percent: grossMarginPct, operatingMarginPct, netMarginPct, fcfMarginPct, revenueGrowthPct, debtToAssetsPct, equityRatioPct, returnOnEquityPct, returnOnAssetsPct, cashToAssetsPct. A ratio is absent when an input is missing.
data.postIpoPeriodsarray of objectsPeriods from the 10-K, 10-Q and 20-F reports filed after the listing.
data.postIpoPeriods[].periodEndDatestringLast day of the period, YYYY-MM-DD.
data.postIpoPeriods[].periodStartDatestringFirst day of the period, YYYY-MM-DD. Absent for a balance-sheet-only period.
data.postIpoPeriods[].periodTypestringAnnual, Quarterly, Semi-Annual, Nine Months Ended, Instant (a balance-sheet date with no income or cash-flow figures), or N-Day Period for any other length, e.g. 45-Day Period.
data.postIpoPeriods[].durationMonthsintegerLength of the period in whole months: 12 for a year, 3 for a quarter, 6 or 9 for year-to-date, 0 for an Instant.
data.postIpoPeriods[].currencystringISO 4217 currency the figures in metrics are in, e.g. USD, CNY. USD when absent.
data.postIpoPeriods[].fxToUsdnumberUSD per one unit of currency. Multiply a figure by it to get USD. Absent for USD.
data.postIpoPeriods[].fxRateDatestringDate the fxToUsd rate was taken, YYYY-MM-DD: the IPO date for pre-IPO periods, the period end for later ones.
data.postIpoPeriods[].metricsmap of name → numberStatement line items as filed, keyed by line name, in currency, whole units (not thousands). Only the lines the filing reports are present. Every key is listed under Line items.
data.postIpoPeriods[].annualizedMetricsmap of name → numberInterim periods only: the flow items in metrics scaled to twelve months, so a quarter compares with a year. Balance-sheet items are copied unchanged.
data.postIpoPeriods[].annualizationMethodstringHow annualizedMetrics was made: ttm (last full year + this year to date − last year to date) or scaled (× 12 ÷ durationMonths).
data.postIpoPeriods[].derivedmap of name → numberRatios computed from metrics, in percent: grossMarginPct, operatingMarginPct, netMarginPct, fcfMarginPct, revenueGrowthPct, debtToAssetsPct, equityRatioPct, returnOnEquityPct, returnOnAssetsPct, cashToAssetsPct. A ratio is absent when an input is missing.
data.symbolNoteobjectPresent only when the ticker you asked for has belonged to more than one company and the record served is not the current holder's. Absent on an ordinary lookup.
data.symbolNote.requestedSymbolstringThe ticker you asked for.
data.symbolNote.servedCikstringCIK of the company whose record this response holds.
data.symbolNote.currentHolderCikstringCIK of the company that holds the ticker today, when known.
data.symbolNote.currentHolderNamestringName of the company that holds the ticker today, when known.
data.symbolNote.reasonstringPlain-language explanation of the mismatch.

Line items

The keys metrics and annualizedMetrics can carry. A period has only the lines its filing reports. Each is read from the XBRL concepts listed.

KeyStatementXBRL concepts
revenueIncome statementus-gaap:Revenues, us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax, us-gaap:SalesRevenueNet, us-gaap:RevenueFromContractWithCustomerIncludingAssessedTax, ifrs-full:Revenue, ifrs-full:RevenueFromContractsWithCustomers
costOfRevenueIncome statementus-gaap:CostOfRevenue, us-gaap:CostOfGoodsAndServicesSold, us-gaap:CostOfGoodsSold, ifrs-full:CostOfSales
grossProfitIncome statementus-gaap:GrossProfit, ifrs-full:GrossProfit
researchAndDevelopmentIncome statementus-gaap:ResearchAndDevelopmentExpense, us-gaap:ResearchAndDevelopmentExpenseExcludingAcquiredInProcessCost, ifrs-full:ResearchAndDevelopmentExpense
sellingGeneralAndAdministrativeIncome statementus-gaap:SellingGeneralAndAdministrativeExpense, us-gaap:GeneralAndAdministrativeExpense
sellingAndMarketingIncome statementus-gaap:SellingAndMarketingExpense, us-gaap:MarketingAndAdvertisingExpense, us-gaap:MarketingExpense
depreciationAndAmortizationIncome statementus-gaap:DepreciationDepletionAndAmortization, us-gaap:DepreciationAmortizationAndAccretionNet, us-gaap:DepreciationAndAmortization, ifrs-full:DepreciationAndAmortisationExpense
operatingExpensesIncome statementus-gaap:OperatingExpenses, ifrs-full:OperatingExpense
costsAndExpensesIncome statementus-gaap:CostsAndExpenses, us-gaap:OperatingCostsAndExpenses, us-gaap:BenefitsLossesAndExpenses
operatingIncomeIncome statementus-gaap:OperatingIncomeLoss, ifrs-full:ProfitLossFromOperatingActivities
interestExpenseIncome statementus-gaap:InterestExpense, us-gaap:InterestExpenseNonoperating, us-gaap:InterestIncomeExpenseNet, ifrs-full:InterestExpense, ifrs-full:FinanceCosts
interestIncomeIncome statementus-gaap:InvestmentIncomeInterest, us-gaap:InterestAndDividendIncomeOperating, us-gaap:InterestIncomeOperating
otherIncomeExpenseNetIncome statementus-gaap:OtherNonoperatingIncomeExpense, us-gaap:NonoperatingIncomeExpense
pretaxIncomeIncome statementus-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesMinorityInterestAndIncomeLossFromEquityMethodInvestments, us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest, ifrs-full:ProfitLossBeforeTax
incomeTaxExpenseIncome statementus-gaap:IncomeTaxExpenseBenefit, ifrs-full:IncomeTaxExpenseContinuingOperations
netIncomeIncome statementus-gaap:NetIncomeLoss, us-gaap:ProfitLoss, us-gaap:IncomeLossFromContinuingOperations, ifrs-full:ProfitLoss
netIncomeToNoncontrollingInterestIncome statementus-gaap:NetIncomeLossAttributableToNoncontrollingInterest
netIncomeAvailableToCommonIncome statementus-gaap:NetIncomeLossAvailableToCommonStockholdersBasic
comprehensiveIncomeIncome statementus-gaap:ComprehensiveIncomeNetOfTax, ifrs-full:ComprehensiveIncome
stockBasedCompensationIncome statementus-gaap:ShareBasedCompensation, us-gaap:AllocatedShareBasedCompensationExpense
operatingCashFlowCash flowus-gaap:NetCashProvidedByUsedInOperatingActivities, us-gaap:NetCashProvidedByUsedInOperatingActivitiesContinuingOperations, ifrs-full:CashFlowsFromUsedInOperatingActivities
investingCashFlowCash flowus-gaap:NetCashProvidedByUsedInInvestingActivities, us-gaap:NetCashProvidedByUsedInInvestingActivitiesContinuingOperations
financingCashFlowCash flowus-gaap:NetCashProvidedByUsedInFinancingActivities, us-gaap:NetCashProvidedByUsedInFinancingActivitiesContinuingOperations
capitalExpendituresCash flowus-gaap:PaymentsToAcquirePropertyPlantAndEquipment, us-gaap:PaymentsToAcquireProductiveAssets, ifrs-full:PurchaseOfPropertyPlantAndEquipmentClassifiedAsInvestingActivities
dividendsPaidCash flowus-gaap:PaymentsOfDividendsCommonStock, us-gaap:PaymentsOfDividends
repurchaseOfStockCash flowus-gaap:PaymentsForRepurchaseOfCommonStock
proceedsFromStockIssuanceCash flowus-gaap:ProceedsFromIssuanceOfCommonStock, us-gaap:ProceedsFromIssuanceInitialPublicOffering, us-gaap:ProceedsFromIssuanceOfCommonStockNetOfIssuanceCosts
netChangeInCashCash flowus-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect, us-gaap:CashAndCashEquivalentsPeriodIncreaseDecrease
proceedsFromDebtCash flowus-gaap:ProceedsFromIssuanceOfLongTermDebt, us-gaap:ProceedsFromIssuanceOfDebt
repaymentOfDebtCash flowus-gaap:RepaymentsOfLongTermDebt, us-gaap:RepaymentsOfDebt
totalAssetsBalance sheetus-gaap:Assets, ifrs-full:Assets
currentAssetsBalance sheetus-gaap:AssetsCurrent, ifrs-full:CurrentAssets
cashAndCashEquivalentsBalance sheetus-gaap:CashAndCashEquivalentsAtCarryingValue, us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents, us-gaap:Cash, ifrs-full:CashAndCashEquivalents
shortTermInvestmentsBalance sheetus-gaap:ShortTermInvestments, us-gaap:MarketableSecuritiesCurrent, us-gaap:AvailableForSaleSecuritiesCurrent
accountsReceivableBalance sheetus-gaap:AccountsReceivableNetCurrent, us-gaap:ReceivablesNetCurrent
prepaidExpensesBalance sheetus-gaap:PrepaidExpenseAndOtherAssetsCurrent, us-gaap:PrepaidExpenseCurrent
inventoryBalance sheetus-gaap:InventoryNet, ifrs-full:Inventories
propertyPlantEquipmentBalance sheetus-gaap:PropertyPlantAndEquipmentNet, ifrs-full:PropertyPlantAndEquipment
operatingLeaseRightOfUseAssetBalance sheetus-gaap:OperatingLeaseRightOfUseAsset
goodwillBalance sheetus-gaap:Goodwill, ifrs-full:Goodwill
intangibleAssetsBalance sheetus-gaap:IntangibleAssetsNetExcludingGoodwill, us-gaap:FiniteLivedIntangibleAssetsNet
otherAssetsNoncurrentBalance sheetus-gaap:OtherAssetsNoncurrent
totalLiabilitiesBalance sheetus-gaap:Liabilities, ifrs-full:Liabilities
currentLiabilitiesBalance sheetus-gaap:LiabilitiesCurrent, ifrs-full:CurrentLiabilities
accountsPayableBalance sheetus-gaap:AccountsPayableCurrent, us-gaap:AccountsPayableAndAccruedLiabilitiesCurrent
accruedLiabilitiesBalance sheetus-gaap:AccruedLiabilitiesCurrent
deferredRevenueBalance sheetus-gaap:ContractWithCustomerLiabilityCurrent, us-gaap:ContractWithCustomerLiability, us-gaap:DeferredRevenueCurrent
remainingPerformanceObligationsBalance sheetus-gaap:RevenueRemainingPerformanceObligation
shortTermDebtBalance sheetus-gaap:LongTermDebtCurrent, us-gaap:DebtCurrent, us-gaap:ShortTermBorrowings
longTermDebtBalance sheetus-gaap:LongTermDebtNoncurrent, us-gaap:LongTermDebt, us-gaap:LongTermDebtAndCapitalLeaseObligations
operatingLeaseLiabilityCurrentBalance sheetus-gaap:OperatingLeaseLiabilityCurrent
operatingLeaseLiabilityBalance sheetus-gaap:OperatingLeaseLiabilityNoncurrent, us-gaap:OperatingLeaseLiability
otherLiabilitiesNoncurrentBalance sheetus-gaap:OtherLiabilitiesNoncurrent
equityItemsBetweenLiabilitiesAndEquityBalance sheetus-gaap:TemporaryEquityCarryingAmountAttributableToParent, us-gaap:TemporaryEquityCarryingAmountIncludingPortionAttributableToNoncontrollingInterests, us-gaap:RedeemableNoncontrollingInterestEquityCarryingAmount, us-gaap:RedeemableNoncontrollingInterestEquityPreferredCarryingAmount, us-gaap:RedeemableNoncontrollingInterestEquityCommonCarryingAmount
totalEquityBalance sheetus-gaap:StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest, us-gaap:StockholdersEquity, ifrs-full:Equity, ifrs-full:EquityAttributableToOwnersOfParent
commonStockValueBalance sheetus-gaap:CommonStockValue
preferredStockValueBalance sheetus-gaap:PreferredStockValue, us-gaap:PreferredStockValueOutstanding
additionalPaidInCapitalBalance sheetus-gaap:AdditionalPaidInCapital, us-gaap:AdditionalPaidInCapitalCommonStock, ifrs-full:SharePremium
retainedEarningsBalance sheetus-gaap:RetainedEarningsAccumulatedDeficit, ifrs-full:RetainedEarnings
treasuryStockValueBalance sheetus-gaap:TreasuryStockValue, us-gaap:TreasuryStockCommonValue
accumulatedOciBalance sheetus-gaap:AccumulatedOtherComprehensiveIncomeLossNetOfTax
noncontrollingInterestBalance sheetus-gaap:MinorityInterest

Ratios

The keys derived can carry, in percent, computed from the same period's metrics.

KeyHow it is computed
grossMarginPctgrossProfit ÷ revenue
operatingMarginPctoperatingIncome ÷ revenue
netMarginPctnetIncome ÷ revenue
fcfMarginPct(operatingCashFlow − capitalExpenditures) ÷ revenue
revenueGrowthPctrevenue against the same-length period about one period earlier
debtToAssetsPcttotalLiabilities ÷ totalAssets
equityRatioPcttotalEquity ÷ totalAssets
returnOnEquityPctnetIncome ÷ totalEquity
returnOnAssetsPctnetIncome ÷ totalAssets
cashToAssetsPctcashAndCashEquivalents ÷ totalAssets

Errors besides the common ones: 404. None is charged.

Live valuation metrics

GET /api/agent/company-metrics

Valuation metrics for any US-listed company, not only IPOs: trailing-twelve-month fundamentals from SEC XBRL company facts and the latest market close, giving P/E, P/S, EV/Revenue, EV/EBITDA, PEG, yields, net debt to EBITDA, margins and year-on-year growth. The response states how each figure is computed. Provide exactly one of symbol or name.

Price: $0.02 per delivered call over x402, or one call from an API key's quota. MCP tool: get_company_metrics.

ParameterInRequiredDescription
symbolqueryNoUS ticker. Any ticker the SEC maps to a registrant.
namequeryNoCompany name, for when the ticker is unknown. Resolves Nasdaq and NYSE listings only.

Try it

GET /api/agent/company-metrics?symbol=CRCL

$0.02 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/company-metrics?symbol=CRCL"

The payload is in data:

{
  "version": "1",
  "data": {
    "listing": {
      "ticker": "CRCL",
      "name": "Circle Internet Group, Inc.",
      "exchange": "NYSE",
      "cik": 1876042
    },
    "priceClose": 64.08,
    "fundamentalsTtm": {
      "revenue": 3030568000,
      "netIncome": 462914000,
      "ebitda": 459250000,
      "freeCashFlow": 740687000,
      "totalDebt": null,
      "cash": 1699951000,
      "sharesOutstanding": 256553104
    },
    "valuation": {
      "marketCap": 16438640139,
      "enterpriseValue": 14738689139,
      "peRatio": 35.51,
      "priceToSalesRatio": 5.42,
      "evRevenueMultiple": 4.86,
      "evEbitda": 32.09,
      "pegRatio": null
    }
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.listingobjectThe company the query resolved to.
data.listing.tickerstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.listing.namestringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.listing.exchangestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.listing.cikintegerSEC Central Index Key as a number, without leading zeros, e.g. 1876042.
data.priceClosenumberLatest daily closing price, USD per share.
data.fundamentalsTtmobjectTrailing-twelve-month figures from SEC XBRL company facts, USD: the last full year + this year to date − last year to date.
data.fundamentalsTtm.revenuenumberRevenue, USD.
data.fundamentalsTtm.netIncomenumberNet income, USD. Negative for a loss.
data.fundamentalsTtm.ebitdanumberOperating income + depreciation and amortization, USD.
data.fundamentalsTtm.freeCashFlownumberOperating cash flow − capital expenditures, USD.
data.fundamentalsTtm.totalDebtnumberDebt at the latest balance sheet, USD: the combined debt figure when filed, else long-term debt + its current portion + short-term borrowings.
data.fundamentalsTtm.cashnumberCash and cash equivalents at the latest balance sheet, USD.
data.fundamentalsTtm.sharesOutstandingnumberShares outstanding used for marketCap. See sharesSource for which count it is.
data.fundamentalsTtm.sharesSourceobjectWhich share count sharesOutstanding is.
data.fundamentalsTtm.sharesSource.methodstringdei-total (the total on a 10-K or 10-Q cover), cover-per-class (the sum of the share classes on the cover) or weighted-average-basic (the EPS denominator, used only when no cover count exists).
data.fundamentalsTtm.sharesSource.asOfstringDate the count is as of, YYYY-MM-DD.
data.fundamentalsTtm.sharesSource.accessionstringAccession number of the filing the count was read from.
data.fundamentalsTtm.sharesSource.classCountintegercover-per-class only: how many share classes were summed.
data.valuationobjectMultiples at priceClose. A multiple is null when its denominator is missing or not positive.
data.valuation.marketCapnumberpriceClose × sharesOutstanding, USD.
data.valuation.enterpriseValuenumbermarketCap + totalDebt − cash, USD. Null unless both debt and cash are reported: an unreported figure is unknown, not 0.
data.valuation.peRationumberPrice to earnings: marketCap ÷ TTM net income. Null when net income is zero or negative.
data.valuation.priceToSalesRationumbermarketCap ÷ TTM revenue.
data.valuation.evRevenueMultiplenumberenterpriseValue ÷ TTM revenue.
data.valuation.evEbitdanumberenterpriseValue ÷ TTM EBITDA. Null when EBITDA is zero or negative.
data.valuation.pegRationumberpeRatio ÷ netIncomeGrowthPct. Null unless both are positive.
data.valuation.earningsYieldPctnumberTTM net income ÷ marketCap, percent.
data.valuation.salesYieldPctnumberTTM revenue ÷ marketCap, percent.
data.valuation.revenueEvYieldPctnumberTTM revenue ÷ enterpriseValue, percent.
data.valuation.ebitdaEvYieldPctnumberTTM EBITDA ÷ enterpriseValue, percent.
data.valuation.freeCashFlowEvYieldPctnumberTTM free cash flow ÷ enterpriseValue, percent. Negative for a company burning cash.
data.valuation.netDebtToEbitdanumber(totalDebt − cash) ÷ TTM EBITDA. Negative when cash exceeds debt; null unless both are reported.
data.profileobjectMargins over the trailing twelve months and growth over the last fiscal year, percent.
data.profile.grossMarginPctnumberGross profit ÷ revenue.
data.profile.ebitdaMarginPctnumberEBITDA ÷ revenue.
data.profile.freeCashFlowMarginPctnumberFree cash flow ÷ revenue.
data.profile.revenueGrowthPctnumberRevenue in the latest fiscal year against the year before. Null when the earlier year is zero or negative.
data.profile.operatingIncomeGrowthPctnumberOperating income in the latest fiscal year against the year before. Null when the earlier year is zero or negative.
data.profile.netIncomeGrowthPctnumberNet income in the latest fiscal year against the year before. Null when the earlier year is zero or negative.
data.sourcesobjectWhere each input came from, in words.
data.sources.fundamentalsstringSource and method of fundamentalsTtm.
data.sources.pricestringSource of priceClose.
data.sources.conventionstringHow EBITDA, enterprise value and PEG are defined.
data.sources.sharesstringWhich share count was used, from which filing, and what it assumes.
data.unavailableobjectPresent instead of the figures when the company resolved but no market cap can be struck.
data.unavailable.reasonstringno-price (no recent close), no-share-count (no share count filed yet) or no-sec-facts (SEC company facts unreadable).
data.unavailable.detailstringPlain-language explanation.

Errors besides the common ones: 400, 404. None is charged.

IPO market sentiment

GET /api/agent/ipo-sentiment

The IPOSignal sentiment score: a daily reading from -100 to +100 of how recent IPOs are being received, with its trend over the last N days.

Price: $0.01 per delivered call over x402, or one call from an API key's quota. MCP tool: get_ipo_sentiment.

ParameterInRequiredDescription
daysqueryNoTrend window in days. Values outside 1 to 90 are clamped. Default 14.

Try it

GET /api/agent/ipo-sentiment?days=14

$0.01 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/ipo-sentiment?days=30"

The payload is in data:

{
  "version": "1",
  "data": {
    "current": {
      "date": "2026-09-21",
      "score": 62,
      "direction": "bullish",
      "strength": "moderate",
      "sampleSize": 18,
      "reliable": true,
      "computedAt": "2026-09-21T06:00:00.000Z"
    },
    "trend": [
      {
        "date": "2026-09-21",
        "score": 62,
        "direction": "bullish",
        "strength": "moderate",
        "sampleSize": 18,
        "reliable": true,
        "computedAt": "2026-09-21T06:00:00.000Z"
      }
    ],
    "summary": "IPO market sentiment is moderately bullish and stable. Score: 62/100 based on 18 recent IPOs."
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.currentobjectThe latest daily score.
data.current.datestringDay the score is for, YYYY-MM-DD.
data.current.scorenumber-100 (extremely bearish) to +100 (extremely bullish). Built from how recent IPOs traded in their first 30 days: the level over the last 30 days and its change against the last 60.
data.current.directionstringbullish, bearish or neutral.
data.current.strengthstringweak, moderate or strong.
data.current.sampleSizeintegerHow many recent IPOs the score is computed from.
data.current.reliablebooleanFalse when sampleSize is below 5: too few IPOs to trust the score.
data.current.computedAtstringWhen the score was computed, ISO 8601.
data.trendarray of objectsDaily scores for the window you asked for, newest first.
data.trend[].datestringDay the score is for, YYYY-MM-DD.
data.trend[].scorenumber-100 (extremely bearish) to +100 (extremely bullish). Built from how recent IPOs traded in their first 30 days: the level over the last 30 days and its change against the last 60.
data.trend[].directionstringbullish, bearish or neutral.
data.trend[].strengthstringweak, moderate or strong.
data.trend[].sampleSizeintegerHow many recent IPOs the score is computed from.
data.trend[].reliablebooleanFalse when sampleSize is below 5: too few IPOs to trust the score.
data.trend[].computedAtstringWhen the score was computed, ISO 8601.
data.summarystringOne sentence: the level, the direction over the last 7 days, and the sample size.

Errors besides the common ones: 404. None is charged.

Social sentiment for one IPO

GET /api/agent/social-sentiment

The aggregate X/Twitter reading for one IPO: a score from -1 to +1, a label, post tallies and a one-line summary. Taken once before listing and not refreshed: ageDays says how old it is, and reliable is false when too few posts back it. The posts themselves are not returned. Provide exactly one of symbol, cik or id.

Price: $0.01 per delivered call over x402, or one call from an API key's quota. MCP tool: get_ipo_social_sentiment.

ParameterInRequiredDescription
symbolqueryNoUS ticker.
cikqueryNoSEC Central Index Key, with or without leading zeros.
idqueryNoIPOSignal company id.

Try it

GET /api/agent/social-sentiment?symbol=CRCL

$0.01 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/social-sentiment?symbol=CRCL"

The payload is in data:

{
  "version": "1",
  "data": {
    "company": "Circle Internet Group, Inc.",
    "symbol": "CRCL",
    "score": 0.41,
    "label": "bullish",
    "postCount": 128,
    "positiveHits": 71,
    "negativeHits": 22,
    "summary": "Discussion skews bullish on listing-day liquidity.",
    "analyzedAt": "2026-09-21T09:12:00.000Z",
    "ageDays": 2,
    "reliable": true
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.scorenumber-1 (all posts bearish) to +1 (all posts bullish), across the posts read.
data.labelstringBullish, Neutral or Bearish.
data.postCountintegerHow many posts on X the reading is based on.
data.positiveHitsintegerPosts scored positive.
data.negativeHitsintegerPosts scored negative.
data.summarystringOne-line summary of the conversation.
data.analyzedAtstringWhen the posts were read, ISO 8601.
data.ageDaysintegerWhole days since analyzedAt. Readings are taken in the days before listing and not refreshed, so an old reading is the pre-IPO mood.
data.reliablebooleanFalse when too few posts back the reading: one post can set the label.
data.symbolNoteobjectPresent only when the ticker you asked for has belonged to more than one company and the record served is not the current holder's. Absent on an ordinary lookup.
data.symbolNote.requestedSymbolstringThe ticker you asked for.
data.symbolNote.servedCikstringCIK of the company whose record this response holds.
data.symbolNote.currentHolderCikstringCIK of the company that holds the ticker today, when known.
data.symbolNote.currentHolderNamestringName of the company that holds the ticker today, when known.
data.symbolNote.reasonstringPlain-language explanation of the mismatch.

Errors besides the common ones: 400, 404. None is charged.

IPO events calendar

GET /api/agent/ipo-events

Dated events across all US IPOs in a window: lock-up expiries with the lock-up length, quiet-period expiries, and listings with offer price, first-day open and close, first-day returns and lead managers. A window with no events is returned without charge.

Price: $0.02 per delivered call over x402, or one call from an API key's quota. MCP tool: get_ipo_events.

ParameterInRequiredDescription
fromqueryNoWindow start, YYYY-MM-DD. Defaults to today.
toqueryNoWindow end, YYYY-MM-DD, inclusive and at most 366 days after from. Defaults to from + 30 days.
typesqueryNoComma-separated subset of lockup_expiry, quiet_period_expiry, listing. Defaults to all.

Try it

GET /api/agent/ipo-events?types=lockup_expiry%2Clisting

$0.02 per call. Without a key this shows the sample response and sends nothing. Create a free key to get live data. The key stays in this browser tab.

curl -H "Authorization: Bearer ips_live_YOUR_KEY" \
  "https://iposignal.xyz/api/agent/ipo-events?types=lockup_expiry"

The payload is in data:

{
  "version": "1",
  "data": {
    "from": "2026-09-01",
    "to": "2026-09-30",
    "types": [
      "lockup_expiry",
      "listing"
    ],
    "count": 2,
    "events": [
      {
        "date": "2026-09-18",
        "type": "listing",
        "company": "Electra Therapeutics, Inc.",
        "symbol": "ETRA",
        "cik": "0002088082",
        "exchange": "NASDAQ",
        "listing": {
          "offerPrice": 15,
          "firstDayOpen": 15,
          "firstDayClose": 13.25,
          "firstDayPopPct": 0,
          "firstDayCloseReturnPct": -11.67,
          "leadManagers": "Jefferies/TD Cowen/Evercore ISI/Cantor"
        }
      },
      {
        "date": "2026-09-27",
        "type": "lockup_expiry",
        "company": "HMH Holding Inc",
        "symbol": "HMH",
        "cik": "0002021880",
        "exchange": "NASDAQ",
        "lockupDays": 180
      }
    ]
  }
}

Response fields

Every field can be null or absent when the source does not state it. Fields not listed here can appear; ignore the ones you do not know.

FieldTypeDescription
data.fromstringWindow start, YYYY-MM-DD.
data.tostringWindow end, YYYY-MM-DD, inclusive.
data.typesarray of stringsEvent types included.
data.countintegerEvents returned.
data.eventsarray of objectsEvents in date order.
data.events[].datestringDay of the event, YYYY-MM-DD.
data.events[].typestringlockup_expiry (insiders may start selling), quiet_period_expiry (underwriters' analysts may start publishing) or listing (first trading day).
data.events[].companystringRegistrant name as filed with the SEC, e.g. Circle Internet Group, Inc.
data.events[].symbolstringTicker symbol the company trades under now, upper case, e.g. CRCL.
data.events[].cikstringSEC Central Index Key: the registrant's permanent SEC identifier, as a 10-digit string with leading zeros, e.g. 0001876042.
data.events[].exchangestringListing exchange: NASDAQ, NYSE, NYSEAMER (NYSE American) or OTC. Other venues verbatim.
data.events[].lockupDaysintegerlockup_expiry only: length of the lock-up in days, typically 180.
data.events[].listingobjectlisting events only: how the first day went.
data.events[].listing.offerPricenumberOffer price, USD per share. Null for a direct listing.
data.events[].listing.firstDayOpennumberFirst-day opening price, USD, as printed (not split-adjusted).
data.events[].listing.firstDayClosenumberFirst-day closing price, USD, as printed (not split-adjusted).
data.events[].listing.firstDayPopPctnumber(firstDayOpen − offerPrice) ÷ offerPrice, percent.
data.events[].listing.firstDayCloseReturnPctnumber(firstDayClose − offerPrice) ÷ offerPrice, percent.
data.events[].listing.leadManagersstringLead underwriters, as IPOScoop lists them.

Errors besides the common ones: 400. None is charged.