Exchange a CLI authorization code
curl --request POST \
--url https://developers.myfundedperpetuals.com/v1/auth/cli/token \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"code_verifier": "<string>"
}
'import requests
url = "https://developers.myfundedperpetuals.com/v1/auth/cli/token"
payload = {
"code": "<string>",
"code_verifier": "<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({code: '<string>', code_verifier: '<string>'})
};
fetch('https://developers.myfundedperpetuals.com/v1/auth/cli/token', 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://developers.myfundedperpetuals.com/v1/auth/cli/token",
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([
'code' => '<string>',
'code_verifier' => '<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://developers.myfundedperpetuals.com/v1/auth/cli/token"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"code_verifier\": \"<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://developers.myfundedperpetuals.com/v1/auth/cli/token")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developers.myfundedperpetuals.com/v1/auth/cli/token")
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 \"code\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"api_key": "<string>",
"token_type": "Bearer",
"expires_at": 123,
"name": "<string>"
}
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}
}Authentication
Exchange a CLI authorization code
Redeems a one-time authorization code approved in the browser during fperp login, together with its PKCE code verifier, for a new expiring CLI session credential. The credential is returned exactly once and authenticates like an API key with trade access to every owned account. Available on the live host only. The fperp CLI calls this endpoint itself; it is documented for transparency rather than direct use.
POST
/
v1
/
auth
/
cli
/
token
Exchange a CLI authorization code
curl --request POST \
--url https://developers.myfundedperpetuals.com/v1/auth/cli/token \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"code_verifier": "<string>"
}
'import requests
url = "https://developers.myfundedperpetuals.com/v1/auth/cli/token"
payload = {
"code": "<string>",
"code_verifier": "<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({code: '<string>', code_verifier: '<string>'})
};
fetch('https://developers.myfundedperpetuals.com/v1/auth/cli/token', 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://developers.myfundedperpetuals.com/v1/auth/cli/token",
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([
'code' => '<string>',
'code_verifier' => '<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://developers.myfundedperpetuals.com/v1/auth/cli/token"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"code_verifier\": \"<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://developers.myfundedperpetuals.com/v1/auth/cli/token")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developers.myfundedperpetuals.com/v1/auth/cli/token")
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 \"code\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"api_key": "<string>",
"token_type": "Bearer",
"expires_at": 123,
"name": "<string>"
}
}{
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"details": [
{
"field": "<string>",
"issue": "<string>"
}
]
}
}