curl --request POST \
--url https://purps.lol/api/v1/pumpfun/submit \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"imageUrl": "<string>",
"description": "<string>",
"website": "<string>",
"twitter": "<string>",
"telegram": "<string>",
"ts": 123,
"signature": "<string>"
}
'import requests
url = "https://purps.lol/api/v1/pumpfun/submit"
payload = {
"image": "<string>",
"imageUrl": "<string>",
"description": "<string>",
"website": "<string>",
"twitter": "<string>",
"telegram": "<string>",
"ts": 123,
"signature": "<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({
image: '<string>',
imageUrl: '<string>',
description: '<string>',
website: '<string>',
twitter: '<string>',
telegram: '<string>',
ts: 123,
signature: '<string>'
})
};
fetch('https://purps.lol/api/v1/pumpfun/submit', 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://purps.lol/api/v1/pumpfun/submit",
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([
'image' => '<string>',
'imageUrl' => '<string>',
'description' => '<string>',
'website' => '<string>',
'twitter' => '<string>',
'telegram' => '<string>',
'ts' => 123,
'signature' => '<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://purps.lol/api/v1/pumpfun/submit"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<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://purps.lol/api/v1/pumpfun/submit")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://purps.lol/api/v1/pumpfun/submit")
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 \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"mint": "<string>",
"poolId": "<string>",
"transactions": [
"<string>"
],
"createIndex": 123,
"mintSecret": "<string>",
"imageUrl": "<string>",
"url": "<string>"
}
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}Build the pump.fun launch
Step 2. Builds the pump.fun create transaction with the coin’s creator fees already pointed at the coin’s PURPS wallet. Sign with the creator wallet and the mint key, send through /transactions/send, then call /pumpfun/fees to lock the fee routing and /redirects to attach the strategy.
curl --request POST \
--url https://purps.lol/api/v1/pumpfun/submit \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"imageUrl": "<string>",
"description": "<string>",
"website": "<string>",
"twitter": "<string>",
"telegram": "<string>",
"ts": 123,
"signature": "<string>"
}
'import requests
url = "https://purps.lol/api/v1/pumpfun/submit"
payload = {
"image": "<string>",
"imageUrl": "<string>",
"description": "<string>",
"website": "<string>",
"twitter": "<string>",
"telegram": "<string>",
"ts": 123,
"signature": "<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({
image: '<string>',
imageUrl: '<string>',
description: '<string>',
website: '<string>',
twitter: '<string>',
telegram: '<string>',
ts: 123,
signature: '<string>'
})
};
fetch('https://purps.lol/api/v1/pumpfun/submit', 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://purps.lol/api/v1/pumpfun/submit",
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([
'image' => '<string>',
'imageUrl' => '<string>',
'description' => '<string>',
'website' => '<string>',
'twitter' => '<string>',
'telegram' => '<string>',
'ts' => 123,
'signature' => '<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://purps.lol/api/v1/pumpfun/submit"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<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://purps.lol/api/v1/pumpfun/submit")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://purps.lol/api/v1/pumpfun/submit")
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 \"image\": \"<string>\",\n \"imageUrl\": \"<string>\",\n \"description\": \"<string>\",\n \"website\": \"<string>\",\n \"twitter\": \"<string>\",\n \"telegram\": \"<string>\",\n \"ts\": 123,\n \"signature\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"mint": "<string>",
"poolId": "<string>",
"transactions": [
"<string>"
],
"createIndex": 123,
"mintSecret": "<string>",
"imageUrl": "<string>",
"url": "<string>"
}
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}{
"ok": true,
"error": "<string>"
}Body
Everything in PumpTerms, plus:
The coin's logo as a data URL (data:image/png;base64,…). PNG, JPEG, WebP or GIF, 512KB max. Send this or imageUrl.
A public https link to the logo instead of image. Fetched by us under the same size and type rules.
Up to 500 characters.
https:// link. Defaults to the coin's purps.lol page.
https:// link.
https:// link.
The ts the prepare step returned.
Your wallet's signature over the prepared message. Base58 on Solana, 0x-hex on Robinhood Chain.