> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kuru.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create authentication challenge

> Create a one-time message for a secondary trading EOA to sign.

Public endpoint. No JWT or `Authorization` header is required. It creates a five-minute challenge for the requested wallet; sign the returned `message` exactly as received with Ethereum `personal_sign`.

<ParamField body="wallet" type="string" required>
  Nonzero 20-byte address of the secondary trading EOA. Example: `0x1111111111111111111111111111111111111111`.
</ParamField>

<RequestExample>
  ```curl cURL theme={null}
  curl --request POST \
    --url https://relay.mainnet.kuru.io/auth/challenge \
    --header 'Content-Type: application/json' \
    --data '{"wallet":"0x1111111111111111111111111111111111111111"}'
  ```
</RequestExample>

<ResponseField name="challengeId" type="string" required>
  Lowercase 128-bit challenge identifier without a `0x` prefix.
</ResponseField>

<ResponseField name="message" type="string" required>
  Exact UTF-8 SIWE-style message to sign with ERC-191 `personal_sign`.
</ResponseField>

<ResponseField name="expiresAt" type="string" required>
  Challenge expiration as an ISO 8601 timestamp.
</ResponseField>

<ResponseExample>
  ```json 200 theme={null}
  {
    "challengeId": "8c4a11c6eb574d16972fac2a8c85a6dc",
    "message": "relay.mainnet.kuru.io wants you to sign in with your Ethereum account:\n0x1111111111111111111111111111111111111111\n...",
    "expiresAt": "2026-08-27T10:05:00Z"
  }
  ```

  ```json 403 theme={null}
  {
    "code": "AUTHENTICATION_FAILED",
    "message": "authentication failed",
    "retryable": false
  }
  ```
</ResponseExample>


## OpenAPI

````yaml api/relay/openapi.yaml POST /auth/challenge
openapi: 3.1.0
info:
  title: Kuru Relay API
  version: 1.0.0
servers:
  - url: https://relay.mainnet.kuru.io
    description: Monad mainnet (default; submits real transactions)
  - url: https://relay.testnet.kuru.io
    description: Monad testnet
security: []
paths:
  /auth/challenge:
    post:
      summary: Create authentication challenge
      operationId: createChallenge
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - wallet
              properties:
                wallet:
                  type: string
                  description: Trading wallet address
      responses:
        '200':
          description: Short-lived challenge
      security: []

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.