List Payins
curl --request GET \
--url https://api.hopnow.io/v1/accounts/{account_id}/payins \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/accounts/{account_id}/payins"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/accounts/{account_id}/payins', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hopnow.io/v1/accounts/{account_id}/payins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hopnow.io/v1/accounts/{account_id}/payins"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hopnow.io/v1/accounts/{account_id}/payins")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/accounts/{account_id}/payins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"object": "<string>",
"account_id": "<string>",
"amount": "<string>",
"currency": "<string>",
"network": "<string>",
"amount_in_usd": "<string>",
"status": "<string>",
"payment_rail": "<string>",
"note": "<string>",
"txn_hash": "<string>",
"destination_wallet_id": "<string>",
"destination_address": "<string>",
"source_address": "<string>",
"sender_name": "<string>",
"sender_account_masked": "<string>",
"sender_bank_code": "<string>",
"sender_country": "<string>",
"deposit_destination": {},
"payin_type": "<string>",
"initiated_at": "<string>",
"completed_at": "<string>",
"failed_at": "<string>",
"failed_reason": "<string>",
"voided_at": "<string>",
"voided_reason": "<string>",
"created": "<string>",
"updated": "<string>",
"created_by": "<string>",
"updated_by": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}Payins
List Payins
Retrieve a paginated list of incoming payments
GET
/
v1
/
accounts
/
{account_id}
/
payins
List Payins
curl --request GET \
--url https://api.hopnow.io/v1/accounts/{account_id}/payins \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.hopnow.io/v1/accounts/{account_id}/payins"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.hopnow.io/v1/accounts/{account_id}/payins', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.hopnow.io/v1/accounts/{account_id}/payins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.hopnow.io/v1/accounts/{account_id}/payins"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.hopnow.io/v1/accounts/{account_id}/payins")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hopnow.io/v1/accounts/{account_id}/payins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"object": "<string>",
"account_id": "<string>",
"amount": "<string>",
"currency": "<string>",
"network": "<string>",
"amount_in_usd": "<string>",
"status": "<string>",
"payment_rail": "<string>",
"note": "<string>",
"txn_hash": "<string>",
"destination_wallet_id": "<string>",
"destination_address": "<string>",
"source_address": "<string>",
"sender_name": "<string>",
"sender_account_masked": "<string>",
"sender_bank_code": "<string>",
"sender_country": "<string>",
"deposit_destination": {},
"payin_type": "<string>",
"initiated_at": "<string>",
"completed_at": "<string>",
"failed_at": "<string>",
"failed_reason": "<string>",
"voided_at": "<string>",
"voided_reason": "<string>",
"created": "<string>",
"updated": "<string>",
"created_by": "<string>",
"updated_by": "<string>"
}
],
"page": 123,
"size": 123,
"total": 123,
"pages": 123
}A payin is money received into the account, credited either to the trading account or to one of the account’s virtual accounts. Results are ordered by creation time, newest first. There are no sort parameters.
Voided payins are excluded from this list by default; pass
status=voided to see them, or fetch one directly with Get Payin.
Requires an API key with read access on the payments scope.
Path Parameters
string
required
The account’s external ID (starts with
acct_)Query Parameters
string
Filter by payin status:
pending, completed, failed or voided. When omitted, every status except voided is returned.string
Filter by currency code: a supported fiat code (for example
USD, EUR, GBP) or one of USDC, USDTstring
Filter by the rail the money arrived on: any value of
payment_rail on the payin object (swift, ach, fedwire, sepa, crypto, manual, …).string
Return only payins credited to this virtual account (starts with
va_). The virtual account must belong to this account. An unknown or foreign id returns 404, not an empty page.string
Filter payins created on or after this date (ISO 8601, inclusive)
string
Filter payins created before this date (ISO 8601, exclusive)
integer
default:"1"
Page number (minimum 1)
integer
default:"10"
Items per page (1-100)
Response
Each item is the full payin object. The same shape Get Payin returns.array
Payin objects, newest first
Show Payin Fields
Show Payin Fields
string
Payin identifier (starts with
pi_)string
Always returns
"payin"string
Account ID (starts with
acct_)string
Payin amount (decimal)
string
Currency code: a supported fiat code or one of
USDC, USDTstring
Blockchain network for a crypto payin, otherwise
nullstring
Amount converted to USD, or
null when no rate was availablestring
Payin status:
pending, completed, failed or voided. A payin moves pending → completed or pending → failed; a completed payin can later be voided. failed and voided are terminal.string
Rail the money arrived on:
swift, ach, ach_same_day, fedwire, fednow, rtp, sepa, sepa_instant, faster_payments, chaps, spei, pix, crypto or manual. null when the bank reported no rail, for example an internal transfer.string
Remittance reference attached by the sender. Read-only.
null when none was provided.string
Blockchain transaction hash for a crypto payin, otherwise
nullstring
Hop wallet the crypto payin was credited to (starts with
wal_), otherwise nullstring
On-chain address the crypto payin was sent to, otherwise
nullstring
On-chain address the crypto payin was sent from, otherwise
null. Also null when no sender address was reported for the deposit.string
Sender name as reported by the bank, or
nullstring
Masked sender account. An IBAN is masked as first 4 +
**** + last 4 (GB29****6819); an account number as **** + last 4 (****4412). null when the bank reported neither.string
Sender bank BIC, or
nullstring
Sender country as an ISO 3166-1 alpha-2 code, or
nullobject
Which balance was credited:
{"type": "trading_account"} or {"type": "virtual_account", "virtual_account_id": "va_…"}string
Payin type:
standard or manual (booked by Hop)string
ISO 8601 timestamp when the payin was initiated
string
ISO 8601 timestamp when the payin completed, or
nullstring
ISO 8601 timestamp when the payin failed, or
nullstring
Reason for failure, or
nullstring
ISO 8601 timestamp when the payin was voided, or
nullstring
Reason the payin was voided, or
nullstring
ISO 8601 timestamp when created
string
ISO 8601 timestamp when last updated
string
Actor that created the payin: the API key id (starts with
ak_), or hop_admin for a manual payinstring
Actor that last updated the payin, or
nullinteger
Current page number
integer
Items per page
integer
Total number of items
integer
Total number of pages
Errors
| Status | code | When |
|---|---|---|
404 | RESOURCE_NOT_FOUND | virtual_account_id is unknown or belongs to another account |
422 | VALIDATION_ERROR | status, currency or payment_rail is not one of the accepted values, or page/size is out of range |
Request Example
curl "https://api.hopnow.io/v1/accounts/acct_ka44qsvpo8q3wtzuwfqf0h6u/payins?status=completed¤cy=USD&size=10" \
-H "X-API-Key: your_api_key" \
-H "X-Signature: hmac_signature" \
-H "X-Timestamp: 1234567890" \
-H "X-Nonce: abc123"
Response Example
{
"items": [
{
"id": "pi_uh0p51dqek7qes5e52a6x7of",
"object": "payin",
"account_id": "acct_ka44qsvpo8q3wtzuwfqf0h6u",
"amount": "1000.00",
"currency": "USD",
"network": null,
"amount_in_usd": "1000.00",
"status": "completed",
"payment_rail": "swift",
"note": "INV-2291",
"txn_hash": null,
"destination_wallet_id": null,
"destination_address": null,
"source_address": null,
"sender_name": "ACME TRADING LTD",
"sender_account_masked": "GB29****6819",
"sender_bank_code": "NWBKGB2L",
"sender_country": "GB",
"deposit_destination": {"type": "trading_account"},
"payin_type": "standard",
"initiated_at": "2026-01-15T10:00:00Z",
"completed_at": "2026-01-15T10:05:00Z",
"failed_at": null,
"failed_reason": null,
"voided_at": null,
"voided_reason": null,
"created": "2026-01-15T10:00:00Z",
"updated": "2026-01-15T10:05:00Z",
"created_by": "ak_3f7k9m2p5r8t1v4x6z0b3n5q",
"updated_by": null
},
{
"id": "pi_8d2k6m0q4s7v1x5z9b3n7p2r",
"object": "payin",
"account_id": "acct_ka44qsvpo8q3wtzuwfqf0h6u",
"amount": "250.00",
"currency": "EUR",
"network": null,
"amount_in_usd": "271.40",
"status": "pending",
"payment_rail": "SEPA CREDIT TRANSFER",
"note": null,
"txn_hash": null,
"destination_wallet_id": null,
"destination_address": null,
"source_address": null,
"sender_name": "MARIA SCHMIDT",
"sender_account_masked": "****4412",
"sender_bank_code": "DEUTDEFF",
"sender_country": "DE",
"deposit_destination": {"type": "virtual_account", "virtual_account_id": "va_2w9e4r7t1y5u8i3o6p0a5s2d"},
"payin_type": "standard",
"initiated_at": "2026-01-15T09:40:00Z",
"completed_at": null,
"failed_at": null,
"failed_reason": null,
"voided_at": null,
"voided_reason": null,
"created": "2026-01-15T09:40:00Z",
"updated": "2026-01-15T09:40:00Z",
"created_by": "ak_3f7k9m2p5r8t1v4x6z0b3n5q",
"updated_by": null
}
],
"page": 1,
"size": 10,
"total": 2,
"pages": 1
}