---
title: "Sign Form A"
method: POST
path: "/api/fma/v1/kyc/sign-form"
tags: ["Managed Custody KYC"]
---

# Sign Form A

`POST /api/fma/v1/kyc/sign-form`

UR's TurnKey wallet signs Form A on the user's behalf after the user consented in your UI; you prove that authorization by echoing the textHash from form-a-info. Returns FORMA_TEXT_MISMATCH (code 20005) if the stored text changed since the last render; re-call form-a-info and resign with the new hash. The returned state stays SignFormA; only submit advances the session.

## Headers

- `X-Ur-Id` string
- `X-External-User-Id` string
- `X-Api-Signature` string, required
- `X-Api-Deadline` string, required
- `X-Api-PublicKey` string, required

## Request body

- KycSignFormRequest
  - `sessionId` string, required — The onboarding session UUID returned by create-account.
  - `textHash` string, required — The textHash from the latest form-a-info render. Must match the current render or the call fails with FORMA_TEXT_MISMATCH (code 20005).

## Response `200`

Business result envelope. code 0 means success; business rejections return HTTP 200 with a non-zero code.

- KycSignFormResponse
  - `code` integer — Business result code. 0 means success; business rejections return HTTP 200 with a non-zero code.
  - `message` string — Human-readable diagnostic for non-zero codes.
  - `data` object
    - `state` string — Still SignFormA after a successful sign; only submit advances the session.
    - `signature` string — Hex signature over the Form A text, produced by the UR-managed wallet.
    - `signerAddress` string — The UR-managed TurnKey wallet that signed. Equals the evmAddress from create-account.

---

[API](https://skmtc.net/ur/apis/ur-api.md) · [All operations](https://skmtc.net/ur/apis/ur-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ur/ur-api/revisions/087dcf516ce2/schema)
