Error
{
"type": "object",
"properties": {
"error": {
"type": "string"
}
},
"required": [
"error"
]
}Chain
{
"type": "object",
"properties": {
"chainId": {
"type": "integer"
},
"name": {
"type": "string"
},
"network": {
"type": "string",
"enum": [
"mainnet",
"testnet"
]
},
"rpcUrl": {
"type": "string"
},
"explorerUrl": {
"type": "string"
},
"providerConfigured": {
"type": "boolean"
}
},
"required": [
"chainId",
"name",
"network",
"rpcUrl",
"explorerUrl",
"providerConfigured"
]
}Asset
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "`${chainId}:${address}`"
},
"chainId": {
"type": "integer"
},
"address": {
"type": "string"
},
"symbol": {
"type": "string"
},
"name": {
"type": "string"
},
"assetType": {
"type": "string",
"enum": [
"stock_token",
"stablecoin",
"wrapped_native",
"bridged"
]
},
"decimals": {
"type": "integer"
},
"status": {
"type": "string"
},
"source": {
"type": "string"
},
"sourceUri": {
"type": [
"string",
"null"
]
},
"observedAt": {
"type": "string",
"format": "date-time"
},
"firstSeenAt": {
"type": "string",
"format": "date-time",
"description": "When Fletch first saw the token; Robinhood publishes no listing date"
},
"verifiedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"onchainName": {
"type": [
"string",
"null"
]
},
"onchainSymbol": {
"type": [
"string",
"null"
]
},
"onchainDecimals": {
"type": [
"integer",
"null"
]
},
"metadataCheckedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"isin": {
"type": [
"string",
"null"
]
},
"logoUrl": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"chainId",
"address",
"symbol",
"name",
"assetType",
"decimals",
"status",
"source"
]
}AuthorityEvent
{
"type": "object",
"description": "One entry in the registry changelog. `id` is stable across re-runs; the cursor for the row is `${observedAt}|${id}`.",
"properties": {
"id": {
"type": "string",
"description": "`ev_` followed by 24 hex characters; the same change is never written twice"
},
"kind": {
"type": "string",
"description": "A dotted kind such as `registry.paused` or `multiplier.applied`; every kind the daemon can emit is in the response's `kinds`",
"example": "multiplier.applied"
},
"title": {
"type": "string",
"description": "The change as one changelog line"
},
"symbol": {
"type": [
"string",
"null"
],
"description": "The token concerned; null for a chain-wide event"
},
"address": {
"type": [
"string",
"null"
],
"description": "The contract or account concerned; null for a chain-wide event"
},
"detail": {
"type": [
"object",
"null"
],
"additionalProperties": true,
"description": "The numbers behind the title; fields depend on the kind"
},
"block": {
"type": [
"string",
"null"
],
"description": "Block number as a decimal string; null for events not tied to a block"
},
"txHash": {
"type": [
"string",
"null"
]
},
"occurredAt": {
"type": "string",
"format": "date-time",
"description": "When the change happened on chain or at the source"
},
"observedAt": {
"type": "string",
"format": "date-time",
"description": "When the daemon recorded it; the cursor orders by this"
}
},
"required": [
"id",
"kind",
"title",
"symbol",
"address",
"detail",
"block",
"txHash",
"occurredAt",
"observedAt"
]
}Watcher
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"projectId": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"large_transfer",
"wallet_activity",
"registry_event",
"token_event",
"new_pool"
]
},
"chainId": {
"type": "integer"
},
"address": {
"type": "string"
},
"assetId": {
"type": [
"string",
"null"
]
},
"threshold": {
"type": "string"
},
"wallet": {
"type": [
"string",
"null"
],
"description": "wallet_activity only — the watched address."
},
"delivery": {
"type": "string",
"enum": [
"telegram",
"webhook"
],
"description": "Where this watcher's alerts are sent."
},
"webhookId": {
"type": [
"string",
"null"
],
"description": "The endpoint alerts are posted to when delivery is \"webhook\"."
},
"webhookName": {
"type": [
"string",
"null"
],
"description": "The endpoint's name. Null when delivery is \"telegram\". Also null when the endpoint was deleted: delivery stays \"webhook\", webhookId is null, and the watcher is paused with the reason in lastError. Such a watcher cannot be resumed until it is re-pointed with PATCH /watchers/{id} { webhookId }."
},
"enabled": {
"type": "boolean"
},
"status": {
"type": "string",
"enum": [
"active",
"catching_up",
"degraded",
"paused"
]
},
"lastCheckedBlock": {
"type": [
"string",
"null"
]
},
"lastTriggeredAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"lastError": {
"type": [
"string",
"null"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"lastDelivery": {
"type": [
"object",
"null"
],
"description": "The most recent delivery of any status, or null before the first.",
"properties": {
"sentAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"amount": {
"type": [
"string",
"null"
]
},
"txHash": {
"type": "string"
}
},
"required": [
"sentAt",
"amount",
"txHash"
]
}
},
"required": [
"id",
"name",
"kind",
"chainId",
"address",
"threshold",
"enabled",
"status",
"createdAt",
"updatedAt",
"lastDelivery"
]
}Run
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"watcherId": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"sent",
"failed",
"retracted"
]
},
"lastError": {
"type": [
"string",
"null"
]
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"sentAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"payload": {
"type": "object",
"description": "DeliveryPayload — kind, chainId, address, symbol, from, to, value, amount, threshold, txHash, logIndex, blockNumber, blockHash, explorerUrl; wallet_activity adds wallet and direction (\"in\" | \"out\"); an authority payload (kind \"authority\", from a registry_event or token_event watcher) instead carries eventId, eventKind, title, symbol, address, detail, txHash, blockNumber, occurredAt (ISO 8601 UTC), explorerUrl and registryUrl."
}
},
"required": [
"id",
"watcherId",
"status",
"createdAt",
"payload"
]
}Webhook
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"secretPrefix": {
"type": "string",
"description": "The first characters of the signing secret; the secret itself is returned only once, at creation or rotation."
},
"enabled": {
"type": "boolean"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"lastDeliveredAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When this endpoint last answered 2xx, including test pings — not necessarily an alert."
},
"lastError": {
"type": [
"string",
"null"
],
"description": "The most recent failure whenever it happened, cleared by the next success. Compare lastErrorAt with lastDeliveredAt before reading it as a fault now."
},
"lastErrorAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When lastError was written. Null on an endpoint whose last failure predates this field."
},
"secret": {
"type": "string",
"description": "Present only in the response that created or rotated this endpoint. Stored encrypted and never returned again."
}
},
"required": [
"id",
"name",
"url",
"secretPrefix",
"enabled",
"createdAt"
]
}WebhookCreated
{
"allOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"secretPrefix": {
"type": "string",
"description": "The first characters of the signing secret; the secret itself is returned only once, at creation or rotation."
},
"enabled": {
"type": "boolean"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"lastDeliveredAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When this endpoint last answered 2xx, including test pings — not necessarily an alert."
},
"lastError": {
"type": [
"string",
"null"
],
"description": "The most recent failure whenever it happened, cleared by the next success. Compare lastErrorAt with lastDeliveredAt before reading it as a fault now."
},
"lastErrorAt": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "When lastError was written. Null on an endpoint whose last failure predates this field."
},
"secret": {
"type": "string",
"description": "Present only in the response that created or rotated this endpoint. Stored encrypted and never returned again."
}
},
"required": [
"id",
"name",
"url",
"secretPrefix",
"enabled",
"createdAt"
]
},
{
"type": "object",
"required": [
"secret"
]
}
]
}WebhookDelivery
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Delivery id, `dl_…` (`ping_…` for a test); the idempotency key."
},
"kind": {
"type": "string",
"enum": [
"large_transfer",
"wallet_activity",
"authority",
"ping"
]
},
"payload": {
"type": "object",
"description": "DeliveryPayload — kind, chainId, address, symbol, from, to, value, amount, threshold, txHash, logIndex, blockNumber, blockHash, explorerUrl; wallet_activity adds wallet and direction (\"in\" | \"out\"); an authority payload (kind \"authority\", from a registry_event or token_event watcher) instead carries eventId, eventKind, title, symbol, address, detail, txHash, blockNumber, occurredAt (ISO 8601 UTC), explorerUrl and registryUrl."
},
"watcher": {
"type": [
"object",
"null"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"description": "null for a ping, which belongs to the endpoint rather than to any watcher."
},
"queuedAt": {
"type": "string",
"format": "date-time",
"description": "When Fletch matched the event. On a retry this is well before sentAt."
},
"attempt": {
"type": "integer",
"description": "1 on the first try."
},
"sentAt": {
"type": "string",
"format": "date-time",
"description": "When this attempt was posted."
}
},
"required": [
"id",
"kind",
"payload",
"queuedAt",
"attempt",
"sentAt"
]
}Project
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"buildCount": {
"type": "integer"
}
},
"required": [
"id",
"name",
"slug",
"createdAt",
"buildCount"
]
}