Skip to main content
GET
/
express
/
craft-txn
Craft express verification payment transaction
curl --request GET \
  --url https://api.jup.ag/tokens/v2/verify/express/craft-txn \
  --header 'x-api-key: <api-key>'
import requests

url = "https://api.jup.ag/tokens/v2/verify/express/craft-txn"

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.jup.ag/tokens/v2/verify/express/craft-txn', 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.jup.ag/tokens/v2/verify/express/craft-txn",
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.jup.ag/tokens/v2/verify/express/craft-txn"

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.jup.ag/tokens/v2/verify/express/craft-txn")
.header("x-api-key", "<api-key>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.jup.ag/tokens/v2/verify/express/craft-txn")

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
{
  "transaction": "<string>",
  "requestId": "<string>",
  "receiverAddress": "<string>",
  "mint": "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN",
  "amount": "<string>",
  "tokenDecimals": 123,
  "feeLamports": 123,
  "feeMint": "<string>",
  "feeTokenDecimals": 123,
  "feeAmount": 123,
  "totalTime": 123,
  "code": 123,
  "gasless": true,
  "tokenUsdRate": 123,
  "feeUsdAmount": 123,
  "expireAt": "<string>",
  "error": "<string>",
  "inputMint": "<string>",
  "inputDecimals": 123,
  "quotedInputAmount": "<string>",
  "maxInputAmount": "<string>"
}
{
"status": 123,
"message": "<string>",
"error": "<string>"
}
{
"status": 123,
"message": "<string>",
"error": "<string>"
}

Authorizations

x-api-key
string
header
required

Query Parameters

senderAddress
string
required

Solana wallet address that will sign and pay for the transaction

paymentCurrency
enum<string>

Payment currency. Defaults to JUP (direct transfer). SOL/USDC/JUPUSD route through an Ultra swap to JUP. Accepted payment currency, given as a token symbol (not a mint address): JUP, SOL, USDC, or JUPUSD. All input currencies are converted to 1000 JUP. JUP transfers directly; SOL, USDC, and JUPUSD are swapped to 1000 JUP via Ultra.

Available options:
JUP,
SOL,
USDC,
JUPUSD
Example:

"JUP"

Response

Unsigned payment transaction

transaction
string
required

Base64-encoded unsigned transaction

requestId
string
required

Unique request ID. Pass this to the execute endpoint.

receiverAddress
string
required

Wallet address receiving the JUP payment

mint
string
required

Mint address of the payment token (JUP)

Example:

"JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"

amount
string
required

JUP amount collected in smallest unit. JUP path transfers exactly 1000 JUP (1000000000); swap paths yield at least that.

tokenDecimals
number
required

Decimals of the payment token

feeLamports
number
required

Transaction fee in lamports

feeMint
string
required

Mint address of the fee token

feeTokenDecimals
number
required

Decimals of the fee token

feeAmount
number
required

Fee amount in smallest unit

totalTime
number
required

Time taken to craft the transaction in milliseconds

code
number
required

Status code (0 for success)

gasless
boolean
required

Whether the transaction is gasless

tokenUsdRate
number

USD rate of the payment token at time of crafting

feeUsdAmount
number

Transaction fee in USD

expireAt
string

Expiry timestamp for the crafted transaction

error
string

Error message if crafting failed

inputMint
string

Input token mint address (non-JUP paths)

inputDecimals
number

Input token decimals (non-JUP paths)

quotedInputAmount
string

Atomic input amount for the swap, sized to yield at least 1000 JUP (non-JUP paths)

maxInputAmount
string

Maximum atomic input amount for the swap; equal to quotedInputAmount on the current swap flow (non-JUP paths)