Skip to main content
POST
/
api
/
deposits
/
relay
Submit a signed permit for gasless deposit relay
curl --request POST \
  --url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/deposits/relay \
  --header 'Content-Type: application/json' \
  --header 'X-Api-Key: <api-key>' \
  --data '
{
  "amount": "25000000",
  "permitNonce": "7",
  "permitDeadline": 1780000000,
  "v": 27,
  "r": "0x...",
  "s": "0x...",
  "permitOwner": "0x1234567890abcdef1234567890abcdef12345678"
}
'
{
  "auditId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "jobId": "<string>",
  "status": "PENDING_SCREENING"
}

Authorizations

X-Api-Key
string
header
required

Partner / integrator key — format ps_live_<keyId>_<secret>. Issued by PredictStreet ops via the admin panel; never self-service. Never ship to a browser. multi_wallet partners must additionally send X-User-Wallet: 0x<40-hex> on every authenticated request to declare the acting wallet. See the API keys guide for scope taxonomy, partner kinds, rate limits, and rotation procedure.

Headers

X-User-Wallet
string

Required for multi_wallet partners on every authenticated request; ignored for single_wallet. Declares the acting end-user wallet for this request — drives KYC checks, balances/positions/orders attribution, rate-limit buckets, and audit. Lower-cased server-side. Missing on a multi_wallet key → 401 api_key_user_wallet_required; malformed → 401 api_key_user_wallet_invalid. The on-chain CTFExchange/Vault contracts still verify EIP-712 signer ↔ vault binding, so loosening API-layer attribution is safe by construction.

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb3"

Body

application/json
amount
string
required

USDC amount in raw units (6 decimals — 1 USDC = "1000000"). Must equal the value signed into the permit.

Example:

"25000000"

permitNonce
string
required

Current USDC.nonces(owner), read on-chain immediately before signing.

Example:

"7"

permitDeadline
integer
required

EIP-2612 permit deadline, unix seconds. Must leave the submitter enough buffer or the request is rejected with permit_deadline_too_soon.

Example:

1780000000

v
integer
required

Recovery id of the permit signature.

Example:

27

r
string
required

32-byte r component of the permit signature (0x-hex).

Example:

"0x..."

s
string
required

32-byte s component of the permit signature (0x-hex).

Example:

"0x..."

permitOwner
string

Optional. The wallet the permit was built for; if present it must equal the authenticated wallet, else permit_signer_mismatch. Defence-in-depth only — the canonical signer is recovered server-side.

Example:

"0x1234567890abcdef1234567890abcdef12345678"

Response

Permit accepted and enqueued for relay.

auditId
string<uuid>
required

Deposit audit id — poll GET /api/deposits/relay/{auditId}.

jobId
string
required

Enqueued meta-tx (permit_deposit) job id.

status
string
required

Initial status, typically PENDING_SCREENING.

Example:

"PENDING_SCREENING"