Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Ninjas Earnings Call Transcript API
description: 'Combined OpenAPI specification for every API Ninjas endpoint. Requests go to https://api.api-ninjas.com with an `X-Api-Key` header; get a free key at https://api-ninjas.com/register. Human-readable docs: https://api-ninjas.com/api. Index for LLMs: https://api-ninjas.com/llms.txt.'
version: 1.0.0
contact:
name: API Ninjas
url: https://api-ninjas.com
license:
name: Proprietary
servers:
- url: https://api.api-ninjas.com
description: API Ninjas Production
security:
- ApiKeyAuth: []
tags:
- name: Earnings Call Transcript
description: The Earnings Call Transcript API provides access to full transcripts of earnings calls for major companies every quarter.
paths:
/v1/earningstranscript:
get:
summary: Get Earnings Call Transcript
description: Returns the full text of one company's earnings call. Requires a `ticker` or `cik`; to find which calls exist first, use /earningstranscriptsearch. Choosing a `quarter` requires premium.
operationId: getEarningsTranscript
tags:
- Earnings Call Transcript
parameters:
- name: ticker
in: query
required: false
schema:
type: string
description: Company ticker symbol (e.g., AAPL). Either ticker or cik must be provided. Share classes and preferred shares can be written in any common form, e.g. BRK.B, BRK-B, BRK/B or BRKB, and BAC.PRL or BAC-PL. Non-US stocks take an exchange suffix (SHEL.L, 7203.T) or prefix (LON:SHEL).
- name: cik
in: query
required: false
schema:
type: string
description: Company Central Index Key (e.g., 320193). Either ticker or cik must be provided.
- name: year
in: query
schema:
type: integer
format: int32
minimum: 2000
description: Earnings year (e.g., 2025). Must be a valid year between 2000 and the current year. If provided, quarter must also be provided. Premium only.
- name: quarter
in: query
schema:
type: integer
format: int32
enum:
- 1
- 2
- 3
- 4
description: Earnings quarter from Q1 to Q4. If provided, year must also be provided. Premium only.
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/EarningsTranscriptResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'500':
description: Internal Server Error
security:
- ApiKeyAuth: []
/v1/earningstranscriptlist:
get:
summary: List All Earnings Call Transcripts
description: Lists all available earnings call transcripts, paged with `limit` and `offset`. To filter by ticker, CIK or date use /earningstranscriptsearch; for the text of one call use /earningstranscript.
operationId: listEarningsCallTranscripts
tags:
- Earnings Call Transcript
parameters:
- name: limit
in: query
schema:
type: integer
minimum: 1
description: Number of results to return. Default is unlimited - all results will be returned.
- name: offset
in: query
schema:
type: integer
minimum: 0
default: 0
description: 'Number of results to skip for pagination. Default: 0.'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/EarningsTranscriptsListResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'500':
description: Internal Server Error
security:
- ApiKeyAuth: []
/v1/earningstranscriptsearch:
get:
summary: Search for available earnings call transcripts by ticker, CIK, date, or date…
description: Finds which earnings call transcripts are available by ticker, CIK, date or date range, with paginated results. Returns the matching calls, not their text; read that from /earningstranscript.
operationId: searchEarningsTranscripts
tags:
- Earnings Call Transcript
parameters:
- name: ticker
in: query
required: false
schema:
type: string
description: Company ticker symbol (e.g., MSFT). At least one of ticker, cik, date, or start_date/end_date must be provided. Share classes and preferred shares can be written in any common form, e.g. BRK.B, BRK-B, BRK/B or BRKB, and BAC.PRL or BAC-PL. Non-US stocks take an exchange suffix (SHEL.L, 7203.T) or prefix (LON:SHEL).
- name: cik
in: query
required: false
schema:
type: string
description: Company Central Index Key (e.g., 789019). For US companies registered with the SEC only.
- name: date
in: query
required: false
schema:
type: string
description: Earnings call date in YYYY-MM-DD format (e.g., 2024-05-02). Mutually exclusive with start_date/end_date.
- name: start_date
in: query
required: false
schema:
type: string
description: Start of the earnings call date range (inclusive), YYYY-MM-DD. Must be paired with end_date. When ticker and cik are both omitted, the range cannot exceed 30 days.
- name: end_date
in: query
required: false
schema:
type: string
description: End of the earnings call date range (inclusive), YYYY-MM-DD. Must be paired with start_date.
- name: limit
in: query
required: false
schema:
type: integer
default: 20
minimum: 1
maximum: 200
description: Maximum number of results to return. Default 20; values above 200 are clamped to 200.
- name: offset
in: query
required: false
schema:
type: integer
default: 0
minimum: 0
description: Number of results to skip for pagination. Default 0.
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/EarningsTranscriptSearchResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'500':
description: Internal Server Error
security:
- ApiKeyAuth: []
/v1/earningstranscriptspeaker:
get:
summary: Search earnings-call speakers, or get one speaker's profile and appearance…
description: Searches earnings-call speakers by name, company, analyst firm, role or type, or returns one speaker's profile, coverage and appearance history when `id` is given.
operationId: getEarningsCallSpeaker
tags:
- Earnings Call Transcript
parameters:
- name: id
in: query
required: false
schema:
type: string
description: Resolved speaker_id. When provided, the endpoint returns that single speaker's profile, per-company coverage, and appearance history (detail mode). Search filters are ignored in detail mode, except ticker/year/quarter (which filter the appearance list) and limit/offset (which paginate it).
- name: name
in: query
required: false
schema:
type: string
description: Substring match on the speaker's name (search mode).
- name: company
in: query
required: false
schema:
type: string
description: Substring match on an executive's primary company (search mode).
- name: analyst_firm
in: query
required: false
schema:
type: string
description: Substring match on an analyst's firm (search mode).
- name: role
in: query
required: false
schema:
type: string
description: Substring match on role/title (search mode).
- name: speaker_type
in: query
required: false
schema:
type: string
enum:
- executive
- analyst
description: Filter by speaker type (search mode).
- name: ticker
in: query
required: false
schema:
type: string
description: In search mode, restrict to people who appeared on this company's calls. In detail mode, filter the appearance list to this company. Share classes and preferred shares can be written in any common form, e.g. BRK.B, BRK-B, BRK/B or BRKB, and BAC.PRL or BAC-PL. Non-US stocks take an exchange suffix (SHEL.L, 7203.T) or prefix (LON:SHEL).
- name: year
in: query
required: false
schema:
type: integer
format: int32
description: Filter by fiscal year.
- name: quarter
in: query
required: false
schema:
type: integer
format: int32
enum:
- 1
- 2
- 3
- 4
description: Filter by fiscal quarter (1-4). In search mode, requires year.
- name: sort_by
in: query
required: false
schema:
type: string
enum:
- appearance_count
- last_appearance_date
- name
default: appearance_count
description: Sort field (search mode).
- name: sort_dir
in: query
required: false
schema:
type: string
enum:
- asc
- desc
description: Sort direction (search mode). Defaults to desc, or asc when sort_by=name.
- name: include_appearances
in: query
required: false
schema:
type: boolean
default: false
description: When true (search mode), include each returned speaker's appearance list.
- name: limit
in: query
required: false
schema:
type: integer
description: 'Search mode: speakers per page (default 25, max 100). Detail mode: appearances per page (default 50, max 200).'
- name: offset
in: query
required: false
schema:
type: integer
default: 0
minimum: 0
description: Number of results to skip for pagination. Default 0.
responses:
'200':
description: A speaker search result (no id) or a single speaker detail object (id provided).
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/SpeakerSearchResponse'
- $ref: '#/components/schemas/SpeakerDetailResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'500':
description: Internal Server Error
security:
- ApiKeyAuth: []
/v1/earningstranscriptparticipants:
get:
summary: List the executives and analysts who appeared on a company's earnings calls
description: Lists the executives and analysts who appeared on one company's earnings calls. Requires a `ticker` or `cik`. For a single person across companies use /earningstranscriptspeaker.
operationId: getEarningsCallParticipants
tags:
- Earnings Call Transcript
parameters:
- name: ticker
in: query
required: false
schema:
type: string
description: Company ticker symbol (e.g. AAPL). Either ticker or cik must be provided. Share classes and preferred shares can be written in any common form, e.g. BRK.B, BRK-B, BRK/B or BRKB, and BAC.PRL or BAC-PL. Non-US stocks take an exchange suffix (SHEL.L, 7203.T) or prefix (LON:SHEL).
- name: cik
in: query
required: false
schema:
type: string
description: Company Central Index Key (e.g. 320193). Either ticker or cik must be provided.
- name: speaker_type
in: query
required: false
schema:
type: string
enum:
- executive
- analyst
description: Restrict to the management roster (executive) or the covering analysts (analyst).
- name: sort_by
in: query
required: false
schema:
type: string
enum:
- appearance_count
- last_appearance_date
- name
default: appearance_count
description: Sort field.
- name: sort_dir
in: query
required: false
schema:
type: string
enum:
- asc
- desc
description: Sort direction. Defaults to desc, or asc when sort_by=name.
- name: limit
in: query
required: false
schema:
type: integer
default: 50
minimum: 1
maximum: 200
description: Maximum number of participants to return. Default 50; values above 200 are clamped to 200.
- name: offset
in: query
required: false
schema:
type: integer
default: 0
minimum: 0
description: Number of results to skip for pagination. Default 0.
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ParticipantsResponse'
'400':
description: Bad Request
'401':
description: Unauthorized
'500':
description: Internal Server Error
security:
- ApiKeyAuth: []
components:
schemas:
ParticipantsResponse:
type: object
properties:
ticker:
type:
- string
- 'null'
description: The company ticker.
cik:
type:
- string
- 'null'
description: The company CIK.
participants:
type: array
items:
$ref: '#/components/schemas/Participant'
pagination:
$ref: '#/components/schemas/Pagination'
SpeakerAppearance:
type: object
properties:
transcript_id:
type: string
description: Identifier of the earnings call transcript (e.g. aapl-2026-q2).
ticker:
type: string
description: Ticker of the company holding the call.
cik:
type:
- string
- 'null'
description: CIK of the company holding the call.
year:
type: integer
description: Fiscal year of the call.
quarter:
type: integer
description: Fiscal quarter of the call (1-4).
date:
type:
- string
- 'null'
format: date
description: Date of the call.
role:
type:
- string
- 'null'
description: The person's role on this specific call.
company:
type:
- string
- 'null'
description: The person's affiliation on this call (issuer for executives; firm for analysts).
speaker_type:
type: string
enum:
- executive
- analyst
description: Classification on this call.
turn_count:
type: integer
description: Number of speaking turns the person had on this call.
EarningsTranscriptResponse:
type: object
properties:
date:
type: string
format: date
description: The date of the earnings call.
timestamp:
type:
- integer
- 'null'
description: The UNIX timestamp (in seconds) of the earnings call to the nearest minute. Premium only.
ticker:
type: string
description: The ticker symbol of the company.
cik:
type: string
description: The CIK of the company.
year:
type: string
description: The year of the earnings call.
quarter:
type: string
description: The quarter of the earnings call.
earnings_timing:
type:
- string
- 'null'
enum:
- before_market
- during_market
- after_market
- null
description: Timing of the earnings call. Premium only.
transcript:
type: string
description: The transcript of the earnings call as a single string.
participants:
type:
- array
- 'null'
items:
type: object
properties:
name:
type: string
description: The name of the participant.
role:
type: string
description: The role of the participant.
company:
type: string
description: The company the participant represents.
description: The list of participants of the earnings call. Premium only.
summary:
type: string
description: A concise summary of the earnings call, covering the main points discussed including financial performance, key metrics, and strategic initiatives. Business tier and above.
guidance:
type: string
description: Forward-looking guidance issued by the company during the call, including revenue projections, earnings estimates, margin expectations, or other forecasts. Business tier and above.
risk_factors:
type: string
description: Risk factors, challenges, headwinds, or concerns mentioned during the call that could negatively impact the company's future performance. Business tier and above.
overall_sentiment:
type: number
description: The overall sentiment of the entire transcript on a scale from -1 (very negative) to 1 (very positive), where 0 is neutral. Business tier and above.
overall_sentiment_rationale:
type: string
description: A brief explanation of the overall sentiment score, including key positive signals, key negative signals, and the reasoning behind the score. Business tier and above.
transcript_split:
type:
- array
- 'null'
items:
type: object
properties:
speaker:
type: string
description: The name of the speaker.
company:
type: string
description: The company the speaker represents.
role:
type: string
description: The role of the speaker.
text:
type: string
description: The text spoken by the speaker.
sentiment:
type: number
description: Sentiment score for this segment from -1 (very negative) to 1 (very positive).
sentiment_rationale:
type: string
description: Brief explanation of the sentiment score.
speaker_type:
type: string
enum:
- management
- investor
- operator
description: Type of speaker.
is_qa:
type: boolean
description: Whether this segment is part of the Q&A portion of the call.
description: The transcript of the earnings call split into sections by speaker. Premium only.
SpeakerDetailResponse:
description: Returned by /earningstranscriptspeaker in detail mode (id provided). An empty object {} is returned if the id is unknown.
allOf:
- $ref: '#/components/schemas/Speaker'
- type: object
properties:
coverage:
type: array
items:
$ref: '#/components/schemas/SpeakerCoverage'
description: Per-company rollup of the person's appearances.
appearances_pagination:
$ref: '#/components/schemas/Pagination'
Pagination:
type: object
properties:
total:
type: integer
description: Total number of matching records across all pages.
count:
type: integer
description: Number of records returned on this page.
limit:
type: integer
description: Page size used.
offset:
type: integer
description: Number of records skipped.
has_more:
type: boolean
description: True if more records exist beyond this page.
EarningsTranscriptsListResponse:
type: array
items:
type: object
properties:
ticker:
type: string
description: The company ticker symbol.
company:
type: string
description: The company name.
description: A list of all available earnings call transcripts.
Participant:
type: object
properties:
speaker_id:
type: string
description: Stable speaker identifier.
name:
type: string
description: Display name.
speaker_type:
type: string
enum:
- executive
- analyst
description: Executive or sell-side analyst.
role:
type:
- string
- 'null'
description: Most recent role on this company's calls.
analyst_firm:
type:
- string
- 'null'
description: Analyst's firm (analysts only).
appearance_count:
type: integer
description: Number of this company's calls the person appeared on.
first_appearance_date:
type:
- string
- 'null'
format: date
description: First appearance on this company's calls.
last_appearance_date:
type:
- string
- 'null'
format: date
description: Most recent appearance on this company's calls.
SpeakerSearchResponse:
type: object
description: Returned by /earningstranscriptspeaker in search mode (no id parameter).
properties:
speakers:
type: array
items:
$ref: '#/components/schemas/Speaker'
pagination:
$ref: '#/components/schemas/Pagination'
EarningsTranscriptSearchResponse:
type: array
items:
type: object
properties:
ticker:
type: string
description: The company ticker symbol.
year:
type: string
description: The year of the earnings call transcript.
quarter:
type: string
description: The quarter of the earnings call transcript (1, 2, 3, or 4).
date:
type: string
description: The earnings call date in YYYY-MM-DD format.
description: A list of available earnings call transcripts.
SpeakerCoverage:
type: object
properties:
ticker:
type: string
description: Ticker the person appeared for.
cik:
type:
- string
- 'null'
description: CIK of that company.
appearance_count:
type: integer
description: Number of that company's calls the person appeared on.
first_appearance_date:
type:
- string
- 'null'
format: date
description: First appearance for that company.
last_appearance_date:
type:
- string
- 'null'
format: date
description: Most recent appearance for that company.
Speaker:
type: object
properties:
speaker_id:
type: string
description: Stable identifier for the resolved person. Pass it back as the id parameter to fetch full detail.
name:
type: string
description: Display name of the speaker.
speaker_type:
type: string
enum:
- executive
- analyst
description: Whether the person is a company executive or a sell-side analyst.
primary_company:
type:
- string
- 'null'
description: For executives, the company they represent.
primary_company_ticker:
type:
- string
- 'null'
description: Ticker of the primary company (executives).
primary_cik:
type:
- string
- 'null'
description: CIK of the primary company (executives).
analyst_firm:
type:
- string
- 'null'
description: For analysts, their most recent firm.
primary_role:
type:
- string
- 'null'
description: Most common role or title.
role_variants:
type: array
items:
type: string
description: All distinct roles/titles observed for this person, most frequent first.
appearance_count:
type: integer
description: Number of distinct earnings calls the person appeared on.
distinct_companies:
type: integer
description: Number of distinct companies the person appeared for.
distinct_tickers:
type: integer
description: Number of distinct tickers the person appeared for.
first_appearance_date:
type:
- string
- 'null'
format: date
description: Earliest appearance date.
last_appearance_date:
type:
- string
- 'null'
format: date
description: Most recent appearance date.
appearances:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/SpeakerAppearance'
description: The person's appearances. In search mode, present only when include_appearances=true; always present in detail mode.
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-Api-Key
externalDocs:
description: API Ninjas documentation
url: https://api-ninjas.com/api