curl --request POST \
--url https://b2b-api.dev-riseworks.io/v1/payments/pay \
--header 'Content-Type: application/json' \
--data '
{
"wallet": "<string>",
"rise_id": "<string>",
"payee": "<string>",
"amount": "<string>",
"salt": "<string>",
"request": {},
"signature": "<string>",
"title": "<string>",
"description": "<string>",
"external_id": "<string>"
}
'import requests
url = "https://b2b-api.dev-riseworks.io/v1/payments/pay"
payload = {
"wallet": "<string>",
"rise_id": "<string>",
"payee": "<string>",
"amount": "<string>",
"salt": "<string>",
"request": {},
"signature": "<string>",
"title": "<string>",
"description": "<string>",
"external_id": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
wallet: '<string>',
rise_id: '<string>',
payee: '<string>',
amount: '<string>',
salt: '<string>',
request: {},
signature: '<string>',
title: '<string>',
description: '<string>',
external_id: '<string>'
})
};
fetch('https://b2b-api.dev-riseworks.io/v1/payments/pay', 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://b2b-api.dev-riseworks.io/v1/payments/pay",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet' => '<string>',
'rise_id' => '<string>',
'payee' => '<string>',
'amount' => '<string>',
'salt' => '<string>',
'request' => [
],
'signature' => '<string>',
'title' => '<string>',
'description' => '<string>',
'external_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://b2b-api.dev-riseworks.io/v1/payments/pay"
payload := strings.NewReader("{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://b2b-api.dev-riseworks.io/v1/payments/pay")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://b2b-api.dev-riseworks.io/v1/payments/pay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"to": "<string>",
"from": "<string>",
"contractAddress": "<string>",
"transactionIndex": 123,
"gasUsed": {
"type": "<string>",
"hex": "<string>"
},
"logsBloom": "<string>",
"blockHash": "<string>",
"transactionHash": "<string>",
"logs": [
{
"transactionIndex": 123,
"blockNumber": 123,
"transactionHash": "<string>",
"address": "<string>",
"topics": [
"<string>"
],
"data": "<string>",
"logIndex": 123,
"blockHash": "<string>"
}
],
"blockNumber": 123,
"confirmations": 123,
"cumulativeGasUsed": {
"type": "<string>",
"hex": "<string>"
},
"effectiveGasPrice": {
"type": "<string>",
"hex": "<string>"
},
"status": 123,
"type": 123,
"byzantium": true
}
}{
"error": "Bad Request",
"message": {
"type": "invalid_parameters",
"errors": {}
}
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}Execute instant payment (V1 Legacy)
V1-compatible endpoint to broadcast a previously-signed single pay-now payment. Duplicates are rejected (HTTP 409) on two independent keys: the salt-derived on-chain id (paying team account, payee, amount, salt) and, when provided, external_id (unique per payer).
curl --request POST \
--url https://b2b-api.dev-riseworks.io/v1/payments/pay \
--header 'Content-Type: application/json' \
--data '
{
"wallet": "<string>",
"rise_id": "<string>",
"payee": "<string>",
"amount": "<string>",
"salt": "<string>",
"request": {},
"signature": "<string>",
"title": "<string>",
"description": "<string>",
"external_id": "<string>"
}
'import requests
url = "https://b2b-api.dev-riseworks.io/v1/payments/pay"
payload = {
"wallet": "<string>",
"rise_id": "<string>",
"payee": "<string>",
"amount": "<string>",
"salt": "<string>",
"request": {},
"signature": "<string>",
"title": "<string>",
"description": "<string>",
"external_id": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
wallet: '<string>',
rise_id: '<string>',
payee: '<string>',
amount: '<string>',
salt: '<string>',
request: {},
signature: '<string>',
title: '<string>',
description: '<string>',
external_id: '<string>'
})
};
fetch('https://b2b-api.dev-riseworks.io/v1/payments/pay', 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://b2b-api.dev-riseworks.io/v1/payments/pay",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'wallet' => '<string>',
'rise_id' => '<string>',
'payee' => '<string>',
'amount' => '<string>',
'salt' => '<string>',
'request' => [
],
'signature' => '<string>',
'title' => '<string>',
'description' => '<string>',
'external_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://b2b-api.dev-riseworks.io/v1/payments/pay"
payload := strings.NewReader("{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://b2b-api.dev-riseworks.io/v1/payments/pay")
.header("Content-Type", "application/json")
.body("{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://b2b-api.dev-riseworks.io/v1/payments/pay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet\": \"<string>\",\n \"rise_id\": \"<string>\",\n \"payee\": \"<string>\",\n \"amount\": \"<string>\",\n \"salt\": \"<string>\",\n \"request\": {},\n \"signature\": \"<string>\",\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"external_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"to": "<string>",
"from": "<string>",
"contractAddress": "<string>",
"transactionIndex": 123,
"gasUsed": {
"type": "<string>",
"hex": "<string>"
},
"logsBloom": "<string>",
"blockHash": "<string>",
"transactionHash": "<string>",
"logs": [
{
"transactionIndex": 123,
"blockNumber": 123,
"transactionHash": "<string>",
"address": "<string>",
"topics": [
"<string>"
],
"data": "<string>",
"logIndex": 123,
"blockHash": "<string>"
}
],
"blockNumber": 123,
"confirmations": 123,
"cumulativeGasUsed": {
"type": "<string>",
"hex": "<string>"
},
"effectiveGasPrice": {
"type": "<string>",
"hex": "<string>"
},
"status": 123,
"type": 123,
"byzantium": true
}
}{
"error": "Bad Request",
"message": {
"type": "invalid_parameters",
"errors": {}
}
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}{
"success": false,
"data": "<string>",
"error_code": "<string>"
}Body
Wallet address of the payer.
RiseID, address, or team nanoid of the paying team.
RiseID, address, or user nanoid of the payee.
Payment amount in micro-USD (1,000,000 = $1.00).
Uniqueness value for this payment. Rise derives the payment on-chain id from (paying team account, payee, amount, salt); repeating that exact combination is rejected as a duplicate (HTTP 409). Salt alone is not the idempotency key — the same salt with a different payee or amount creates a distinct payment. Use external_id for a caller-controlled idempotency key.
The typed-data request object returned by the sign step.
Show child attributes
Show child attributes
Signature over the typed data returned by the sign step.
Optional payment title (max 60 chars).
Optional payment description (max 1000 chars).
Optional caller-supplied reference (max 500 characters; longer values are truncated). Also acts as a per-payer idempotency key: reusing an external_id already used by this payer is rejected with HTTP 409 (EXTERNAL_ID_ALREADY_USED). Independent of salt. Returned on each payment and filterable via the external_ids query parameter on list-payments.
Response
Default Response
ethers-v5-shaped transaction receipt, matching V1.
Show child attributes
Show child attributes
