Skip to main content
Every signed mutation has two checks:
  1. Session auth: sign the OMS nonce value as raw UTF-8 bytes, then exchange it at POST /auth.
  2. Action auth: sign the action-specific signable object as compact JSON bytes.
Do not hash the payload. Serialize the signable object to JSON, remove ASCII space, CR, and LF bytes from the serialized string, then Ed25519-sign the resulting UTF-8 bytes. Avoid those bytes inside signed string values. The SDK is the reference implementation; the raw form below is what it produces. Verified signable objects:

Raw signing

For curl, put the signature bytes into the request body as a JSON array of integers. The API references for the request wrappers are live at OMS.

tpluspy

Test vectors

Generated with a fresh throwaway Ed25519 key through tpluspy utilities. Public key:

Create order

Signable object: order.
Payload bytes, hex:
Signature bytes, hex:
Request body:

Replace order

Signable object: request.
Payload bytes, hex:
Signature bytes, hex:
Request body:

Cancel order

Signable object: cancel.
Payload bytes, hex:
Signature bytes, hex:
Request body: