save

abstract suspend fun save(customerId: String, cardToken: String, brand: String, last4: String, idempotencyKey: String): SavedInstrument

POST /vault/{customerId}/instruments. idempotencyKey must be stable across retries of the SAME logical save attempt, same contract as PaymentBackend.createOrder's.