datahyena-com Exec Moves API
Executive job-change signals across tracked companies and people.
Executive job-change signals across tracked companies and people.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/datahyena-com:datahyena-com-exec-moves-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Datahyena Public Exec Moves API
description: Read-only API for funding events, acquisitions, executive moves, hiring signals, companies, and investors.
version: '1.0'
contact: {}
servers:
- url: https://api.datahyena.com
description: Production
security:
- apiKey: []
tags:
- name: exec-moves
description: Executive job-change signals across tracked companies and people.
x-displayName: Executive Moves
paths:
/v1/exec-moves:
get:
description: Returns executive appointment, promotion, departure, and transition events ordered by announcement date, newest first. Costs one credit per returned record.
operationId: exec_moves_list
parameters:
- name: cursor
required: false
in: query
description: Opaque pagination cursor returned as pagination.nextCursor.
schema:
type: string
- name: companyId
required: false
in: query
description: Company UUID filter.
schema:
example: 01jykbrpavr3zdvcpzxv
type: string
- name: domain
required: false
in: query
description: Return only moves at the company with this domain. Matches the company's primary domain or any domain it has redirected from; a full URL is accepted. A domain we do not hold yet returns an empty page with status 202, a Retry-After header and meta.discovery.status 'building' while we look the company up; call again after that many seconds.
schema:
example: stripe.com
type: string
- name: includeTotal
required: false
in: query
description: Also return pagination.total, the number of records matching these filters across all pages. Costs no credits; adds a count query, so ask for it when you need the list size.
schema:
example: true
type: boolean
- name: personId
required: false
in: query
description: Person UUID filter.
schema:
example: 01jykbrpavr3zdvcpzxw
type: string
- name: countries
required: false
in: query
description: Headquarters country codes (OR). Repeat the query key for multiple values.
schema:
example:
- US
- GB
type: array
items:
type: string
enum:
- AD
- AE
- AF
- AG
- AI
- AL
- AM
- AO
- AR
- AS
- AT
- AU
- AW
- AX
- AZ
- BA
- BB
- BD
- BE
- BF
- BG
- BH
- BI
- BJ
- BL
- BM
- BN
- BO
- BQ
- BR
- BS
- BT
- BW
- BY
- BZ
- CA
- CD
- CF
- CG
- CH
- CI
- CK
- CL
- CM
- CN
- CO
- CR
- CU
- CV
- CW
- CY
- CZ
- DE
- DJ
- DK
- DM
- DO
- DZ
- EC
- EE
- EG
- EH
- ER
- ES
- ET
- FI
- FJ
- FK
- FM
- FO
- FR
- GA
- GB
- GD
- GE
- GF
- GG
- GH
- GI
- GL
- GM
- GN
- GP
- GQ
- GR
- GT
- GU
- GW
- GY
- HK
- HN
- HR
- HT
- HU
- ID
- IE
- IL
- IM
- IN
- IQ
- IR
- IS
- IT
- JE
- JM
- JO
- JP
- KE
- KG
- KH
- KI
- KM
- KN
- KP
- KR
- KW
- KY
- KZ
- LA
- LB
- LC
- LI
- LK
- LR
- LS
- LT
- LU
- LV
- LY
- MA
- MC
- MD
- ME
- MF
- MG
- MH
- MK
- ML
- MM
- MN
- MO
- MP
- MQ
- MR
- MS
- MT
- MU
- MV
- MW
- MX
- MY
- MZ
- NA
- NC
- NE
- NG
- NI
- NL
- 'NO'
- NP
- NR
- NU
- NZ
- OM
- PA
- PE
- PF
- PG
- PH
- PK
- PL
- PM
- PR
- PS
- PT
- PW
- PY
- QA
- RE
- RO
- RS
- RU
- RW
- SA
- SB
- SC
- SD
- SE
- SG
- SH
- SI
- SK
- SL
- SM
- SN
- SO
- SR
- SS
- ST
- SV
- SX
- SY
- SZ
- TC
- TD
- TG
- TH
- TJ
- TK
- TL
- TM
- TN
- TO
- TR
- TT
- TV
- TW
- TZ
- UA
- UG
- US
- UY
- UZ
- VA
- VC
- VE
- VG
- VI
- VN
- VU
- WF
- WS
- YE
- YT
- ZA
- ZM
- ZW
- unknown
- name: naicsCode
required: false
in: query
description: 'NAICS 2022 code for the company. Matches the code and everything beneath it, so "51" also returns 5132 and 5173. Any 2- to 6-digit NAICS code is accepted; codes deeper than we classify (e.g. 541511) match at their deepest classified parent (5415). Sector ranges work: "31-33" returns all manufacturing. Pass "unknown" for companies we could not classify.'
schema:
example: '5132'
type: string
enum:
- '11'
- '111'
- '1114'
- '113'
- '114'
- '21'
- '2111'
- '212'
- '22'
- '2211'
- '2213'
- '23'
- '236'
- '2361'
- '238'
- '2382'
- 31-33
- '311'
- '3111'
- '3115'
- '3116'
- '3117'
- '3118'
- '3121'
- '3122'
- '313'
- '315'
- '316'
- '3162'
- '321'
- '322'
- '3222'
- '323'
- '325'
- '3253'
- '3254'
- '3255'
- '3256'
- '3261'
- '327'
- '3272'
- '331'
- '332'
- '3323'
- '3325'
- '3328'
- '3331'
- '3332'
- '3334'
- '3341'
- '3342'
- '3343'
- '3344'
- '3345'
- '335'
- '3351'
- '3352'
- '3353'
- '3359'
- '336'
- '3361'
- '3363'
- '3364'
- '3365'
- '3366'
- '337'
- '3372'
- '3391'
- '3399'
- '42'
- '4231'
- '4233'
- '4234'
- '4235'
- '4236'
- '4238'
- '4244'
- '4245'
- '4246'
- '4247'
- '4248'
- 44-45
- '4411'
- '4441'
- '4451'
- '4491'
- '4561'
- '4571'
- '458'
- '4591'
- '4593'
- 48-49
- '4811'
- '482'
- '483'
- '484'
- '485'
- '4851'
- '4853'
- '4921'
- '493'
- '51'
- '5121'
- '5122'
- '5131'
- '5132'
- '5161'
- '5162'
- '5173'
- '519'
- '5192'
- '52'
- '5221'
- '5231'
- '5239'
- '5241'
- '5242'
- '53'
- '5311'
- '5312'
- '532'
- '5322'
- '54'
- '5411'
- '5412'
- '5413'
- '5414'
- '5415'
- '5416'
- '5417'
- '5418'
- '5419'
- '5511'
- '56'
- '5613'
- '5614'
- '5615'
- '5616'
- '5617'
- '562'
- '5621'
- '611'
- '6111'
- '6113'
- '6114'
- '6115'
- '621'
- '6213'
- '6214'
- '6215'
- '6216'
- '622'
- '623'
- '6241'
- '6242'
- '6244'
- '71'
- '7111'
- '7112'
- '7115'
- '712'
- '7132'
- '7139'
- '721'
- '722'
- '7225'
- '81'
- '811'
- '8111'
- '812'
- '8121'
- '8123'
- '8129'
- '813'
- '8131'
- '8132'
- '8134'
- '8139'
- '92'
- '9211'
- '9221'
- '9281'
- unknown
- name: roleSeniority
required: false
in: query
description: Role seniority filters. Repeat the query key for multiple values.
schema:
example:
- c_level
type: array
items:
type: string
enum:
- c_level
- vp_level
- founder
- name: moveType
required: false
in: query
description: Move type filters. Repeat the query key for multiple values.
schema:
example:
- appointment
- promotion
type: array
items:
type: string
enum:
- appointment
- promotion
- departure
- transition
- name: since
required: false
in: query
description: Return events announced on or after this date (YYYY-MM-DD). ISO-8601 timestamps are also accepted.
schema:
example: '2026-05-01'
type: string
- name: until
required: false
in: query
description: Return events announced on or before this date (YYYY-MM-DD, inclusive). ISO-8601 timestamps are also accepted.
schema:
example: '2026-05-30'
type: string
- name: limit
required: false
in: query
description: Maximum records to return.
schema:
minimum: 1
maximum: 100
default: 20
type: number
responses:
'200':
description: Request accepted. The number of records returned may be lower than limit when credits or data run out.
content:
application/json:
schema:
type: object
required:
- success
- data
- pagination
- meta
properties:
success:
type: boolean
enum:
- true
example: true
data:
type: array
items:
$ref: '#/components/schemas/PublicExecMoveEventResponseItem'
pagination:
$ref: '#/components/schemas/PublicPagination'
meta:
$ref: '#/components/schemas/PublicResponseMeta'
'400':
description: Invalid query parameter, body, or pagination cursor.
content:
application/json:
schema:
$ref: '#/components/schemas/PublicErrorEnvelope'
example:
success: false
error:
code: INVALID_INPUT
message: limit must not be greater than 100
meta:
requestId: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
'401':
description: Missing, invalid, or disabled API key.
content:
application/json:
schema:
$ref: '#/components/schemas/PublicErrorEnvelope'
example:
success: false
error:
code: UNAUTHORIZED
message: Missing or invalid API key.
meta:
requestId: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
'402':
description: Workspace has no credits available for the request.
content:
application/json:
schema:
$ref: '#/components/schemas/PublicErrorEnvelope'
example:
success: false
error:
code: PAYMENT_REQUIRED
message: Workspace has no credits remaining. Top up to continue.
meta:
requestId: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
'403':
description: Request blocked by abuse prevention policy.
content:
application/json:
schema:
$ref: '#/components/schemas/PublicErrorEnvelope'
example:
success: false
error:
code: FORBIDDEN
message: Request blocked by abuse prevention policy.
meta:
requestId: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
'429':
description: Rate limit exceeded for this workspace and plan.
content:
application/json:
schema:
$ref: '#/components/schemas/PublicErrorEnvelope'
example:
success: false
error:
code: TOO_MANY_REQUESTS
message: Rate limit exceeded for this workspace and plan.
meta:
requestId: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
security:
- apiKey: []
summary: List executive moves
tags:
- exec-moves
components:
schemas:
PublicExecMoveEventResponseItem:
type: object
properties:
id:
type: string
example: 019e8a3c-0a12-7e88-a3d1-4f5a6b7c8d9e
person:
$ref: '#/components/schemas/ExecMovePersonDto'
role:
type: string
example: Chief Financial Officer
roleSeniority:
type: string
enum:
- c_level
- vp_level
- founder
example: c_level
moveType:
type: string
enum:
- appointment
- promotion
- departure
- transition
example: appointment
announcedAt:
type:
- object
- 'null'
example: '2026-05-29T00:00:00.000Z'
effectiveDate:
type:
- object
- 'null'
example: '2026-06-15T00:00:00.000Z'
discoveredAt:
type: string
example: '2026-05-30T12:00:00.000Z'
company:
$ref: '#/components/schemas/PublicCompanyDto'
fromCompany:
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/PublicCompanyDto'
required:
- id
- person
- role
- roleSeniority
- moveType
- announcedAt
- effectiveDate
- discoveredAt
- company
- fromCompany
CountryDto:
type: object
properties:
code:
type: string
example: US
description: ISO 3166-1 alpha-2 country code.
name:
type: string
example: United States
description: Human-readable country name.
required:
- code
- name
PublicResponseMeta:
type: object
properties:
endpoint:
type: string
example: funding_events.list
description: Stable endpoint identifier for logging and support.
creditsUsed:
type: number
example: 20
description: Credits consumed by this request after the response size is known.
creditsRemaining:
type:
- object
- 'null'
example: 980
description: Workspace credits remaining after this request.
notice:
type: string
example: No events on record for this company.
description: 'Present only when a lookup resolved nothing. Absence of a company is an ordinary outcome here, not a failed request: records are built from funding, acquisition and executive-move announcements, so a company that has not appeared in one is simply not covered.'
discovery:
description: Present when we held nothing for an exact domain and have started researching it. Ask again later; nothing is charged meanwhile.
allOf:
- $ref: '#/components/schemas/DiscoveryMeta'
required:
- endpoint
- creditsUsed
- creditsRemaining
PublicErrorEnvelope:
type: object
properties:
success:
type: boolean
enum:
- false
example: false
error:
$ref: '#/components/schemas/PublicErrorBody'
meta:
$ref: '#/components/schemas/PublicErrorMeta'
required:
- success
- error
- meta
PublicCompanyDto:
type: object
properties:
id:
type:
- object
- 'null'
example: 019e8a3c-2b10-7c44-8a1f-9d8e7c6b5a40
name:
type: string
example: Acme AI
domain:
type:
- object
- 'null'
example: acme.ai
website:
type:
- object
- 'null'
example: https://www.acme.ai/
description: The address the company website loads at, which can differ from domain (for example a www host). Null when no working site is known.
description:
type:
- object
- 'null'
example: AI workflow automation for enterprise revenue teams.
linkedinHandle:
type:
- object
- 'null'
example: acme-ai
linkedinUrl:
type:
- object
- 'null'
example: https://www.linkedin.com/company/acme-ai
linkedinGeoId:
type:
- object
- 'null'
example: '90000084'
linkedinIndustryId:
type:
- object
- 'null'
example: '4'
naicsCode:
type:
- object
- 'null'
example: '5132'
description: NAICS 2022 code derived from the industry classification. Null when no honest mapping exists.
naicsLevel:
type:
- number
- 'null'
example: 4
enum:
- 2
- 3
- 4
description: 'Depth of naicsCode: 2 = sector, 3 = subsector, 4 = industry group.'
hqCity:
type:
- object
- 'null'
example: San Francisco
hqCountry:
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/CountryDto'
industryGroup:
type:
- object
- 'null'
example: Software Development
industrySubTags:
example:
- Artificial Intelligence
- Sales Automation
type: array
items:
type: string
verticals:
example:
- ai
- fintech
type: array
items:
type: string
employeeCountBucket:
type:
- object
- 'null'
example: 51-200
foundedYear:
type:
- object
- 'null'
example: 2021
businessModel:
type:
- object
- 'null'
example: B2B SaaS
required:
- id
- name
- domain
- website
- description
- linkedinHandle
- linkedinUrl
- linkedinGeoId
- linkedinIndustryId
- naicsCode
- naicsLevel
- hqCity
- hqCountry
- industryGroup
- industrySubTags
- verticals
- employeeCountBucket
- foundedYear
- businessModel
ExecMovePersonDto:
type: object
properties:
id:
type:
- object
- 'null'
example: 019e8a3c-2b10-7c44-8a1f-9d8e7c6b5a40
name:
type: string
example: Jane Doe
linkedinHandle:
type:
- object
- 'null'
example: jane-doe
linkedinUrl:
type:
- object
- 'null'
example: https://www.linkedin.com/in/jane-doe
required:
- id
- name
- linkedinHandle
- linkedinUrl
PublicErrorMeta:
type: object
properties:
requestId:
type: string
example: 019e8a3c-9f0b-7c12-88ab-1d2e3f4a5b6c
description: Request id when one was attached by the server.
DiscoveryMeta:
type: object
properties:
status:
type: string
example: building
enum:
- building
domain:
type: object
example: acme.com
retryAfterSeconds:
type: number
example: 300
description: Seconds to wait before asking again. Research usually completes within hours.
note:
type: string
example: We had not read this company yet and have started now.
required:
- status
- domain
- retryAfterSeconds
PublicPagination:
type: object
properties:
hasMore:
type: boolean
example: true
description: Whether another page is available.
nextCursor:
type:
- object
- 'null'
example: eyJpZCI6IjAxOWU4YTNjLTJiMTAtN2M0NC04YTFmLTlkOGU3YzZiNWE0MCJ9
description: Cursor to pass to the next request. Null when hasMore is false.
total:
type: number
example: 1284
description: Total records matching the filters across all pages. Present only when includeTotal=true; the same on every page of a listing.
required:
- hasMore
- nextCursor
PublicErrorBody:
type: object
properties:
code:
type: string
enum:
- INVALID_CURSOR
- INVALID_INPUT
- UNAUTHORIZED
- FORBIDDEN
- NOT_FOUND
- PAYMENT_REQUIRED
- TOO_MANY_REQUESTS
example: INVALID_INPUT
message:
type: string
example: limit must not be greater than 100
details:
type: object
additionalProperties: true
description: Optional machine-readable context for validation errors.
required:
- code
- message
securitySchemes:
apiKey:
type: apiKey
in: header
name: X-API-Key