curl --request POST \
--url https://purps.lol/api/v1/launches/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/launches/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/launches/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/launches/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/launches/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/launches/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/launches/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>"
}{
"ok": true,
"error": "<string>"
}Build the purps.lol launch
Step 2. The same terms as prepare, plus the coin’s image and socials, ts and signature. We upload the metadata, build the launch transaction (and a SOL-to-pair swap in front of it when the pair is not SOL and there is a dev buy), simulate it, and record the launch as pending. You get back unsigned transactions and the throwaway mint key. Sign each transaction with the creator wallet, and the one at createIndex with the mint key as well, then send them in order through /transactions/send. The launch goes live on its own once the pool exists on chain; poll /launches/.
curl --request POST \
--url https://purps.lol/api/v1/launches/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/launches/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/launches/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/launches/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/launches/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/launches/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/launches/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>"
}{
"ok": true,
"error": "<string>"
}Body
Everything in LaunchTerms, 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.