Create transaction pay mini app
curl --request POST \
--url https://api.neynar.com/v2/farcaster/frame/transaction/pay/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [
3
]
},
"transaction": {
"to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
}
},
"idem": "<string>"
}
'import requests
url = "https://api.neynar.com/v2/farcaster/frame/transaction/pay/"
payload = {
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [3]
},
"transaction": { "to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
} },
"idem": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
line_items: [
{
description: 'Payment for goods',
name: 'Payment',
image: 'https://i.imgur.com/ovGo3sz.png'
}
],
action: {button_color: '#000000', text: 'Pay', text_color: '#FFFFFF'},
allowlist_fids: [3]
},
transaction: {
to: {
address: '0x5a927ac639636e534b678e81768ca19e2c6280b7',
amount: 0.01,
token_contract_address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
}
},
idem: '<string>'
})
};
fetch('https://api.neynar.com/v2/farcaster/frame/transaction/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://api.neynar.com/v2/farcaster/frame/transaction/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([
'config' => [
'line_items' => [
[
'description' => 'Payment for goods',
'name' => 'Payment',
'image' => 'https://i.imgur.com/ovGo3sz.png'
]
],
'action' => [
'button_color' => '#000000',
'text' => 'Pay',
'text_color' => '#FFFFFF'
],
'allowlist_fids' => [
3
]
],
'transaction' => [
'to' => [
'address' => '0x5a927ac639636e534b678e81768ca19e2c6280b7',
'amount' => 0.01,
'token_contract_address' => '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
]
],
'idem' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.neynar.com/v2/farcaster/frame/transaction/pay/"
payload := strings.NewReader("{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://api.neynar.com/v2/farcaster/frame/transaction/pay/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.neynar.com/v2/farcaster/frame/transaction/pay/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"transaction_frame": {
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [
3
]
},
"id": "<string>",
"transaction": {
"to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
}
},
"type": "pay",
"url": "<string>"
}
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}Dynamic Transaction Frames
Create transaction pay mini app
Creates a new transaction pay mini app that can be used to collect payments through a mini app
POST
/
v2
/
farcaster
/
frame
/
transaction
/
pay
/
Create transaction pay mini app
curl --request POST \
--url https://api.neynar.com/v2/farcaster/frame/transaction/pay/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [
3
]
},
"transaction": {
"to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
}
},
"idem": "<string>"
}
'import requests
url = "https://api.neynar.com/v2/farcaster/frame/transaction/pay/"
payload = {
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [3]
},
"transaction": { "to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
} },
"idem": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
line_items: [
{
description: 'Payment for goods',
name: 'Payment',
image: 'https://i.imgur.com/ovGo3sz.png'
}
],
action: {button_color: '#000000', text: 'Pay', text_color: '#FFFFFF'},
allowlist_fids: [3]
},
transaction: {
to: {
address: '0x5a927ac639636e534b678e81768ca19e2c6280b7',
amount: 0.01,
token_contract_address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
}
},
idem: '<string>'
})
};
fetch('https://api.neynar.com/v2/farcaster/frame/transaction/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://api.neynar.com/v2/farcaster/frame/transaction/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([
'config' => [
'line_items' => [
[
'description' => 'Payment for goods',
'name' => 'Payment',
'image' => 'https://i.imgur.com/ovGo3sz.png'
]
],
'action' => [
'button_color' => '#000000',
'text' => 'Pay',
'text_color' => '#FFFFFF'
],
'allowlist_fids' => [
3
]
],
'transaction' => [
'to' => [
'address' => '0x5a927ac639636e534b678e81768ca19e2c6280b7',
'amount' => 0.01,
'token_contract_address' => '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
]
],
'idem' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.neynar.com/v2/farcaster/frame/transaction/pay/"
payload := strings.NewReader("{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://api.neynar.com/v2/farcaster/frame/transaction/pay/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.neynar.com/v2/farcaster/frame/transaction/pay/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"line_items\": [\n {\n \"description\": \"Payment for goods\",\n \"name\": \"Payment\",\n \"image\": \"https://i.imgur.com/ovGo3sz.png\"\n }\n ],\n \"action\": {\n \"button_color\": \"#000000\",\n \"text\": \"Pay\",\n \"text_color\": \"#FFFFFF\"\n },\n \"allowlist_fids\": [\n 3\n ]\n },\n \"transaction\": {\n \"to\": {\n \"address\": \"0x5a927ac639636e534b678e81768ca19e2c6280b7\",\n \"amount\": 0.01,\n \"token_contract_address\": \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\"\n }\n },\n \"idem\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"transaction_frame": {
"config": {
"line_items": [
{
"description": "Payment for goods",
"name": "Payment",
"image": "https://i.imgur.com/ovGo3sz.png"
}
],
"action": {
"button_color": "#000000",
"text": "Pay",
"text_color": "#FFFFFF"
},
"allowlist_fids": [
3
]
},
"id": "<string>",
"transaction": {
"to": {
"address": "0x5a927ac639636e534b678e81768ca19e2c6280b7",
"amount": 0.01,
"token_contract_address": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"
}
},
"type": "pay",
"url": "<string>"
}
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}{
"message": "<string>",
"code": "<string>",
"property": "<string>",
"status": 123
}Read more about this API here: Make agents prompt transactions
Node.js SDK
🔗 SDK Method: createTransactionPayFrame Use this API endpoint with the Neynar Node.js SDK for typed responses and better developer experience.Authorizations
API key to authorize requests
Body
application/json
Show child attributes
Show child attributes
Show child attributes
Show child attributes
An Idempotency key is a unique identifier for the request. Note:
- This is used to prevent duplicate requests. Use the same idem key on retry attempts.
- This should be a unique identifier for each request.
- Recommended format is a 16-character string generated by the developer at the time of making this request.
Response
Success
Show child attributes
Show child attributes
Related topics
createTransactionPayFrameGet transaction pay mini appCreate Farcaster Mini AppCreate Farcaster Mini App (v2 frame) in < 60sgetTransactionPayFrameWas this page helpful?
⌘I