Skip to main content
SkinShark stores every amount as bigint cents internally. On the wire two shapes appear, depending on whether you’re reading or writing.

Reading

Both shapes are present on most endpoints. Pick whichever matches your storage:
For accounting and ledger math, work with *Cents integers — exact in JS up to 2^53. For UI display, the decimal field is fine.

Writing

Endpoints that accept money take decimal strings:
The decimal-string format ("25.00") avoids floating-point loss on the wire. The schema rejects more than two decimal places.

A safe converter

Convert from cents to decimal string without Number / 100:
The reverse — decimal string to cents — is just Number(decimal.replace(".", "")) after padding.

Currency

Every wallet has exactly one currency: USD or EUR. Merchant accounts are USD-only — attempting to set them to anything else returns MERCHANT_MUST_BE_USD (1521). Sub-users default to USD on creation; pass currency: "EUR" on POST /merchant/users to override per sub-user. Funding a sub-user from the merchant spot wallet requires both wallets to share a currency. EUR sub-users must be funded via deposit, not internal transfer:
Cross-currency transfers go through the deposit flow (deposit fiat in the sub-user’s currency) rather than direct fund transfers.