Website
Dashboard
Website
Dashboard
  • πŸ‘‰ Welcome
  • 🧐 How to set up an account
  • πŸ“ˆ Monitoring and analytics
  • πŸ” Introducing coins vs tokens
  • πŸ‘¨β€πŸ’Ό The meaning of owning crypto
  • πŸ’° Wallets
  • πŸ“œ Supported Blockchains
  • GITHUB
    • 🐘 SDK PHP
    • πŸ“ SDK Python
    • πŸ‘¨β€πŸ’» SDK GOLANG
    • ✳️ SDK NODE JS
    • ✳️ PHP Wallet
  • API REFERENCE
    • πŸ”‘ Authentication & base URL
    • Bitcoin
      • πŸ” Info
        • 🧐 Check BTC node health
        • πŸ“œ Get latest Bitcoin block
      • πŸ†Ž Block
        • πŸ“ˆ Get Bitcoin block by height
        • πŸ‘¨β€πŸ’» Get Bitcoin block by hash
        • πŸ“‘ Get transaction count in block by height
        • πŸ“‘ Get transaction count in block by hash
      • πŸ’° Transactions
        • πŸ‘¨β€πŸ’» Get Bitcoin transaction by hash
        • πŸ“ Send pre-signed raw Bitcoin transaction
      • πŸ‘¨β€πŸ’Ό Account
        • πŸ’° List BTC addresses managed by node wallet
        • πŸ†Ž Get BTC received amount for address
      • πŸ” Watch-only addresses
        • πŸ” Register an account zpub
        • πŸ“œ List registered extended public keys
        • πŸ†Ž Issue the next BTC address
        • πŸ“‘ History of issued BTC addresses
        • ❌ Delete a registered zpub
      • πŸ” JSON-RPC
        • πŸ” JSON-RPC
    • Ethereum
      • πŸ” Info
        • 🧐 Check ETH node health
        • πŸ“œ Get latest Ethereum block
      • πŸ†Ž Block
        • πŸ“ˆ Get Ethereum block by height
        • πŸ‘¨β€πŸ’» Get Ethereum block by hash
        • πŸ“‘ Get transaction count in block by height
        • πŸ“‘ Get transaction count in block by hash
      • πŸ’° Transactions
        • πŸ‘¨β€πŸ’» Get Ethereum transaction by hash
        • πŸ‘¨β€πŸ’» Get Ethereum transaction receipt by hash
        • πŸ“ Send pre-signed raw Ethereum transaction
      • πŸ‘¨β€πŸ’Ό Account
        • πŸ” List ETH accounts managed by node
        • πŸ†Ž Get ETH balance for address
        • πŸ†Ž Get transaction count (nonce) for address
        • πŸ‘‰ Estimate gas for transaction
        • πŸ“‘ Read-only contract call (eth_call)
        • πŸ‘¨β€πŸ’Ό Send transaction from node-managed account
      • πŸ” Watch-only addresses
        • πŸ” Register an account xpub
        • πŸ“œ List registered extended public keys
        • πŸ†Ž Issue the next ETH address
        • πŸ“‘ History of issued ETH addresses
        • ❌ Delete a registered xpub
      • πŸ” JSON-RPC
        • πŸ” JSON-RPC
    • Tron
      • πŸ” Info
        • πŸ“‘ Get TRX node info
        • 🧐 Check Tron node health
        • πŸͺ™ List supported TRC20 tokens
      • πŸ†Ž Block
        • πŸ“œ Get latest Tron block
        • πŸ“œ Get latest N blocks
        • 🟠 Get block by number
        • πŸ‘¨β€πŸ’» Get block by hash
      • πŸ’° Transactions
        • πŸ‘¨β€πŸ’» Get transaction by hash
        • πŸ†Ž Get all transactions for an address
        • πŸ“ Create an unsigned transaction
        • πŸ“‘ Broadcast a signed transaction
      • πŸ‘¨β€πŸ’Ό Account
        • πŸ†Ž Validate a Tron address
        • πŸ” Get account information
        • πŸ’° Get account balance
        • πŸ’° Get all asset balances
        • πŸ’΅ Get a single TRC20 balance
        • ⚠️ Create a new Tron address (deprecated)
        • ⚠️ Generate a private key from a mnemonic (deprecated)
        • ⚠️ Send TRX from one address to another (deprecated)
        • ⚠️ Send USDT (TRC20) from one address to another (deprecated)
      • πŸ“Š Schemas
      • πŸ” JSON-RPC
    • Webhooks
      • ✳️ Management
        • πŸ‘¨β€πŸ“œ List webhooks
        • 🧐 Create webhook
        • πŸ‘‰ Get webhook
        • πŸ‘¨β€πŸ” Update webhook
        • ❌ Delete webhook
        • πŸ”‘ Rotate signing secret
      • πŸ“¨ Receiving notifications

🧐 Create webhook

Code samples

POST /api/v1/webhooks

curl -X POST 'https://settla.net/api/v1/webhooks' \
  -H 'X-API-Key: $SETTLA_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "coin": "TRX",
  "webhook_url": "https://example.com/webhook",
  "addresses": [
    "TLWKepDBC8RZjAhtWyNqASyzgyVyHUuS7o"
  ],
  "is_active": true
}'

Creates a new webhook for the authenticated user. The listed addresses are picked up by the blockchain scanners automatically; no further call is needed. Watching starts from the next block the scanner processes β€” earlier transactions are not replayed.

A subscription needs the address only: no private key, mnemonic or xpub is involved, so addresses generated in your own wallet are watched exactly like addresses issued through the API.

Delivery failures are counted: after 20 consecutive failed deliveries the webhook is switched off (is_active becomes 0) and stops receiving notifications until you re-enable it with a PUT request. A single failure does not count β€” only a job that has exhausted its retries.

Body parameter

{
  "coin": "TRX",
  "webhook_url": "https://example.com/webhook",
  "addresses": [
    "TLWKepDBC8RZjAhtWyNqASyzgyVyHUuS7o"
  ],
  "is_active": true
}

πŸ› οΈ Parameters

NameInTypeRequiredDescription
bodybodyobjecttruenone
Β» coinbodystringtrueChain whose transactions trigger the webhook. One subscription covers a whole chain, not a single asset: TRX reports native TRX transfers as well as TRC-10 and TRC-20 token transfers (USDT included), with the asset given in the currency field of the notification. ETH currently reports native ETH transfers only β€” an incoming ERC-20 payment does not trigger a notification, so use USDT on Tron if you need token notifications today. BTC reports native transfers, one notification per matching output.
Β» webhook_urlbodystring(uri)trueTarget URL to receive webhook POST requests. Must be a publicly reachable http/https address: loopback, link-local and private ranges are rejected with 422, and so is a host that resolves into one of them.
Β» addressesbody[string]trueAddresses to monitor. At least one entry is required and each entry is limited to 255 characters; the number of entries is not capped, but matching is linear in the size of the list, so keep a subscription under roughly 1000 addresses and split larger pools across several webhooks.

Addresses are matched as exact strings, without normalisation: supply ETH addresses in lower case (a checksummed 0xAbC… address never matches) and Tron addresses in Base58.| |Β» is_active|body|boolean|false|Whether the webhook is active|

Example responses

201 Response

{
  "data": {
    "id": 1,
    "user_id": 10,
    "coin": "TRX",
    "webhook_url": "https://example.com/webhook",
    "addresses": [
      "TLWKepDBC8RZjAhtWyNqASyzgyVyHUuS7o"
    ],
    "secret": "whsec_4f8c1a9d7e2b6035c4a1f8d9e0b3c7a25f6e1d4c8b0a9372e5d6c1f804b3a7e29",
    "is_active": 1,
    "last_triggered_at": null,
    "deleted_at": null,
    "created_at": "2025-09-16T12:00:00.000000Z",
    "updated_at": "2025-09-16T12:00:00.000000Z"
  }
}

422 Response

{
  "errors": {
    "webhook_url": [
      "АдрСс нСдоступСн для Π²Π΅Π±Ρ…ΡƒΠΊΠ°: адрСс Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ."
    ]
  }
}

πŸ” Responses

StatusMeaningDescriptionSchema
201CreatedCreatedInline
401401Missing or invalid API keyNone
422Unprocessable EntityValidation failedInline

πŸ”„ Response Schema

Status Code 201

NameTypeRequiredRestrictionsDescription
Β» dataobjectfalsenonenone
»» idintegerfalsenonenone
»» user_idintegerfalsenonenone
»» coinstringfalsenonenone
»» webhook_urlstring(uri)falsenonenone
»» addresses[string]falsenonenone
»» secretstringfalsenoneKey the platform signs deliveries with. The whole string, whsec_ prefix included, is the HMAC-SHA256 key; the signed message is <X-Settla-Timestamp>.<raw body>. Created together with the webhook and returned by every endpoint here β€” see the Receiving notifications page for verification code. Rotate it with POST /api/v1/webhooks/{webhook}/secret.
»» is_active[oneOf]falsenoneWhether the webhook receives notifications. Beware of the type: this field is not normalised in API v1, so it comes back as the raw database value 0 or 1 β€” except in the response to a create request, which echoes the boolean you have just sent. Treat it as truthy rather than comparing it to true.
»» last_triggered_atstring(date-time)Β¦nullfalsenoneReserved for the time of the last notification. Nothing writes it at the moment, so it is always null β€” do not use it to tell a live webhook from an idle one. The dashboard's webhook statistics show the actual delivery history.
»» deleted_atstring(date-time)¦nullfalsenoneAlways null in responses; deleted webhooks are not returned.
»» created_atstring(date-time)falsenonenone
»» updated_atstring(date-time)falsenonenone

Status Code 422

NameTypeRequiredRestrictionsDescription
Β» errorsobjectfalsenoneField name β†’ list of messages.

Enumerated Values

PropertyValue
coinTRX
coinBTC
coinETH
To perform this operation, you must be authenticated by means of one of the following methods: ApiKeyAuth
Prev
πŸ‘¨β€πŸ“œ List webhooks
Next
πŸ‘‰ Get webhook