curl --request GET \
--url https://api.venlyfinance.com/v1/pay-ins/{payInId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.venlyfinance.com/v1/pay-ins/{payInId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.venlyfinance.com/v1/pay-ins/{payInId}', 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.venlyfinance.com/v1/pay-ins/{payInId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.venlyfinance.com/v1/pay-ins/{payInId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.venlyfinance.com/v1/pay-ins/{payInId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venlyfinance.com/v1/pay-ins/{payInId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "0c1d2e3f-4a5b-4c6d-8e7f-90a1b2c3d4e5",
"accountId": "b2a1f0e9-8c7d-4e3a-9f21-0a1b2c3d4e5f",
"virtualBankAccountId": "4d5e6f70-8192-4a3b-9c4d-5e6f7081920a",
"accountWalletId": "9f8e7d6c-5b4a-4938-8271-6a5b4c3d2e1f",
"status": "SETTLED",
"chain": "BASE",
"cryptoAsset": "USDC",
"fiatCurrency": "EUR",
"grossFiatAmount": "100.00",
"grossCryptoAmount": "108.42",
"netCryptoAmount": "108.42",
"transactionHash": "0x4f7a2c9e18b3d05a6c7e94f120d8b3a5e6f1c07d92b4a8e35f6c1d0b7a92e438",
"settledAt": "2026-08-19T09:14:52Z",
"failedAt": null,
"createdAt": "2026-08-19T09:02:10Z",
"updatedAt": "2026-08-19T09:14:52Z"
}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "unauthenticated",
"message": "Please authenticate to perform this action."
}
]
}{
"success": false,
"errors": [
{
"code": "forbidden",
"message": "You do not have permission to access this resource."
}
]
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "internal-error",
"message": "An unexpected error occurred. Please try again later."
}
]
}Get a pay-in
Read one pay-in by the id carried on the PAY_IN_SETTLED or PAY_IN_FAILED webhook.
curl --request GET \
--url https://api.venlyfinance.com/v1/pay-ins/{payInId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.venlyfinance.com/v1/pay-ins/{payInId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.venlyfinance.com/v1/pay-ins/{payInId}', 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.venlyfinance.com/v1/pay-ins/{payInId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.venlyfinance.com/v1/pay-ins/{payInId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.venlyfinance.com/v1/pay-ins/{payInId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venlyfinance.com/v1/pay-ins/{payInId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "0c1d2e3f-4a5b-4c6d-8e7f-90a1b2c3d4e5",
"accountId": "b2a1f0e9-8c7d-4e3a-9f21-0a1b2c3d4e5f",
"virtualBankAccountId": "4d5e6f70-8192-4a3b-9c4d-5e6f7081920a",
"accountWalletId": "9f8e7d6c-5b4a-4938-8271-6a5b4c3d2e1f",
"status": "SETTLED",
"chain": "BASE",
"cryptoAsset": "USDC",
"fiatCurrency": "EUR",
"grossFiatAmount": "100.00",
"grossCryptoAmount": "108.42",
"netCryptoAmount": "108.42",
"transactionHash": "0x4f7a2c9e18b3d05a6c7e94f120d8b3a5e6f1c07d92b4a8e35f6c1d0b7a92e438",
"settledAt": "2026-08-19T09:14:52Z",
"failedAt": null,
"createdAt": "2026-08-19T09:02:10Z",
"updatedAt": "2026-08-19T09:14:52Z"
}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "unauthenticated",
"message": "Please authenticate to perform this action."
}
]
}{
"success": false,
"errors": [
{
"code": "forbidden",
"message": "You do not have permission to access this resource."
}
]
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "internal-error",
"message": "An unexpected error occurred. Please try again later."
}
]
}manage:pay-in-sessions — see Required scopes.
Reads one settlement record. The payInId comes from a PAY_IN_SETTLED or PAY_IN_FAILED webhook. Unknown and foreign ids return the same 404 pay-in-not-found.
Reconcile against netCryptoAmount — that is what reached the account wallet.Authorizations
OAuth2 client credentials flow. Token endpoints:
- Token URL
- https://login-staging.venly.io/auth/realms/VenlyFinance/protocol/openid-connect/token
Headers
Which tenant the request is scoped to, among those your token grants. Omit it when the token grants exactly one tenant; it is required when the token grants more than one. A supplied value must exactly match a tenant the token grants.
Absent when required, blank, malformed, or naming a tenant the token does not grant — each gets
the same generic 403 forbidden, which reveals neither whether a tenant exists nor which ones
you may use. Send the header once: a repeated header is rejected the same way.
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Path Parameters
Unique pay-in identifier — the payInId from a PAY_IN_SETTLED or PAY_IN_FAILED event
Response
The pay-in
Indicates whether the request was successful
A pay-in settlement record — one fiat credit, its conversion, and the crypto credited to the account wallet. Amounts are exact decimal strings. Nullable fields are omitted when absent, never substituted with zero. Provider references, raw failure text, internal transaction identifiers and idempotency keys are not exposed.
Show child attributes
Show child attributes
Was this page helpful?

