Prerequisites
- Get an API key at portal.jup.ag. All requests require the
x-api-keyheader. - The submitting wallet needs at least 1000 JUP. Transactions are gasless, so no SOL is required for fees.
Flow
The API is a three-step flow: check eligibility, craft a payment transaction, sign it, then execute.Step 1: Check Eligibility (Optional)
Check if the token can be submitted for verification and/or metadata updates. This step is optional since the execute step also rejects ineligible tokens before charging payment, but it keeps your flow clean and avoids unnecessary transaction crafting. The most common reason for ineligibility is an existing pending submission for the token.| Field | Type | Description |
|---|---|---|
tokenExists | boolean | Whether Jupiter recognizes the token |
isVerified | boolean | Whether the token is already verified |
canVerify | boolean | Whether a verification request can be submitted |
canMetadata | boolean | Whether a metadata update can be submitted |
verificationError | string | Why verification cannot proceed (only present when there is a specific error) |
metadataError | string | Why metadata cannot proceed (only present when there is a specific error) |
canVerify and canMetadata are false, the submission will be rejected before any payment is charged.
Step 2: Craft the Payment Transaction
This returns an unsigned Solana transaction that transfers 1000 JUP. Save therequestId from the response, you need it in the next step.
requestId that links this payment to your execute request.
| Field | Type | Description |
|---|---|---|
transaction | string | Base64-encoded unsigned transaction |
requestId | string | Unique ID for this payment. Pass to /execute. |
mint | string | Payment token mint (JUP) |
amount | string | Payment amount in smallest unit (1000000000 = 1000 JUP) |
expireAt | string | Transaction expiry timestamp |
gasless | boolean | Whether the transaction is gasless |
Step 3: Sign and Execute
Sign the transaction from Step 2 with your wallet, then submit it along with the token details and metadata.| Field | Type | Description |
|---|---|---|
status | "Success" | "Failed" | Whether the transaction executed |
signature | string | On-chain transaction signature (on success) |
verificationCreated | boolean | Whether a verification request was created |
metadataCreated | boolean | Whether a metadata update request was created |
Token Metadata Fields
ThetokenMetadata object in the execute request is optional. Include it to update metadata alongside your verification submission. Only tokenId is required, all other fields are optional.
| Field | Type | Description |
|---|---|---|
tokenId | string | Token mint address (required) |
name | string | Token display name |
symbol | string | Token ticker symbol |
icon | string | URL to token icon image |
website | string | Project website URL |
twitter | string | Twitter/X profile URL |
twitterCommunity | string | Twitter/X community URL |
telegram | string | Telegram group URL |
discord | string | Discord invite URL |
instagram | string | Instagram profile URL |
tiktok | string | TikTok profile URL |
tokenDescription | string | Short description of the token |
circulatingSupply | string | Circulating supply value |
circulatingSupplyUrl | string | URL to a live circulating supply endpoint |
coingeckoCoinId | string | CoinGecko coin ID for price data |
otherUrl | string | Any other relevant URL |
Known Projects and Launchpads
If you are a known project or launchpad on Solana, DM @jup_vrfd from your organization account on X. This lets the VRFD team connect your Jupiter Portal OrgId, which adds credibility and supports your submissions.API Reference
Check Eligibility
Check if a token can be verified
Craft Transaction
Get an unsigned 1000 JUP payment transaction
Execute
Submit signed transaction with token details
