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": [
"CAN_INITIATE"
],
"role": "primary",
"provider": "privy"
}
],
"threshold": 1,
"admin_address": "<string>",
"time_lock": 1
}
}
}Submit Passkey Session
Submit WebAuthn ceremony data to complete passkey creation or authentication.
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": [
"CAN_INITIATE"
],
"role": "primary",
"provider": "privy"
}
],
"threshold": 1,
"admin_address": "<string>",
"time_lock": 1
}
}
}-7) signatures are supported. The authenticator response must verify user presence.Implementation Flow
Complete WebAuthn Ceremony
Extract Response
Submit to API
Process Result
Related Endpoints
- Create Passkey Session - Initialize passkey creation
- Authorize Passkey Session - Start authentication
- Get Passkey Account - Retrieve passkey details
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?