Airstack HubEvents API
The HubEvents API from Airstack — 2 operation(s) for hubevents.
The HubEvents API from Airstack — 2 operation(s) for hubevents.
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/airstack-hubevents-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: Farcaster Hub REST Casts Hub Events API
version: '1.0'
description: "Perform basic queries of Farcaster state via the REST API of a Farcaster hub. See the [Farcaster docs](https://www.thehubble.xyz/docs/httpapi/httpapi.html) for more details. Some client libraries:\n - [TypeScript](https://www.npmjs.com/package/@standard-crypto/farcaster-js-hub-rest)\n"
servers:
- url: https://hubs.airstack.xyz
security:
- ApiKeyAuth: []
tags:
- name: HubEvents
paths:
/v1/events:
get:
security:
- ApiKeyAuth: []
tags:
- HubEvents
operationId: ListEvents
summary: Get a page of Hub events
parameters:
- name: from_event_id
in: query
required: false
schema:
type: integer
description: An optional Hub Id to start getting events from. This is also returned from the API as nextPageEventId, which can be used to page through all the Hub events. Set it to 0 to start from the first event
responses:
'200':
description: A successful response.
content:
application/json:
schema:
type: object
properties:
nextPageEventId:
type: integer
events:
type: array
items:
$ref: '#/components/schemas/HubEvent'
required:
- nextPageEventId
- events
default:
$ref: '#/components/responses/ErrorResponse'
/v1/eventById:
get:
security:
- ApiKeyAuth: []
tags:
- HubEvents
operationId: GetEventById
summary: Get an event by its ID
parameters:
- name: event_id
in: query
required: true
schema:
type: integer
description: The Hub Id of the event
responses:
'200':
description: A successful response.
content:
application/json:
schema:
$ref: '#/components/schemas/HubEvent'
default:
$ref: '#/components/responses/ErrorResponse'
components:
schemas:
ErrorResponse:
required:
- code
- details
- errCode
- metadata
- name
- presentable
type: object
properties:
errCode:
type: string
presentable:
type: boolean
name:
type: string
code:
type: integer
details:
type: string
metadata:
required:
- errcode
type: object
properties:
errcode:
type: array
items:
type: string
CastRemoveBody:
description: Removes an existing Cast
type: object
properties:
targetHash:
title: Hash of the cast to remove
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
required:
- targetHash
MessageDataUserDataAdd:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- userDataBody
properties:
userDataBody:
$ref: '#/components/schemas/UserDataBody'
CastId:
description: Identifier used to look up a Cast
required:
- fid
- hash
type: object
properties:
fid:
title: Fid of the user who created the cast
type: integer
format: uint64
hash:
$ref: '#/components/schemas/CastHash'
IdRegisterEventType:
type: string
default: ID_REGISTER_EVENT_TYPE_REGISTER
enum:
- ID_REGISTER_EVENT_TYPE_REGISTER
- ID_REGISTER_EVENT_TYPE_TRANSFER
- ID_REGISTER_EVENT_TYPE_CHANGE_RECOVERY
MergeUserNameProofBody:
type: object
properties:
usernameProof:
$ref: '#/components/schemas/UserNameProof'
deletedUsernameProof:
$ref: '#/components/schemas/UserNameProof'
usernameProofMessage:
$ref: '#/components/schemas/Message'
deletedUsernameProofMessage:
$ref: '#/components/schemas/Message'
PruneMessageBody:
type: object
properties:
message:
$ref: '#/components/schemas/Message'
required:
- message
MessageDataCommon:
required:
- fid
- network
- timestamp
type: object
properties:
fid:
title: Farcaster ID of the user producing the message
type: integer
format: uint64
example: 2
timestamp:
title: Farcaster epoch timestamp in seconds
type: integer
format: int64
example: 48994466
network:
$ref: '#/components/schemas/FarcasterNetwork'
UserNameType:
type: string
default: USERNAME_TYPE_FNAME
enum:
- USERNAME_TYPE_FNAME
- USERNAME_TYPE_ENS_L1
ReactionType:
type: string
description: "Type of Reaction.\n- REACTION_TYPE_LIKE: Like the target cast\n - REACTION_TYPE_RECAST: Share target cast to the user's audience"
default: REACTION_TYPE_LIKE
enum:
- REACTION_TYPE_LIKE
- REACTION_TYPE_RECAST
UserNameProof:
type: object
properties:
timestamp:
type: integer
format: uint64
name:
type: string
example: gavi
owner:
pattern: ^0x[0-9a-fA-F]{40}$
type: string
signature:
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
fid:
type: integer
format: uint64
type:
$ref: '#/components/schemas/UserNameType'
required:
- timestamp
- name
- owner
- signature
- fid
- type
HubEventMergeUsernameProof:
type: object
properties:
type:
type: string
example: HUB_EVENT_TYPE_MERGE_USERNAME_PROOF
id:
type: integer
format: uint64
mergeUsernameProofBody:
$ref: '#/components/schemas/MergeUserNameProofBody'
required:
- type
- id
- mergeUsernameProofBody
LinkType:
type: string
description: 'Type of Link.
- follow: Follow another user'
default: follow
enum:
- follow
MessageDataUsernameProof:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- usernameProofBody
properties:
usernameProofBody:
$ref: '#/components/schemas/UserNameProof'
StorageRentEventBody:
type: object
properties:
payer:
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
units:
type: integer
format: int64
expiry:
type: integer
format: int64
required:
- payer
- units
- expiry
MergeMessageBody:
type: object
properties:
message:
$ref: '#/components/schemas/Message'
deletedMessages:
type: array
items:
$ref: '#/components/schemas/Message'
required:
- message
- deletedMessages
MessageDataVerificationRemove:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- verificationRemoveBody
properties:
verificationRemoveBody:
$ref: '#/components/schemas/VerificationRemoveBody'
OnChainEventIdRegister:
allOf:
- $ref: '#/components/schemas/OnChainEventCommon'
- type: object
properties:
idRegisterEventBody:
$ref: '#/components/schemas/IdRegisterEventBody'
required:
- idRegisterEventBody
UserDataBody:
description: Adds metadata about a user
type: object
properties:
type:
$ref: '#/components/schemas/UserDataType'
value:
title: Value of the metadata
type: string
required:
- type
- value
HubEventPruneMessage:
type: object
properties:
type:
type: string
example: HUB_EVENT_TYPE_PRUNE_MESSAGE
id:
type: integer
format: uint64
pruneMessageBody:
$ref: '#/components/schemas/PruneMessageBody'
required:
- type
- id
- pruneMessageBody
OnChainEventStorageRent:
allOf:
- $ref: '#/components/schemas/OnChainEventCommon'
- type: object
properties:
storageRentEventBody:
$ref: '#/components/schemas/StorageRentEventBody'
required:
- storageRentEventBody
Embed:
oneOf:
- $ref: '#/components/schemas/CastEmbed'
- $ref: '#/components/schemas/UrlEmbed'
OnChainEventCommon:
type: object
properties:
type:
type: string
example: EVENT_TYPE_SIGNER
chainId:
type: integer
blockNumber:
type: integer
blockHash:
type: string
example: '0x75fbbb8b2a4ede67ac350e1b0503c6a152c0091bd8e3ef4a6927d58e088eae28'
blockTimestamp:
type: integer
transactionHash:
type: string
example: '0x36ef79e6c460e6ae251908be13116ff0065960adb1ae032b4cc65a8352f28952'
logIndex:
type: integer
txIndex:
type: integer
fid:
type: integer
required:
- type
- chainId
- blockNumber
- blockHash
- blockTimestamp
- transactionHash
- logIndex
- txIndex
- fid
SignerEventType:
type: string
default: SIGNER_EVENT_TYPE_ADD
enum:
- SIGNER_EVENT_TYPE_ADD
- SIGNER_EVENT_TYPE_REMOVE
- SIGNER_EVENT_TYPE_ADMIN_RESET
OnChainEvent:
oneOf:
- $ref: '#/components/schemas/OnChainEventSigner'
- $ref: '#/components/schemas/OnChainEventSignerMigrated'
- $ref: '#/components/schemas/OnChainEventIdRegister'
- $ref: '#/components/schemas/OnChainEventStorageRent'
discriminator:
propertyName: type
mapping:
EVENT_TYPE_SIGNER: '#/components/schemas/OnChainEventSigner'
EVENT_TYPE_SIGNER_MIGRATED: '#/components/schemas/OnChainEventSignerMigrated'
EVENT_TYPE_ID_REGISTER: '#/components/schemas/OnChainEventIdRegister'
EVENT_TYPE_STORAGE_RENT: '#/components/schemas/OnChainEventStorageRent'
UserDataType:
type: string
description: "Type of UserData.\n- USER_DATA_TYPE_PFP: Profile Picture for the user\n - USER_DATA_TYPE_DISPLAY: Display Name for the user\n - USER_DATA_TYPE_BIO: Bio for the user\n - USER_DATA_TYPE_URL: URL of the user\n - USER_DATA_TYPE_USERNAME: Preferred Name for the user"
default: USER_DATA_TYPE_PFP
enum:
- USER_DATA_TYPE_PFP
- USER_DATA_TYPE_DISPLAY
- USER_DATA_TYPE_BIO
- USER_DATA_TYPE_URL
- USER_DATA_TYPE_USERNAME
MergeOnChainEventBody:
type: object
properties:
onChainEvent:
$ref: '#/components/schemas/OnChainEvent'
required:
- onChainEvent
OnChainEventSigner:
allOf:
- $ref: '#/components/schemas/OnChainEventCommon'
- type: object
properties:
signerEventBody:
$ref: '#/components/schemas/SignerEventBody'
required:
- signerEventBody
OnChainEventSignerMigrated:
allOf:
- $ref: '#/components/schemas/OnChainEventCommon'
- type: object
properties:
signerMigratedEventBody:
$ref: '#/components/schemas/SignerMigratedEventBody'
required:
- signerMigratedEventBody
MessageDataReaction:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- reactionBody
properties:
reactionBody:
$ref: '#/components/schemas/ReactionBody'
HashScheme:
type: string
description: 'Type of hashing scheme used to produce a digest of MessageData. - HASH_SCHEME_BLAKE3: Default scheme for hashing MessageData
'
default: HASH_SCHEME_BLAKE3
enum:
- HASH_SCHEME_BLAKE3
MessageCommon:
type: object
properties:
hash:
title: Hash digest of data
pattern: ^0x[0-9a-fA-F]{40}$
type: string
example: '0xd2b1ddc6c88e865a33cb1a565e0058d757042974'
hashScheme:
$ref: '#/components/schemas/HashScheme'
signature:
title: Signature of the hash digest
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
signatureScheme:
$ref: '#/components/schemas/SignatureScheme'
signer:
title: Public key or address of the key pair that produced the signature
pattern: ^0x[0-9a-fA-F]+$
type: string
required:
- hash
- hashScheme
- signature
- signatureScheme
- signer
LinkBody:
description: Adds or removes a Link
type: object
properties:
type:
$ref: '#/components/schemas/LinkType'
displayTimestamp:
title: User-defined timestamp that preserves original timestamp when message.data.timestamp needs to be updated for compaction
type: integer
format: int64
targetFid:
title: The fid the link relates to
type: integer
format: uint64
required:
- type
- targetFid
SignerMigratedEventBody:
type: object
properties:
migratedAt:
type: integer
format: int64
required:
- migratedAt
CastAddBody:
description: Adds a new Cast
type: object
properties:
embedsDeprecated:
title: URLs to be embedded in the cast
type: array
items:
type: string
mentions:
title: Fids mentioned in the cast
type: array
items:
type: integer
format: uint64
example: 2
parentCastId:
$ref: '#/components/schemas/CastId'
parentUrl:
title: Parent URL
type: string
example: chain://eip155:1/erc721:0x39d89b649ffa044383333d297e325d42d31329b2
text:
title: Text of the cast
type: string
mentionsPositions:
title: Positions of the mentions in the text
type: array
items:
type: integer
format: int64
embeds:
title: URLs or cast ids to be embedded in the cast
type: array
items:
$ref: '#/components/schemas/Embed'
required:
- embedsDeprecated
- mentions
- text
- mentionsPositions
- embeds
Message:
allOf:
- type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/MessageDataCastAdd'
- $ref: '#/components/schemas/MessageDataCastRemove'
- $ref: '#/components/schemas/MessageDataReaction'
- $ref: '#/components/schemas/MessageDataLink'
- $ref: '#/components/schemas/MessageDataVerificationAdd'
- $ref: '#/components/schemas/MessageDataVerificationRemove'
- $ref: '#/components/schemas/MessageDataUserDataAdd'
- $ref: '#/components/schemas/MessageDataUsernameProof'
- $ref: '#/components/schemas/MessageDataFrameAction'
discriminator:
propertyName: type
mapping:
MESSAGE_TYPE_CAST_ADD: '#/components/schemas/MessageDataCastAdd'
MESSAGE_TYPE_CAST_REMOVE: '#/components/schemas/MessageDataCastRemove'
MESSAGE_TYPE_REACTION_ADD: '#/components/schemas/MessageDataReaction'
MESSAGE_TYPE_REACTION_REMOVE: '#/components/schemas/MessageDataReaction'
MESSAGE_TYPE_LINK_ADD: '#/components/schemas/MessageDataLink'
MESSAGE_TYPE_LINK_REMOVE: '#/components/schemas/MessageDataLink'
MESSAGE_TYPE_VERIFICATION_ADD_ETH_ADDRESS: '#/components/schemas/MessageDataVerificationAdd'
MESSAGE_TYPE_VERIFICATION_REMOVE: '#/components/schemas/MessageDataVerificationRemove'
MESSAGE_TYPE_USER_DATA_ADD: '#/components/schemas/MessageDataUserDataAdd'
MESSAGE_TYPE_USERNAME_PROOF: '#/components/schemas/MessageDataUsernameProof'
MESSAGE_TYPE_FRAME_ACTION: '#/components/schemas/MessageDataFrameAction'
required:
- data
- $ref: '#/components/schemas/MessageCommon'
description: "* \nA Message is a delta operation on the Farcaster network. The message protobuf is an envelope \nthat wraps a MessageData object and contains a hash and signature which can verify its authenticity."
MessageDataLink:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- linkBody
properties:
linkBody:
$ref: '#/components/schemas/LinkBody'
MessageDataCastRemove:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- castRemoveBody
properties:
castRemoveBody:
$ref: '#/components/schemas/CastRemoveBody'
FarcasterNetwork:
type: string
description: "Farcaster network the message is intended for.\n- FARCASTER_NETWORK_MAINNET: Public primary network\n - FARCASTER_NETWORK_TESTNET: Public test network\n - FARCASTER_NETWORK_DEVNET: Private test network"
default: FARCASTER_NETWORK_MAINNET
enum:
- FARCASTER_NETWORK_MAINNET
- FARCASTER_NETWORK_TESTNET
- FARCASTER_NETWORK_DEVNET
CastHash:
pattern: ^0x[0-9a-fA-F]{40}$
type: string
VerificationRemoveBody:
description: Removes a Verification of any type
type: object
properties:
address:
title: Address of the Verification to remove
pattern: ^0x[A-Za-z0-9]{40}$
type: string
required:
- address
SignerEventBody:
type: object
properties:
key:
pattern: ^0x[a-fA-F0-9]{64}$
type: string
keyType:
type: integer
format: int64
eventType:
$ref: '#/components/schemas/SignerEventType'
metadata:
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
metadataType:
type: integer
format: int64
required:
- key
- keyType
- eventType
- metadata
- metadataType
RevokeMessageBody:
type: object
properties:
message:
$ref: '#/components/schemas/Message'
required:
- message
MessageDataFrameAction:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- frameActionBody
properties:
frameActionBody:
$ref: '#/components/schemas/FrameActionBody'
FrameActionBody:
description: A Farcaster Frame action
type: object
properties:
url:
type: string
format: uri
buttonIndex:
title: The index of the button pressed (1-4)
type: integer
format: int32
minimum: 1
maximum: 4
castId:
$ref: '#/components/schemas/CastId'
required:
- url
- buttonIndex
- castId
IdRegisterEventBody:
type: object
properties:
to:
pattern: ^0x[a-fA-F0-9]*$
type: string
example: '0x00000000fcd5a8e45785c8a4b9a718c9348e4f18'
eventType:
$ref: '#/components/schemas/IdRegisterEventType'
from:
pattern: ^0x[a-fA-F0-9]*$
type: string
example: '0x00000000fcd5a8e45785c8a4b9a718c9348e4f18'
recoveryAddress:
pattern: ^0x[a-fA-F0-9]*$
type: string
example: '0x00000000fcd5a8e45785c8a4b9a718c9348e4f18'
required:
- to
- from
- eventType
- recoveryAddress
HubEventRevokeMessage:
type: object
properties:
type:
type: string
example: HUB_EVENT_TYPE_REVOKE_MESSAGE
id:
type: integer
format: uint64
revokeMessageBody:
$ref: '#/components/schemas/RevokeMessageBody'
required:
- type
- id
- revokeMessageBody
VerificationAddEthAddressBody:
description: Adds a Verification of ownership of an Ethereum Address
type: object
properties:
address:
title: Ethereum address being verified
pattern: ^0x[a-fA-F0-9]{40}$
type: string
ethSignature:
title: Signature produced by the user's Ethereum address
pattern: ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
type: string
format: byte
blockHash:
title: Hash of the latest Ethereum block when the signature was produced
pattern: ^0x[a-fA-F0-9]{64}$
type: string
required:
- address
- ethSignature
- blockHash
SignatureScheme:
type: string
description: "Type of signature scheme used to sign the Message hash\n- SIGNATURE_SCHEME_ED25519: Ed25519 signature (default)\n - SIGNATURE_SCHEME_EIP712: ECDSA signature using EIP-712 scheme"
default: SIGNATURE_SCHEME_ED25519
enum:
- SIGNATURE_SCHEME_ED25519
- SIGNATURE_SCHEME_EIP712
MessageDataCastAdd:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- castAddBody
properties:
castAddBody:
$ref: '#/components/schemas/CastAddBody'
HubEventMergeMessage:
type: object
properties:
type:
type: string
example: HUB_EVENT_TYPE_MERGE_MESSAGE
id:
type: integer
format: uint64
mergeMessageBody:
$ref: '#/components/schemas/MergeMessageBody'
required:
- type
- id
- mergeMessageBody
MessageDataVerificationAdd:
allOf:
- $ref: '#/components/schemas/MessageDataCommon'
- type: object
required:
- verificationAddEthAddressBody
properties:
verificationAddEthAddressBody:
$ref: '#/components/schemas/VerificationAddEthAddressBody'
UrlEmbed:
type: object
properties:
url:
type: string
format: uri
required:
- url
HubEventMergeOnChainEvent:
type: object
properties:
type:
type: string
example: HUB_EVENT_TYPE_MERGE_ON_CHAIN_EVENT
id:
type: integer
format: uint64
mergeOnChainEventBody:
$ref: '#/components/schemas/MergeOnChainEventBody'
required:
- type
- id
- mergeOnChainEventBody
HubEvent:
oneOf:
- $ref: '#/components/schemas/HubEventMergeMessage'
- $ref: '#/components/schemas/HubEventPruneMessage'
- $ref: '#/components/schemas/HubEventRevokeMessage'
- $ref: '#/components/schemas/HubEventMergeUsernameProof'
- $ref: '#/components/schemas/HubEventMergeOnChainEvent'
discriminator:
propertyName: type
mapping:
HUB_EVENT_TYPE_MERGE_MESSAGE: '#/components/schemas/HubEventMergeMessage'
HUB_EVENT_TYPE_PRUNE_MESSAGE: '#/components/schemas/HubEventPruneMessage'
HUB_EVENT_TYPE_REVOKE_MESSAGE: '#/components/schemas/HubEventRevokeMessage'
HUB_EVENT_TYPE_MERGE_USERNAME_PROOF: '#/components/schemas/HubEventMergeUsernameProof'
HUB_EVENT_TYPE_MERGE_ON_CHAIN_EVENT: '#/components/schemas/HubEventMergeOnChainEvent'
ReactionBody:
description: Adds or removes a Reaction from a Cast
type: object
properties:
type:
$ref: '#/components/schemas/ReactionType'
targetCastId:
$ref: '#/components/schemas/CastId'
targetUrl:
title: URL to react to
type: string
required:
- type
CastEmbed:
type: object
properties:
castId:
$ref: '#/components/schemas/CastId'
required:
- castId
responses:
ErrorResponse:
description: An unexpected error response.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-airstack-hubs