From 293d5c0a14f8b2810aa0b472510b1171747e47d1 Mon Sep 17 00:00:00 2001 From: Marcel Ebert Date: Wed, 24 Jun 2026 13:46:21 +0200 Subject: [PATCH 1/3] Fix wrong URL in 13-kyb-deep-link.md --- docs/api/pages/13-kyb-deep-link.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api/pages/13-kyb-deep-link.md b/docs/api/pages/13-kyb-deep-link.md index 73abfa4df..a869db526 100644 --- a/docs/api/pages/13-kyb-deep-link.md +++ b/docs/api/pages/13-kyb-deep-link.md @@ -18,7 +18,7 @@ After verification the user lands on a **KYB Completed** screen. *Continue* retu ## URL Parameters -Append one of these to the widget URL (e.g. `https://widget.vortexfinance.co/en/widget?kyb`): +Append one of these to the widget URL (e.g. `https://vortexfinance.co/widget?kyb`): | URL | Behavior | |---|---| @@ -35,7 +35,7 @@ Query keys are case-sensitive: use `kyb` and `kybLocked` exactly. Region codes a `externalSessionId`, `partnerId`, and `apiKey` are forwarded in KYB mode exactly as in the quoted widget flow, so partner and session attribution work the same way: ``` -https://widget.vortexfinance.co/en/widget?kybLocked=BR&externalSessionId=my-session-id&partnerId=my-partner&apiKey=pk_live_... +https://vortexfinance.co/widget?kybLocked=BR&externalSessionId=my-session-id&partnerId=my-partner&apiKey=pk_live_... ``` Pass your partner public key (`pk_live_*` / `pk_test_*`) as `apiKey` for attribution. `externalSessionId` is your own opaque identifier and is echoed back in [webhook payloads](https://api-docs.vortexfinance.co/webhooks). @@ -46,7 +46,7 @@ The KYB deep link is a normal widget URL, so the same embed options apply: ```html @@ -54,7 +54,7 @@ The KYB deep link is a normal widget URL, so the same embed options apply: ```js window.open( - "https://widget.vortexfinance.co/en/widget?kybLocked=BR&externalSessionId=my-session-id", + "https://vortexfinance.co/widget?kybLocked=BR&externalSessionId=my-session-id", "vortex-kyb", "width=480,height=760" ); From be52569e485536922f8fd261a4b2a1ee2933a8a1 Mon Sep 17 00:00:00 2001 From: Gianfranco Date: Tue, 30 Jun 2026 12:04:45 -0300 Subject: [PATCH 2/3] disable euro flows --- apps/api/src/api/services/ramp/ramp.service.ts | 7 +++++++ .../src/components/QuoteSubmitButtons/index.tsx | 17 ++++++++++++++--- apps/frontend/src/translations/en.json | 1 + apps/frontend/src/translations/pt.json | 1 + 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/apps/api/src/api/services/ramp/ramp.service.ts b/apps/api/src/api/services/ramp/ramp.service.ts index fbdbfcb74..4a620689b 100644 --- a/apps/api/src/api/services/ramp/ramp.service.ts +++ b/apps/api/src/api/services/ramp/ramp.service.ts @@ -199,6 +199,13 @@ export class RampService extends BaseRampService { }); } + if (quote.inputCurrency === FiatToken.EURC || quote.outputCurrency === FiatToken.EURC) { + throw new APIError({ + message: "EUR ramps are currently disabled", + status: httpStatus.BAD_REQUEST + }); + } + const { normalizedSigningAccounts, ephemerals } = normalizeAndValidateSigningAccounts(signingAccounts); await validateEphemeralAccountsFresh(ephemerals); diff --git a/apps/frontend/src/components/QuoteSubmitButtons/index.tsx b/apps/frontend/src/components/QuoteSubmitButtons/index.tsx index bc9e0b1ed..938d39ef6 100644 --- a/apps/frontend/src/components/QuoteSubmitButtons/index.tsx +++ b/apps/frontend/src/components/QuoteSubmitButtons/index.tsx @@ -1,6 +1,7 @@ +import { InformationCircleIcon } from "@heroicons/react/24/outline"; import { useAppKitAccount } from "@reown/appkit/react"; import { useParams, useRouter } from "@tanstack/react-router"; -import { isNetworkEVM, RampDirection } from "@vortexfi/shared"; +import { FiatToken, isNetworkEVM, RampDirection } from "@vortexfi/shared"; import Big from "big.js"; import { FC, useMemo } from "react"; import { useTranslation } from "react-i18next"; @@ -9,7 +10,7 @@ import { usePolkadotWalletState } from "../../contexts/polkadotWallet"; import { useRampActor } from "../../contexts/rampState"; import { useRampValidation } from "../../hooks/ramp/useRampValidation"; import { useMaintenanceAwareButton } from "../../hooks/useMaintenanceAware"; -import { useInputAmount } from "../../stores/quote/useQuoteFormStore"; +import { useFiatToken, useInputAmount } from "../../stores/quote/useQuoteFormStore"; import { useQuoteStore } from "../../stores/quote/useQuoteStore"; import { useRampDirection } from "../../stores/rampDirectionStore"; import { ConnectWalletButton } from "../buttons/ConnectWalletButton"; @@ -63,6 +64,7 @@ export const QuoteSubmitButton: FC = ({ className, disab const rampActor = useRampActor(); const router = useRouter(); const params = useParams({ strict: false }); + const fiatToken = useFiatToken(); const currentErrorMessage = getCurrentErrorMessage(); @@ -73,7 +75,8 @@ export const QuoteSubmitButton: FC = ({ className, disab const hasInputAmount = Boolean(inputAmount) && !Big(inputAmount).eq(0); const isQuoteOutdated = (!!quoteInputAmount && !!inputAmount && !Big(quoteInputAmount).eq(Big(inputAmount))) || quote?.rampType !== rampDirection; - const isSubmitButtonDisabled = disabled || Boolean(currentErrorMessage) || !quote || isQuoteOutdated; + const isEurDisabled = fiatToken === FiatToken.EURC; + const isSubmitButtonDisabled = disabled || Boolean(currentErrorMessage) || !quote || isQuoteOutdated || isEurDisabled; const showSpinner = hasInputAmount && (isQuoteOutdated || pending) && !currentErrorMessage; const { buttonProps, isMaintenanceDisabled } = useMaintenanceAwareButton(isSubmitButtonDisabled || pending); @@ -106,6 +109,14 @@ export const QuoteSubmitButton: FC = ({ className, disab return (
+ {isEurDisabled && ( +
+
+ +

{t("pages.widget.details.eurRampUnavailable")}

+
+
+ )}