Exchange OAuth code for JWT
curl --request POST \
--url https://api.gumnut.ai/api/oauth/exchange \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"state": "<string>",
"error": "<string>",
"code_verifier": "<string>"
}
'import requests
url = "https://api.gumnut.ai/api/oauth/exchange"
payload = {
"code": "<string>",
"state": "<string>",
"error": "<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>',
state: '<string>',
error: '<string>',
code_verifier: '<string>'
})
};
fetch('https://api.gumnut.ai/api/oauth/exchange', 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.gumnut.ai/api/oauth/exchange",
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>',
'state' => '<string>',
'error' => '<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://api.gumnut.ai/api/oauth/exchange"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"state\": \"<string>\",\n \"error\": \"<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://api.gumnut.ai/api/oauth/exchange")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"state\": \"<string>\",\n \"error\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gumnut.ai/api/oauth/exchange")
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 \"state\": \"<string>\",\n \"error\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"user": {
"id": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"clerk_user_id": "<string>",
"is_active": true,
"is_verified": true
}
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>"
}oauth
Exchange OAuth code for JWT
Exchange OAuth authorization code for application JWT after validating state, nonce, and ID token signature. User is retrieved from or created in the database and details added to the JWT.
POST
/
api
/
oauth
/
exchange
Exchange OAuth code for JWT
curl --request POST \
--url https://api.gumnut.ai/api/oauth/exchange \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"state": "<string>",
"error": "<string>",
"code_verifier": "<string>"
}
'import requests
url = "https://api.gumnut.ai/api/oauth/exchange"
payload = {
"code": "<string>",
"state": "<string>",
"error": "<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>',
state: '<string>',
error: '<string>',
code_verifier: '<string>'
})
};
fetch('https://api.gumnut.ai/api/oauth/exchange', 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.gumnut.ai/api/oauth/exchange",
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>',
'state' => '<string>',
'error' => '<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://api.gumnut.ai/api/oauth/exchange"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"state\": \"<string>\",\n \"error\": \"<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://api.gumnut.ai/api/oauth/exchange")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"state\": \"<string>\",\n \"error\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gumnut.ai/api/oauth/exchange")
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 \"state\": \"<string>\",\n \"error\": \"<string>\",\n \"code_verifier\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"access_token": "<string>",
"user": {
"id": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"clerk_user_id": "<string>",
"is_active": true,
"is_verified": true
}
}{
"detail": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>"
}Body
application/json
Request to exchange OAuth code for JWT
Authorization code returned by the OAuth provider after user consent
State token from the initial auth request, used for CSRF protection
Error code if OAuth provider returned an error instead of authorization code
PKCE code verifier that corresponds to the code_challenge sent in the authorization request
⌘I