Implementation guides

Public demo endpoints

Qualy provides a set of public demo endpoints that you can call directly from your marketing pages, landing pages, or student-facing websites. These let you dynamically enrich your content with live FX rate comparisons and financing simulations without setting up a backend, reverse proxy, or any server-side infrastructure.

The same data is also available through the authenticated Qualy API for use in your own applications.


Authentication

To use the demo endpoints, you need a demo integration API key. Contact us to request one.

Once you have your key, pass it in the Authorization header with every request:

Authorization: ApiKey pk_demo_integration_xxxx

Authenticated API

These same endpoints are also available at https://api.qualyhq.com using standard API key authentication with an Authorization and X-TENANT-ID header. The response format is identical.


FX rates

Aggregates foreign exchange rates from multiple providers and returns them ranked by competitiveness. Use this to display a rate comparison widget showing which provider offers the best conversion rate.

Endpoint

GET https://demos.qualyhq.com/fx-rates

Request parameters

ParameterTypeDescription
sourceAmountnumber (required)The amount to convert, in the source currency's minor unit (cents). For example, 50000 for 500.00 BRL.
sourceCurrencystring (required)ISO 4217 currency code for the source currency. For example, BRL.
targetCountrystring (required)ISO 3166-1 alpha-2 country code for the country where the money is being sent to. For example, BR for Brazil.
targetCurrencystring (required)ISO 4217 currency code for the target currency. For example, AUD.

Example request

// Using your demo integration key
const params = new URLSearchParams({
  sourceAmount: '50000',
  sourceCurrency: 'BRL',
  targetCountry: 'BR',
  targetCurrency: 'AUD',
});

const response = await fetch(
  `https://demos.qualyhq.com/fx-rates?${params.toString()}`,
  {
    headers: {
      'Authorization': 'ApiKey pk_demo_integration_xxxx',
    },
  }
);

const result = await response.json();
console.log(result);

Response structure

The response returns a data object where each key is a gateway (provider) name, containing rate details and provider metadata.

{
  "data": {
    "qualy": {
      "gateway": "qualy",
      "targetAmount": 23456.78,
      "rate": 2.1234,
      "comparison": {
        "rank": 1,
        "isBestRate": true,
        "differencePercentage": 0
      },
      "provider": {
        "name": "Qualy",
        "logos": {
          "normal": {
            "svgUrl": "https://...",
            "pngUrl": "https://..."
          }
        }
      }
    },
    "wise": {
      "gateway": "wise",
      "targetAmount": 23100.00,
      "rate": 2.1050,
      "comparison": {
        "rank": 2,
        "isBestRate": false,
        "differencePercentage": -0.87
      },
      "provider": {
        "name": "Wise",
        "logos": {
          "normal": {
            "svgUrl": "https://...",
            "pngUrl": "https://..."
          }
        }
      }
    }
  }
}

Response fields

FieldTypeDescription
gatewaystringInternal identifier for the provider.
targetAmountnumberThe converted amount the recipient would receive in the target currency.
ratenumberThe exchange rate applied for this provider.
comparison.ranknumberRanking position among all providers (1 = best).
comparison.isBestRatebooleanWhether this provider offers the best rate.
comparison.differencePercentagenumberPercentage difference compared to the best rate. Negative means worse.
provider.namestringDisplay name of the provider.
provider.logos.normal.svgUrlstring or nullURL to the provider's SVG logo, if available.
provider.logos.normal.pngUrlstring or nullURL to the provider's PNG logo, if available.

Providers

Not all providers return logos. Some providers do not have logos available, so your UI should handle this gracefully (e.g. by showing the provider name as a text fallback).

GatewayDisplay nameHas logo
qualyQualyYes
transfermateTransferMateYes
xeXEYes
wiseWiseYes
edwalletEdWalletNo
nexpayNexpayNo
abraseeioAbraseeioNo

Displaying a single rate

If you don't want to show a competitive comparison between providers, use the qualy provider entry from the response. This represents the rate that Qualy is able to offer and can be displayed on its own as "your" exchange rate — without needing to reference other providers.

Supported currencies

The endpoint supports 26+ currencies including: AUD, BRL, EUR, GBP, USD, CAD, NZD, CHF, CNY, JPY, INR, KRW, HKD, SGD, TWD, VND, COP, MXN, CLP, ARS, PEN, PLN, DKK, SEK, NOK, TRY, ZAR, and AED.


Financing simulation

Returns available installment plans for a given amount, showing how a payment can be split into multiple installments along with any applicable interest rates.

Endpoint

GET https://demos.qualyhq.com/financing-rates

Request parameters

ParameterTypeDescription
amountnumber (required)The total amount in cents. For example, 100000 for R$1,000.00.
currencystring (required)ISO 4217 currency code. Currently supports BRL.
gatewaystring (required)The payment gateway to simulate with. For example, pagbank.
methodstring (required)The payment method identifier for the gateway. For example, PGBNK_CC for PagBank credit card.

Example request

// Using your demo integration key
const amountInCents = 1000000; // R$10,000.00

const response = await fetch(
  `https://demos.qualyhq.com/financing-rates?amount=${amountInCents}&currency=BRL&gateway=pagbank&method=PGBNK_CC`,
  {
    headers: {
      'Authorization': 'ApiKey pk_demo_integration_xxxx',
    },
  }
);

const result = await response.json();
console.log(result);

Response structure

The response returns an array of installment simulations, each representing a different payment plan option.

{
  "success": true,
  "data": {
    "simulations": [
      {
        "nInstallments": 1,
        "installmentAmount": 100000,
        "total": 100000,
        "interestRate": 0,
        "feePercentage": 0,
        "gateway": "pagbank",
        "method": "PGBNK_CC"
      },
      {
        "nInstallments": 3,
        "installmentAmount": 34500,
        "total": 103500,
        "interestRate": 0.035,
        "feePercentage": 0.035,
        "gateway": "pagbank",
        "method": "PGBNK_CC"
      },
      {
        "nInstallments": 6,
        "installmentAmount": 18200,
        "total": 109200,
        "interestRate": 0.092,
        "feePercentage": 0.092,
        "gateway": "pagbank",
        "method": "PGBNK_CC"
      }
    ]
  }
}

Response fields

FieldTypeDescription
nInstallmentsnumberNumber of installments (1 = lump sum payment).
installmentAmountnumberAmount per installment, in cents.
totalnumberTotal amount to be paid across all installments, in cents.
interestRatenumberInterest rate as a decimal. For example, 0.035 means 3.5%. A value of 0 means interest-free.
feePercentagenumberFee percentage applied to the total. May be used as an alternative to interestRate.
gatewaystringThe payment gateway handling this financing option.
methodstringThe payment method (e.g., PGBNK_CC).

Error handling

When the request fails, the endpoint returns a 400 Bad Request HTTP status code.

Things to know

  • Amounts are always in cents (minor currency unit). Divide by 100 for display.
  • The 1-installment option represents a lump sum (full amount, no interest).
  • Interest rates vary by installment count — more installments typically means a higher rate.
  • This endpoint currently supports BRL (Brazilian Real) only.
Previous
Creating bank accounts