Get passkey session
curl --request GET \
--url https://grid.squads.xyz/api/grid/v1/passkeys/find \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-grid-environment: <x-grid-environment>' \
--data '
{
"metaInfo": {
"appName": "<string>",
"redirectUrl": "<string>"
},
"baseUrl": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
}
}
'import requests
url = "https://grid.squads.xyz/api/grid/v1/passkeys/find"
payload = {
"metaInfo": {
"appName": "<string>",
"redirectUrl": "<string>"
},
"baseUrl": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
}
}
headers = {
"x-grid-environment": "<x-grid-environment>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-grid-environment': '<x-grid-environment>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
metaInfo: {appName: '<string>', redirectUrl: '<string>'},
baseUrl: '<string>',
sessionKey: {expiration: 1, key: '11111111111111111111111111111111'}
})
};
fetch('https://grid.squads.xyz/api/grid/v1/passkeys/find', 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/find",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'metaInfo' => [
'appName' => '<string>',
'redirectUrl' => '<string>'
],
'baseUrl' => '<string>',
'sessionKey' => [
'expiration' => 1,
'key' => '11111111111111111111111111111111'
]
]),
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/find"
payload := strings.NewReader("{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}")
req, _ := http.NewRequest("GET", 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.get("https://grid.squads.xyz/api/grid/v1/passkeys/find")
.header("x-grid-environment", "<x-grid-environment>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.squads.xyz/api/grid/v1/passkeys/find")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-grid-environment"] = '<x-grid-environment>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>"
}Passkeys
Get Passkey Session
Retrieve a session URL with challenge for passkey account lookup operations.
Get passkey session
curl --request GET \
--url https://grid.squads.xyz/api/grid/v1/passkeys/find \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-grid-environment: <x-grid-environment>' \
--data '
{
"metaInfo": {
"appName": "<string>",
"redirectUrl": "<string>"
},
"baseUrl": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
}
}
'import requests
url = "https://grid.squads.xyz/api/grid/v1/passkeys/find"
payload = {
"metaInfo": {
"appName": "<string>",
"redirectUrl": "<string>"
},
"baseUrl": "<string>",
"sessionKey": {
"expiration": 1,
"key": "11111111111111111111111111111111"
}
}
headers = {
"x-grid-environment": "<x-grid-environment>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'x-grid-environment': '<x-grid-environment>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
metaInfo: {appName: '<string>', redirectUrl: '<string>'},
baseUrl: '<string>',
sessionKey: {expiration: 1, key: '11111111111111111111111111111111'}
})
};
fetch('https://grid.squads.xyz/api/grid/v1/passkeys/find', 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/find",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'metaInfo' => [
'appName' => '<string>',
'redirectUrl' => '<string>'
],
'baseUrl' => '<string>',
'sessionKey' => [
'expiration' => 1,
'key' => '11111111111111111111111111111111'
]
]),
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/find"
payload := strings.NewReader("{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}")
req, _ := http.NewRequest("GET", 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.get("https://grid.squads.xyz/api/grid/v1/passkeys/find")
.header("x-grid-environment", "<x-grid-environment>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.squads.xyz/api/grid/v1/passkeys/find")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-grid-environment"] = '<x-grid-environment>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metaInfo\": {\n \"appName\": \"<string>\",\n \"redirectUrl\": \"<string>\"\n },\n \"baseUrl\": \"<string>\",\n \"sessionKey\": {\n \"expiration\": 1,\n \"key\": \"11111111111111111111111111111111\"\n }\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>"
}The “Try It” feature is disabled for this endpoint because it initiates a WebAuthn ceremony that returns a URL. Testing requires completing the ceremony in a browser. Use the Integration Guide for implementation examples.
This endpoint returns a URL for initiating a passkey lookup ceremony, while Find Passkey Account (POST /passkeys/find) accepts an authenticator response and returns account details.
Implementation Flow
1
Request Session URL
GET /passkeys/find to retrieve session URL
2
Load UI
Display URL in iframe (web) or WebBrowser (mobile)
3
User Selects Passkey
User completes WebAuthn get() ceremony
4
Receive Result
Hosted UI returns passkey account address via postMessage or redirect
GET vs POST Comparison
| Feature | GET /passkeys/find (This Endpoint) | POST /passkeys/find |
|---|---|---|
| Purpose | Get session URL for lookup | Submit response to find account |
| Input | None (headers only) | Authenticator response |
| Output | URL with challenge | Passkey account address + session |
| Creates Session Key | No | Yes |
Challenge is valid for 60 seconds. This endpoint doesn’t create a session key—use /passkeys/auth for that.
Related Endpoints
- Find Passkey Account - Submit response to find account
- Get Passkey Account - Get account by address
- Authorize Passkey Session - Standard authentication
Authorizations
Your Grid API key from the Grid Dashboard
Headers
Solana network environment (sandbox, devnet, mainnet)
Body
application/json
Show child attributes
Show child attributes
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
Response
Passkey session URL retrieved successfully
Was this page helpful?