Refresh access token
curl --request POST \
--url https://api.getmetacognition.com/auth/refresh \
--header 'Content-Type: application/json' \
--data '
{
"refresh_token": "<string>"
}
'import requests
url = "https://api.getmetacognition.com/auth/refresh"
payload = { "refresh_token": "<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({refresh_token: '<string>'})
};
fetch('https://api.getmetacognition.com/auth/refresh', 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.getmetacognition.com/auth/refresh",
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([
'refresh_token' => '<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://api.getmetacognition.com/auth/refresh"
payload := strings.NewReader("{\n \"refresh_token\": \"<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://api.getmetacognition.com/auth/refresh")
.header("Content-Type", "application/json")
.body("{\n \"refresh_token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getmetacognition.com/auth/refresh")
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 \"refresh_token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"refresh_token": "<string>",
"token_type": "<string>",
"expires_in": 123
}Auth & sessions
Refresh access token
Use a refresh token to get a new access token.
POST
/
auth
/
refresh
Refresh access token
curl --request POST \
--url https://api.getmetacognition.com/auth/refresh \
--header 'Content-Type: application/json' \
--data '
{
"refresh_token": "<string>"
}
'import requests
url = "https://api.getmetacognition.com/auth/refresh"
payload = { "refresh_token": "<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({refresh_token: '<string>'})
};
fetch('https://api.getmetacognition.com/auth/refresh', 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.getmetacognition.com/auth/refresh",
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([
'refresh_token' => '<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://api.getmetacognition.com/auth/refresh"
payload := strings.NewReader("{\n \"refresh_token\": \"<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://api.getmetacognition.com/auth/refresh")
.header("Content-Type", "application/json")
.body("{\n \"refresh_token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getmetacognition.com/auth/refresh")
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 \"refresh_token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"refresh_token": "<string>",
"token_type": "<string>",
"expires_in": 123
}Use this when an
Response —
access_token has expired and the refresh_token is still valid. The SDK does this automatically after a 401.
Body
{
"refresh_token": "eyJhbGciOiJSUzI1NiIs..."
}
string
required
The refresh token returned by
/auth/token-exchange.Response — 200
string
Fresh 24h JWT.
string
May be rotated. Store the value returned by the response.
string
Always
"bearer".number
Lifetime of the new access token in seconds.
Example
curl -X POST https://api.getmetacognition.com/auth/refresh \
-H 'content-type: application/json' \
-d '{"refresh_token":"eyJ..."}'
import httpx
resp = httpx.post(
"https://api.getmetacognition.com/auth/refresh",
json={"refresh_token": refresh_token},
)
tokens = resp.json()
When refresh fails
If the refresh token is expired (more than 7 days old) or revoked,/auth/refresh returns 401. At that point, call /auth/token-exchange with the original API key. If the API key is also gone, ask the user or service to authenticate again.
After 401
Without the SDK, implement this sequence in your HTTP client. With the SDK,AuthenticationError usually means refresh and exchange both failed.
