---
title: "Phase 1: build the standard signing string"
method: POST
path: "/api/v1/verification/standardize"
tags: ["Verification"]
---

# Phase 1: build the standard signing string

`POST /api/v1/verification/standardize`

## Request

- Base URL: `https://api.proofable.me`
- URL: `https://api.proofable.me/api/v1/verification/standardize`
- Auth: none required

Raw HTTP verification uses a strict two-phase handshake. First send the exact verification body here, sign the returned signerString, then submit the same body plus signature to POST /api/v1/verification.

## Request body

- StandardizeRequest: Phase 1 of the raw HTTP verification handshake. Send the exact JSON body you intend to submit for verification. The returned signerString is the only valid message to sign for that body.
  - `walletAddress` string, required: Signer wallet address. Must be the same wallet that signs the returned signerString and the same walletAddress later submitted to POST /api/v1/verification.
  - `verifierIds` string[], required
  - `data` union, required
    - object
    - string
  - `signedTimestamp` number, required: Unix ms timestamp that becomes part of the signerString. For raw HTTP, reuse this exact value unchanged when later submitting POST /api/v1/verification.
  - `chainId` integer: Advanced/optional. EVM signing context; defaults to Base mainnet (8453) when omitted and remains independent from the optional protocol hub. For non-EVM, use chain (CAIP-2). For chain-specific asset claims (NFT, token, contract), set chainId inside verifier data, not here.
  - `chain` string: CAIP-2 signer-chain identifier. Non-EVM wallets must provide it (for example solana:mainnet); EVM wallets may provide eip155:<id> or use the Base mainnet default.
  - `signatureMethod` string

## Response `200`

OK

- StandardizeResponse: Phase 1 response for raw HTTP verification. Sign data.signerString exactly as returned, then submit the same request body plus signature to POST /api/v1/verification.
  - `success` true, required
  - `data` object, required
    - `signerString` string, required: Exact UTF-8 message to sign for the standardized request body. Do not hand-build or modify this string.
    - `bodyPreview` object, required: Normalized preview of the standardized request. This is diagnostic only; submit the same original request body, not a body reconstructed from this preview.

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited
- `500`: Server error

---

[API](https://skmtc.dev/proofable/apis/proofable-api.md) · [All operations](https://skmtc.dev/proofable/apis/proofable-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proofable/apis/proofable-api/revisions/ab03d40cb38f?raw)
