API reference

Company data

Profiles, standardised financials, valuation metrics, earnings, ownership, short interest and filings with full text search.

Earnings, IPO and economic calendars

GET /v1/calendar/{type}

1 credit per call 2 credits with fresh=true Operation ID company.calendar

Events in a range of up to 90 days, in date order. Each event fills in the object named after its calendar and leaves the others with null fields.

Path parameters

  • type string Required

    One of earningsiposeconomic

Query parameters

  • from date Required

    First day, YYYY-MM-DD

  • to date Required

    Last day, at most 90 days after from

  • regions array of strings Required

    Comma separated MICs for ipos, and countries for earnings and economic

    Up to 50 items

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

Response

  • data array of objects
    Show 7 fields
    • date date

      The exchange's local date, the UTC date for economic releases

    • earnings object
      Show 5 fields
      • currency string or null
      • epsActual number or null
      • epsEstimate number or null
      • periodEnd date or null
      • reportTime string or null

        One of before_openafter_closeduring_market

    • economic object
      Show 7 fields
      • actual number or null
      • forecast number or null
      • importance string or null

        One of lowmediumhigh

      • period string or null

        The period the figure covers, as published, like Aug or Q2

      • previous number or null
      • time timestamp or null
      • unit string or null
    • ipo object
      Show 7 fields
      • currency string or null
      • price number or null
      • priceHigh number or null
      • priceLow number or null
      • shares number or null
      • status string or null

        One of expectedpricedwithdrawn

      • ticker string or null

        null until the exchange assigns one

    • name string

      The company, or the release

    • region string

      The MIC or country the event belongs to

    • symbol string or null

      null for IPOs and economic releases

  • meta object
    Show 3 fields
    • credits integer

      Credits this call cost

    • nextCursor string or null

      Pass as cursor to get the next page, null on the last page

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Earnings

GET /v1/earnings

2 credits per instrument 4 credits with fresh=true Operation ID company.earnings

Reported and upcoming results per period, EPS and revenue against the consensus estimate, oldest first. Actuals are null until the report is out. from and to bound period ends.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

Response

  • data array of objects
    Show 4 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • earnings array of objects
      Show 10 fields
      • currency string
      • epsActual number or null
      • epsEstimate number or null
      • fiscalPeriod string

        One of FYH1H2Q1Q2Q3Q4

      • fiscalYear integer
      • periodEnd date or null
      • reportDate date or null
      • reportTime string or null

        When on the report date, relative to the exchange's session

        One of before_openafter_closeduring_market

      • revenueActual number or null
      • revenueEstimate number or null
    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • symbol string

      The symbol as sent

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Filings and announcements

GET /v1/filings

2 credits per instrument 4 credits with fresh=true Operation ID filings.list

Every filing and announcement a company made, oldest first. Document URLs are ours, so they're stable. from and to bound the publish date in UTC.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

  • types array of strings

    Comma separated filing types, every type when empty

  • forms array of strings

    Comma separated forms as the regulator names them, like 10-K or Appendix 3Y

    Up to 50 items

Response

  • data array of objects
    Show 4 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • filings array of objects
      Show 11 fields
      • accession string

        The regulator's own id for the filing

      • documents array of objects
        Show 4 fields
        • mediaType string
        • name string
        • role string

          data is a machine readable part, like XBRL

          One of primaryexhibitdata

        • url string or null

          The original document, served by us

      • form string
      • id string
      • periodEnd date or null

        The period a report covers

      • priceSensitive boolean or null

        The exchange's flag on announcements it expects to move the price, null where the exchange doesn't flag

      • publishedAt timestamp
      • regulator string
      • status string

        One of filedrevisedcancelled

      • title string
      • type string

        One of annual_reportinterim_reportquarterly_reportcurrent_reportproxyregistrationinsiderownershipannouncementother

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • symbol string

      The symbol as sent

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Full text search across filings

GET /v1/filings/search

5 credits per call Growth and up 10 credits with fresh=true Operation ID filings.search

Filings whose documents match q, best first. q takes quoted phrases, OR, and a leading minus to leave a word out. Reports and announcements from the last three years can be searched as soon as we hold them. Older or very large filings become searchable once someone opens them with filings.get.

Query parameters

  • q string Required

    Up to 500 characters

  • symbols array of strings

    Comma separated identifiers to search the filings of. Any of their filings in the date range that we don't hold yet are fetched first. Leave it empty to search every filing we hold

    Up to 100 items

  • limit integer

    From 1 to 100. Defaults to 20

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

  • types array of strings

    Comma separated filing types, every type when empty

  • forms array of strings

    Comma separated forms as the regulator names them, like 10-K or Appendix 3Y

    Up to 50 items

Response

  • data array of objects
    Show 13 fields
    • accession string

      The regulator's own id for the filing

    • documents array of objects
      Show 4 fields
      • mediaType string
      • name string
      • role string

        data is a machine readable part, like XBRL

        One of primaryexhibitdata

      • url string or null

        The original document, served by us

    • form string
    • id string
    • periodEnd date or null

      The period a report covers

    • priceSensitive boolean or null

      The exchange's flag on announcements it expects to move the price, null where the exchange doesn't flag

    • publishedAt timestamp
    • rank number

      Higher is a better match, only comparable within one search

    • regulator string
    • snippet string

      Where the match is in the text

    • status string

      One of filedrevisedcancelled

    • title string
    • type string

      One of annual_reportinterim_reportquarterly_reportcurrent_reportproxyregistrationinsiderownershipannouncementother

  • meta object
    Show 3 fields
    • credits integer

      Credits this call cost

    • nextCursor string or null

      Pass as cursor to get the next page, null on the last page

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

One filing with its full text

GET /v1/filings/{id}

2 credits per call 4 credits with fresh=true Operation ID filings.get

A filing with the text of every document, and links to the originals.

Path parameters

  • id string Required

    From filings.list or filings.search

    Matches ^fil_[0-9A-Za-z]{21}$

Response

  • data object
    Show 12 fields
    • accession string

      The regulator's own id for the filing

    • documents array of objects
      Show 4 fields
      • mediaType string
      • name string
      • role string

        data is a machine readable part, like XBRL

        One of primaryexhibitdata

      • url string or null

        The original document, served by us

    • form string
    • id string
    • periodEnd date or null

      The period a report covers

    • priceSensitive boolean or null

      The exchange's flag on announcements it expects to move the price, null where the exchange doesn't flag

    • publishedAt timestamp
    • regulator string
    • status string

      One of filedrevisedcancelled

    • text string

      Text of every document in order, separated by blank lines

    • title string
    • type string

      One of annual_reportinterim_reportquarterly_reportcurrent_reportproxyregistrationinsiderownershipannouncementother

  • meta object
    Show 3 fields
    • asOf timestamp or null

      The point in time this data describes, like when a filing was published. Null where that doesn't apply, as with account data

    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden404 Not Found422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Financial statements

GET /v1/financials

2 credits per instrument 4 credits with fresh=true Operation ID company.financials

One standardised statement per company, oldest period first. Values are in full units of the period's currency, never thousands, and carry the sign they have on the statement, except cash outflows, which are negative. from and to bound period ends.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

  • statement string Required

    One of incomebalancecash_flow

  • period string

    ttm periods are labelled by the quarter they end with

    One of annualhalfquarterlyttm

    Defaults to annual

Response

  • data array of objects
    Show 7 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • lineItems array of objects

      The lines present, in display order

      Show 3 fields
      • code string
      • name string
      • unit string

        One of moneyper_shareshares

    • period string

      One of annualhalfquarterlyttm

    • periods array of objects
      Show 5 fields
      • currency string or null

        null when the period only holds share counts

      • fiscalPeriod string

        One of FYH1H2Q1Q2Q3Q4

      • fiscalYear integer
      • periodEnd date
      • values array of objects
        Show 2 fields
        • lineItem string

          Code from lineItems

        • value number
    • statement string

      One of incomebalancecash_flow

    • symbol string

      The symbol as sent

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Market cap

GET /v1/metrics

1 credit per instrument 2 credits with fresh=true Operation ID company.metrics

Market cap with the share count or coin supply behind it. Without date it's as of the latest price, with date as it stood at the close on or before that day, which leaves out the price and the supply figures only tracked live.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • currency string

    Convert every price into this ISO currency

    Matches ^[A-Z]{3}$

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

  • date date

    Market cap at the close on or before this day, the latest when empty

Response

  • data array of objects
    Show 12 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • circulatingSupply number or null

      Coins in circulation, for crypto

    • currency string

      Of price, marketCap and fdv

    • date date

      The day the figures are for

    • fdv number or null

      Fully diluted valuation, null with date

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • marketCap number
    • maxSupply number or null

      Null with date

    • price number or null

      What each share or coin was valued at, null with date

    • sharesOutstanding number or null

      The company-wide share count, or a fund's units on issue

    • symbol string

      The symbol as sent

    • totalSupply number or null

      Null with date

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Institutional and substantial holders

GET /v1/ownership/holders

2 credits per instrument Growth and up 4 credits with fresh=true Operation ID ownership.holders

institutional is the latest full scheduled report, like US 13F filings. substantial is each holder's latest notice of crossing a threshold, like ASX Form 604, leaving out holders who have exited. Largest first.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

  • type string

    One of institutionalsubstantial

    Defaults to institutional

  • date date

    Holders as they stood on this day, the latest when empty

Response

  • data array of objects
    Show 6 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • date date

      The day the holdings stand at

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • positions array of objects
      Show 7 fields
      • change number or null

        Shares bought or sold since the holder's previous report

      • currency string or null

        Of value

      • holder object
        Show 4 fields
        • cik string or null
        • kind string

          One of institutionfundpersoncompanyother

        • lei string or null
        • name string
      • percent number or null

        Of shares outstanding, 0 to 100

      • reportDate date

        The date the holder reported the position at

      • shares number
      • value number or null
    • symbol string

      The symbol as sent

    • type string

      One of institutionalsubstantial

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Insider trades

GET /v1/ownership/insider-trades

2 credits per instrument Growth and up 4 credits with fresh=true Operation ID ownership.insiderTrades

Directors' and officers' trades from Form 4, Appendix 3Y and their equivalents, oldest first. shares is always positive and acquired says which way the trade went. from and to bound the trade date.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

Response

  • data array of objects
    Show 4 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • symbol string

      The symbol as sent

    • trades array of objects
      Show 14 fields
      • acquired boolean
      • code string or null

        The form's own transaction code, like P or S on a Form 4

      • currency string or null

        Of price

      • derivative boolean

        True for options, rights and other contracts on the shares

      • filedDate date or null
      • indirect boolean

        True when held through someone else, like a family trust

      • insider string
      • price number or null
      • relation string or null
      • security string or null

        What changed hands, as the form names it

      • shares number
      • sharesAfter number or null
      • tradeDate date
      • type string

        One of buysellawardexercisegiftother

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Company profiles

GET /v1/profiles

1 credit per instrument 2 credits with fresh=true Operation ID company.profiles

Who a company is: its name, country, where it sits in our sector taxonomy, its logo and its identifiers. Unknown fields are null, and the industry is known once the company's exchange listing has been screened.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

Response

  • data array of objects
    Show 10 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • cik string or null

      SEC Central Index Key, for SEC registrants

    • country string or null
    • industry string or null

      Industry id from /v1/sectors

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • lei string or null

      Legal Entity Identifier

    • logo string or null

      URL of the logo, served by us

    • name string
    • sector string or null

      Sector id from /v1/sectors

    • symbol string

      The symbol as sent

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.

Short interest

GET /v1/short-interest

1 credit per instrument 2 credits with fresh=true Operation ID company.shortInterest

The aggregate short position as the regulator publishes it: daily for ASIC, each settlement date for FINRA. Regulators that only publish a percentage leave shares null. Defaults to the last week.

Query parameters

  • symbols array of strings Required

    Comma separated identifiers, up to 100, like ASX:VAS, isin:AU000000VAS1 or ins_...

    Up to 100 items

  • from date

    First day, YYYY-MM-DD

  • to date

    Last day, YYYY-MM-DD

  • fresh boolean

    Skip our cache and fetch from sources. Items fetched fresh cost double

  • format string

    Response format

    One of jsoncsv

    Defaults to json

Response

  • data array of objects
    Show 4 fields
    • asOf timestamp

      The point in time this data describes. For history and events it's the date of the newest record, or the end of your range when there are none. Live values give when they were observed, and reference data gives when we last checked it with a source

    • instrument object

      What the symbol resolved to

      Show 7 fields
      • country string or null
      • currency string or null
      • id string
      • mic string or null
      • name string
      • symbol string
      • type string

        One of equityetffundindexfxcryptotokenratefuturecommoditybond

    • positions array of objects
      Show 6 fields
      • averageVolume number or null
      • date date
      • daysToCover number or null
      • percent number or null

        Of shares on issue, 0 to 100

      • shares number or null
      • sharesOutstanding number or null

        The shares on issue the regulator measured against

    • symbol string

      The symbol as sent

  • errors array of objects
    Show 3 fields
    • code string

      One of invalid_symbolinstrument_not_foundnot_supporteddata_unavailabledata_pendingsource_failed

    • message string
    • symbol string
  • meta object
    Show 2 fields
    • credits integer

      Credits this call cost

    • requestId string

Errors

400 Bad Request401 Unauthorized402 Payment Required403 Forbidden422 Unprocessable Entity429 Too Many Requests500 Internal Server Error503 Service Unavailable

Every error body is problem+json with a stable code. See errors.