Skip to main content

What’s the difference between sandbox and production credentials?

Sandbox and production are completely isolated environments with separate API keys, separate data, and different payment method availability. Sandbox uses the base URL https://api-sandbox.y.uno/v1 and is intended for integration testing — no real funds move. Production uses a different base URL and processes real transactions. Credentials are not interchangeable: a sandbox private-secret-key will return 401 INVALID_CREDENTIALS on production endpoints and vice versa.

Why do I get 404 on webhook endpoints?

A 404 on your webhook URL means Yuno cannot reach the endpoint you registered. The most common causes are: the URL is not publicly accessible (e.g., it is pointing to localhost), the endpoint path is incorrect, or the server returned 404 because the route is not implemented. Use a tool like ngrok to expose local development endpoints during testing. Verify the registered URL in Dashboard > Settings > Webhooks exactly matches your handler’s path, including trailing slashes.

How long does a checkout session last?

Checkout sessions expire 60 minutes after creation. After expiry, the session token is permanently invalid and cannot be renewed. If a user reaches the payment step after 60 minutes, you must create a new checkout session server-side and re-initialize the SDK with the new token. Design your checkout flow to create sessions at page load time rather than at application start.

Can I use the same idempotency key for multiple payments?

No. An X-Idempotency-Key value is bound to the exact request payload it was first used with. Reusing the same key with a different payload returns 400 IDEMPOTENCY_DUPLICATED. The correct use of idempotency keys is to retry the exact same request after a network failure — same key, same payload. For each new payment intent, generate a fresh UUID v4.

What happens if a subscription payment fails?

Yuno’s subscription engine automatically retries failed subscription payments according to the retry schedule configured for your account. The subscription status moves to a degraded state, and Yuno fires a webhook event for the failed attempt. If all retries are exhausted, the subscription is marked as past-due or cancelled depending on your configuration. You can inspect retry history and manually trigger a retry from Dashboard > Subscriptions or via the subscriptions API.

How do I test card declines in sandbox?

Yuno provides test card numbers that trigger specific decline scenarios in sandbox. Use the test cards documented in the sandbox testing guide — each card number is mapped to a specific provider_code and decline type (insufficient funds, blocked card, 3DS failure, etc.). Do not use real card numbers in sandbox; they will not work and may generate compliance alerts. Refer to Dashboard > Sandbox > Test Cards for the current list.

What’s the difference between cancel and refund?

A cancel voids a payment that has not yet been captured or settled — no funds movement occurs. It applies to payments in AUTHORIZED or CREATED status (before capture). A refund returns funds for a payment that has already been captured and settled. Refunds take 3–10 business days to reflect in the cardholder’s account, depending on the issuer and card network. You cannot cancel a payment once it has been settled; you must issue a refund instead.

Can I create a payment without the SDK (direct API)?

Yes. The Yuno SDK is optional. You can create payments entirely via direct API calls using POST /v1/checkout-sessions followed by POST /v1/payments. The SDK handles the checkout UI, one-time token generation, and 3DS flows — if you build your own UI, you must handle these steps yourself. For most integrations, the SDK reduces implementation time significantly and is the recommended approach, but it is not required.

Why is my payment stuck in PROCESS status?

PROCESS means Yuno has submitted the transaction to a provider and is waiting for a final response. This is a transient status that normally resolves within seconds. If it persists for more than a few minutes, the most likely causes are: a provider-side timeout, a 3DS challenge waiting for cardholder action, or a redirect flow that was not completed. Set up webhooks for payment.status.updated events to receive the final status asynchronously rather than polling. If a payment remains in PROCESS for more than 15 minutes, escalate to Yuno support with the payment ID and timestamp.

How do I enable a new payment method?

Payment methods are enabled per country in the Yuno Dashboard — no code changes are required. Go to Dashboard > Settings > Payment Methods, select the target country, and toggle on the desired method. You will also need at least one provider connection configured for that method and country under Settings > Providers. Once enabled, the payment method becomes available through the SDK’s checkout UI and the API automatically. New methods typically take effect within a few minutes — no cache invalidation is needed.