---
title: "Generate a session token from an EIP-191 signature"
method: POST
path: "/wallet-auth/verify"
tags: ["Wallet Auth"]
---

# Generate a session token from an EIP-191 signature

`POST /wallet-auth/verify`

## Request

- Base URL: `https://www.cloudworldmodel.ai/api`
- URL: `https://www.cloudworldmodel.ai/api/wallet-auth/verify`
- Auth: none required

Verifies the EIP-191 personal_sign signature for the challenge previously
issued by `POST /wallet-auth/challenge`. On success, returns a 24-hour
JWT session token.

Use the token as `Authorization: Bearer <token>` on `GET /simulations`
and `GET /simulations/{simulationId}` to list and retrieve simulations
claimed by this wallet address without a traditional API key.

The nonce is single-use and consumed on successful verification.
No authentication required.

## Request body

- object
  - `walletAddress` string, required: The EVM wallet address that signed the challenge
  - `signature` string, required: Hex-encoded EIP-191 signature from personal_sign (0x-prefixed, 65 bytes)

## Response `200`

Signature verified — session token issued

- object
  - `token` string, required: JWT session token (HS256, 24-hour TTL)
  - `walletAddress` string, required: The lowercase verified wallet address
  - `expiresIn` integer, required: Token lifetime in seconds (86400 = 24 hours)

## Other responses

- `400`: Invalid request data — structured field-level error
- `401`: Invalid or expired signature
- `500`: Internal server error

---

[API](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api.md) · [All operations](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cloudworldmodel/apis/cloud-world-model-agent-api/revisions/ecc3ad1ff07f?raw)
