curl --request POST \
--url https://grid.squads.xyz/api/grid/v1/passkeys/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-grid-environment: <x-grid-environment>' \
--data '
{
"authenticatorResponse": {
"response": {
"authenticatorData": "<string>",
"clientDataJSON": "<string>",
"publicKey": "<string>",
"signature": "<string>"
}
},
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"slotNumber": 1
}
'import requests
url = "https://grid.squads.xyz/api/grid/v1/passkeys/submit"
payload = {
"authenticatorResponse": { "response": {
"authenticatorData": "<string>",
"clientDataJSON": "<string>",
"publicKey": "<string>",
"signature": "<string>"
} },
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"slotNumber": 1
}
headers = {
"x-grid-environment": "<x-grid-environment>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-grid-environment': '<x-grid-environment>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
authenticatorResponse: {
response: {
authenticatorData: '<string>',
clientDataJSON: '<string>',
publicKey: '<string>',
signature: '<string>'
}
},
sessionKey: {expiration: 1, key: '11111111111111111111111111111111'},
slotNumber: 1
})
};
fetch('https://grid.squads.xyz/api/grid/v1/passkeys/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://grid.squads.xyz/api/grid/v1/passkeys/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([
'authenticatorResponse' => [
'response' => [
'authenticatorData' => '<string>',
'clientDataJSON' => '<string>',
'publicKey' => '<string>',
'signature' => '<string>'
]
],
'sessionKey' => [
'expiration' => 1,
'key' => '11111111111111111111111111111111'
],
'slotNumber' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-grid-environment: <x-grid-environment>"
],
]);
$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://grid.squads.xyz/api/grid/v1/passkeys/submit"
payload := strings.NewReader("{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-grid-environment", "<x-grid-environment>")
req.Header.Add("Authorization", "Bearer <token>")
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://grid.squads.xyz/api/grid/v1/passkeys/submit")
.header("x-grid-environment", "<x-grid-environment>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.squads.xyz/api/grid/v1/passkeys/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-grid-environment"] = '<x-grid-environment>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}"
response = http.request(request)
puts response.read_body{
"passkeyAccount": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"smartAccount": {
"address": "<string>",
"grid_user_id": "<string>",
"policies": {
"signers": [
{
"address": "<string>",
"permissions": []
}
],
"threshold": 1,
"admin_address": "<string>",
"time_lock": 1
}
}
}Submit passkey session
Submit passkey ceremony data (create or auth) to initialize or refresh a passkey account. Returns the passkey account address, session key, and optionally a smart account if the passkey is a signer on one.
curl --request POST \
--url https://grid.squads.xyz/api/grid/v1/passkeys/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-grid-environment: <x-grid-environment>' \
--data '
{
"authenticatorResponse": {
"response": {
"authenticatorData": "<string>",
"clientDataJSON": "<string>",
"publicKey": "<string>",
"signature": "<string>"
}
},
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"slotNumber": 1
}
'import requests
url = "https://grid.squads.xyz/api/grid/v1/passkeys/submit"
payload = {
"authenticatorResponse": { "response": {
"authenticatorData": "<string>",
"clientDataJSON": "<string>",
"publicKey": "<string>",
"signature": "<string>"
} },
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"slotNumber": 1
}
headers = {
"x-grid-environment": "<x-grid-environment>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-grid-environment': '<x-grid-environment>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
authenticatorResponse: {
response: {
authenticatorData: '<string>',
clientDataJSON: '<string>',
publicKey: '<string>',
signature: '<string>'
}
},
sessionKey: {expiration: 1, key: '11111111111111111111111111111111'},
slotNumber: 1
})
};
fetch('https://grid.squads.xyz/api/grid/v1/passkeys/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://grid.squads.xyz/api/grid/v1/passkeys/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([
'authenticatorResponse' => [
'response' => [
'authenticatorData' => '<string>',
'clientDataJSON' => '<string>',
'publicKey' => '<string>',
'signature' => '<string>'
]
],
'sessionKey' => [
'expiration' => 1,
'key' => '11111111111111111111111111111111'
],
'slotNumber' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-grid-environment: <x-grid-environment>"
],
]);
$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://grid.squads.xyz/api/grid/v1/passkeys/submit"
payload := strings.NewReader("{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-grid-environment", "<x-grid-environment>")
req.Header.Add("Authorization", "Bearer <token>")
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://grid.squads.xyz/api/grid/v1/passkeys/submit")
.header("x-grid-environment", "<x-grid-environment>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.squads.xyz/api/grid/v1/passkeys/submit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-grid-environment"] = '<x-grid-environment>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"authenticatorResponse\": {\n \"response\": {\n \"authenticatorData\": \"<string>\",\n \"clientDataJSON\": \"<string>\",\n \"publicKey\": \"<string>\",\n \"signature\": \"<string>\"\n }\n },\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n },\n \"slotNumber\": 1\n}"
response = http.request(request)
puts response.read_body{
"passkeyAccount": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
},
"smartAccount": {
"address": "<string>",
"grid_user_id": "<string>",
"policies": {
"signers": [
{
"address": "<string>",
"permissions": []
}
],
"threshold": 1,
"admin_address": "<string>",
"time_lock": 1
}
}
}Authorizations
Your Grid API key from the Grid Dashboard
Headers
Solana network environment (sandbox, devnet, mainnet)
Body
Show child attributes
Show child attributes
create, auth Grid v1 API SessionKey type that supports backward-compatible deserialization from both raw bytes array (old format) and base58 string (new format). Always serializes to base58 string format.
Show child attributes
Show child attributes
x >= 0Response
Passkey session submitted successfully. If the passkey is a signer on a smart account, smart_account data will be included in the response.
Grid v1 API SessionKey type that supports backward-compatible deserialization from both raw bytes array (old format) and base58 string (new format). Always serializes to base58 string format.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?