Skip to main content
POST
/
extern
/
fe
/
auth
/
verify
Verify a SIWE signature and issue a session JWT
curl --request POST \
  --url https://{host}/extern/fe/auth/verify \
  --header 'Content-Type: application/json' \
  --header 'X-Publishable-Key: <api-key>' \
  --data '
{
  "message": "<string>",
  "signature": "<string>"
}
'
const options = {
  method: 'POST',
  headers: {'X-Publishable-Key': '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({message: '<string>', signature: '<string>'})
};

fetch('https://{host}/extern/fe/auth/verify', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
import requests

url = "https://{host}/extern/fe/auth/verify"

payload = {
    "message": "<string>",
    "signature": "<string>"
}
headers = {
    "X-Publishable-Key": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
{
  "status": "<string>",
  "data": {
    "token": "<string>",
    "expiresAt": "2023-11-07T05:31:56Z",
    "account": {
      "accountId": "<string>",
      "safeAddress": "<string>",
      "chainsDeployed": [
        123
      ]
    }
  }
}
{
  "status": "<string>",
  "message": "<string>"
}
{
  "status": "<string>",
  "message": "<string>"
}
{
  "status": "<string>",
  "message": "<string>"
}
{
  "status": "<string>",
  "message": "<string>"
}
{
  "status": "<string>",
  "message": "<string>"
}

Authorizations

X-Publishable-Key
string
header
required

Tenant publishable key (pk_live_...)

Body

application/json
message
string
required
Required string length: 1 - 4096
signature
string
required
Required string length: 132 - 2048
Pattern: ^0x(?:[0-9a-fA-F]{2})+$

Response

Success

status
string
required
Allowed value: "success"
data
object
required
Last modified on July 3, 2026