Skip to content

API

On this page

Retrieve deposit

Read one payment-channel deposit in any state, with its frozen fee snapshot, gross fee and net amounts, and its on-chain evidence.

GET/v1/payment-channel-deposits/:payment_channel_deposit_id

API key: Payment

Read one deposit by its pcd_ identifier, in any state. An id you learned from a payment_channel.deposit.confirming webhook resolves here immediately, so you never have to hold a webhook payload just to be able to look it up later.

Response (200 OK)

{
  "id": "pcd_8ScRvL4jNq2XkB7mTfZdWu",
  "payment_channel_id": "pc_2QhKZv6mRt9WdA3nYpLbXf",
  "project_id": "prj_xFukZuAJZR06pLVBh3uwzv",
  "payment_channel_external_id": "customer-42",
  "status": "confirmed",
  "is_final": true,
  "is_test": false,
  "currency": "USDT",
  "network": "TRC20",
  "chain_id": 728126428,
  "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
  "gross": "100",
  "fee": "1",
  "net": "99",
  "applied_fee_percent": 1.0,
  "customer_fee_percent": 0,
  "tx_hash": "9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25",
  "transfer_id": "9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25:41a614f803b6fd780986a42c78ec9c7f77e6ded13c:41c9f6a2b7d0138e54ca3b91f6072ed48a5c1e93b7:0",
  "source_address": "TW9s4RkAqBnLpVdX2ChYzUeGm7QfKt3NbZ",
  "destination_address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
  "block_height": 68421905,
  "first_included_block_timestamp": 1767225900,
  "explorer_url": "https://tronscan.org/#/transaction/9f4c1b7e30ad52c8ef6a1d84b0c39f27a5e6d138f4b90c72ae51d63b8407fc25",
  "created_at": 1767225870,
  "updated_at": 1767225930,
  "confirmed_at": 1767225930
}

Fields

Field Meaning
id The deposit identifier (pcd_…). This is what you deduplicate on.
payment_channel_id, payment_channel_external_id The channel that received it, and the identifier you gave that channel.
status confirming, reorged or confirmed.
is_final true only for confirmed.
currency, network, chain_id, contract_address The token that arrived and where. contract_address is the token's on-chain identifier — contract address on EVM and Tron, jetton master on TON, SPL mint on Solana.
gross, fee, net Decimal strings. net is what reaches your balance.
applied_fee_percent, customer_fee_percent The rates frozen for this deposit at attribution.
tx_hash, transfer_id, block_height On-chain evidence. transfer_id is opaque — match on it, do not parse it.
source_address The payer's address when the chain exposes one; absent otherwise.
destination_address The channel address the money arrived at.
first_included_block_timestamp When the transaction first appeared in a block.
explorer_url A block-explorer link when one exists for that network.
confirmed_at Set once, when the deposit reached confirmed.

contract_address is nullable in the schema and empty only for a native coin. No native coin is an accepted asset, so every deposit you can read carries a value there. GET /v1/invoices/:id applies the same rule to payment.contract_address, so one code path covers both resources.

Statuses

Status Meaning Final
confirming Seen on chain, waiting for the confirmations that network requires No
reorged The transaction was dropped by a chain reorganization No
confirmed Settled. The net amount is credited to your balance Yes

confirmed is absorbing: once a deposit reaches it, nothing moves it back. reorged is quiescent but not final — if the same transaction is re-included in a later block, the same deposit returns to confirming and can go on to confirm. It keeps its pcd_ identifier throughout, so you never see a second deposit for one payment.

There is no failed state. A deposit that reorgs and is never re-included simply stays reorged.

Money is recorded, not recalculated

applied_fee_percent and customer_fee_percent are a snapshot taken when the deposit was attributed. Changing your pricing afterwards does not alter a deposit that already exists, and re-reading an old deposit returns the same gross, fee and net it always had.

For a confirmed production deposit those three amounts are read back from the accounting entry that credited your balance — they are the same numbers your statement shows, not a recomputation. With a 1% rate, a 100 USDT deposit reports gross 100, fee 1, net 99.

Amounts are decimal strings with trailing zeros trimmed. Parse them with a decimal type; binary floating point loses precision at stablecoin scale.

Errors

Code HTTP When
payment_channels_disabled 503 Payment channels are not enabled for your account in this environment.
payment_key_required 403 The request was signed with a Payout (rk_) key.
payment_channel_deposit_not_found 404 The id resolves to nothing this credential may see.
field_invalid_format 400 The path segment is not a valid pcd_ identifier.

See Error Codes for the full catalogue.