You've already created your customers in Yuno. This guide walks through enrolling their existing Stripe payment methods directly into Yuno's vault, no re-entry, no reauthorization, no checkout session required.
Enrollment is a direct, synchronous call. There's no session and no customer interaction, so the whole migration is a batch job you control end to end.
Send one POST request per payment method, with the Stripe token in provider_data.
On success, store the vaulted_token. On failure, log the reason and keep moving.
Stay under 6,000 requests/min. Batch in small chunks and back off on 429.
Repeat for every payment method, tracking successes, failures, and elapsed time.
One request per payment method. customer_id identifies who the method belongs to and travels in the URL, not the body.
POST https://api-sandbox.y.uno/v1/customers/{customer_id}/payment-methods ← sandbox
POST https://api.y.uno/v1/customers/{customer_id}/payment-methods ← production
customer_id is a path parameter. It's the Yuno customer ID you received when creating the customer, it belongs in the URL. Put it in the request body instead and the call fails.
{
"account_id": "your-account-id",
"country": "US",
"type": "CARD",
"provider_data": {
"id": "Stripe",
"payment_method_token": "pm_stripe_xyz123"
}
}
curl --request POST \
--url https://api-sandbox.y.uno/v1/customers/{customer_id}/payment-methods \
--header 'Content-Type: application/json' \
--header 'public-api-key: <your-public-api-key>' \
--header 'private-secret-key: <your-private-secret-key>' \
--header 'X-Idempotency-Key: <unique-uuid>' \
--data '{
"account_id": "your-account-id",
"country": "US",
"type": "CARD",
"provider_data": {
"id": "Stripe",
"payment_method_token": "pm_stripe_xyz123"
}
}'
Every call resolves immediately, success or failure. Nothing here is asynchronous.
{
"status": "ENROLLED",
"vaulted_token": "cbdcc878-ceb4-4dd8-
b0f0-49d444855de0",
"card_data": {
"brand": "VISA",
"iin": "41111111",
"lfd": "1111"
}
}
customer_id in the URL pathaccount_id in the bodyStore the vaulted_token from every success. It's your Yuno reference for all future payments against that method.
Roughly 100 requests per second. Migrations of any real size need to be paced, not fired all at once.
Batch in small chunks: send 50-100 requests, pause, repeat.
Implement exponential backoff and retry. Don't just resend immediately, that compounds the throttling.
Repeat step 1 for every payment method in the migration set. Track three things as you go:
vaulted_token valuescustomer_id values on hand.payment_method_token per card.account_id obtained from the Yuno Dashboard.public-api-key and private-secret-key.