Discover/Careem API
live

Careem APIcareem.com

Get real-time AED exchange rates, transfer fees, and delivery times for all Careem remittance corridors via a single API endpoint.

This API takes change requests — .
Endpoints
1
Updated
3d ago

What is the Careem API?

The Careem Money Transfer API exposes one endpoint, get_exchange_rates, that returns live AED exchange rates and transfer details across every remittance corridor Careem supports. Each response includes the destination country, destination currency, exchange rate, fee, fee threshold amount, minimum and maximum send amounts, and estimated delivery time. An optional destination_currency filter lets you narrow results to a single ISO 4217 currency code.

This call costs1 credit / call— charged only on success
Try it
Filter results by destination currency code (ISO 4217). Case-insensitive. Accepted values confirmed: INR, GBP, PKR, PHP, BDT, SAR, EGP, TRY, USD, JOD, CAD, EUR. When omitted, all corridors are returned.
api.parse.bot/scraper/0d4ff692-d857-41e6-a357-78f9612fe2c9/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/0d4ff692-d857-41e6-a357-78f9612fe2c9/get_exchange_rates?destination_currency=INR' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace careem-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Careem Exchange Rates API Client
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, List, Dict, Any


class ParseClient:
    """Client for interacting with the Parse API."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.
        
        Args:
            api_key: API key for authentication. If not provided, uses PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "0d4ff692-d857-41e6-a357-78f9612fe2c9"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key must be provided or set as PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """
        Make an API call to the Parse endpoint.
        
        Args:
            endpoint: The endpoint name (e.g., 'get_exchange_rates')
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters to send with the request
            
        Returns:
            Parsed JSON response from the API
            
        Raises:
            requests.exceptions.RequestException: If the request fails
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        try:
            if method.upper() == "GET":
                response = requests.get(url, headers=headers, params=params)
            elif method.upper() == "POST":
                response = requests.post(url, headers=headers, json=params)
            else:
                raise ValueError(f"Unsupported HTTP method: {method}")
            
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"API request failed: {e}")
            raise

    def get_exchange_rates(self, destination_currency: Optional[str] = None) -> Dict[str, Any]:
        """
        Retrieve current AED exchange rates for all supported remittance corridors.
        
        Args:
            destination_currency: Optional filter by destination currency code (ISO 4217).
                                 Examples: INR, GBP, PKR, PHP, BDT, SAR, EGP, TRY, USD, JOD, CAD, EUR
        
        Returns:
            Dictionary containing source currency, corridors, and total count.
            Each corridor includes exchange rate, fee, min/max amounts, and delivery time.
        """
        params = {}
        if destination_currency:
            params["destination_currency"] = destination_currency
        
        return self._call("get_exchange_rates", method="GET", **params)


def format_corridor_info(corridor: Dict[str, Any]) -> str:
    """Format corridor information for display."""
    return (
        f"  {corridor['destination_country']} ({corridor['destination_currency']}): "
        f"Rate: {corridor['exchange_rate']}, "
        f"Fee: AED {corridor['fee']} (on transfers ≥ AED {corridor['fee_threshold_amount']}), "
        f"Send: AED {corridor['min_amount']}-{corridor['max_amount']}, "
        f"Delivery: {corridor['estimated_time']}"
    )


def main():
    """Practical workflow demonstrating the Careem Exchange Rates API."""
    
    # Initialize the client
    client = ParseClient()
    
    print("=" * 80)
    print("CAREEM EXCHANGE RATES API - PRACTICAL WORKFLOW")
    print("=" * 80)
    
    # Use case 1: Get all available corridors
    print("\n1. Fetching all available remittance corridors from AED...")
    all_rates = client.get_exchange_rates()
    print(f"   Source Currency: {all_rates['source_currency']}")
    print(f"   Total Corridors Available: {all_rates['total_corridors']}")
    print("\n   First 5 corridors:")
    for corridor in all_rates['corridors'][:5]:
        print(format_corridor_info(corridor))
    
    # Use case 2: Find specific corridors for popular destinations
    popular_destinations = ["INR", "PKR", "PHP", "USD", "EUR"]
    print(f"\n2. Checking exchange rates for popular destinations: {', '.join(popular_destinations)}")
    
    destination_rates = {}
    for currency in popular_destinations:
        try:
            rates = client.get_exchange_rates(destination_currency=currency)
            if rates['corridors']:
                destination_rates[currency] = rates['corridors'][0]
                corridor = rates['corridors'][0]
                print(f"\n   {currency}:")
                print(format_corridor_info(corridor))
        except Exception as e:
            print(f"\n   {currency}: Error retrieving rates - {e}")
    
    # Use case 3: Analyze sending scenarios
    print("\n3. Analyzing transfer scenarios for different amounts:")
    send_amounts = [100, 500, 1000, 5000]
    
    if "INR" in destination_rates:
        corridor = destination_rates["INR"]
        print(f"\n   Sending AED to INR (Exchange Rate: {corridor['exchange_rate']}):")
        print(f"   Fee applies on transfers ≥ AED {corridor['fee_threshold_amount']}")
        
        for amount in send_amounts:
            if corridor['min_amount'] <= amount <= corridor['max_amount']:
                fee = corridor['fee'] if amount >= corridor['fee_threshold_amount'] else 0
                net_send = amount - fee
                received_inr = net_send * corridor['exchange_rate']
                print(f"\n   • Send AED {amount}:")
                print(f"     Fee: AED {fee}")
                print(f"     Net to Convert: AED {net_send}")
                print(f"     You Receive: ₹ {received_inr:.2f}")
            else:
                status = "Below" if amount < corridor['min_amount'] else "Above"
                limit = corridor['min_amount'] if amount < corridor['min_amount'] else corridor['max_amount']
                print(f"\n   • Send AED {amount}: ❌ {status} limit (AED {limit})")
    
    # Use case 4: Find best rates for a specific amount
    print("\n4. Finding best exchange rates for sending AED 1000:")
    amount_to_send = 1000
    best_value_corridors = []
    
    for corridor in all_rates['corridors']:
        if corridor['min_amount'] <= amount_to_send <= corridor['max_amount']:
            fee = corridor['fee'] if amount_to_send >= corridor['fee_threshold_amount'] else 0
            net_send = amount_to_send - fee
            received = net_send * corridor['exchange_rate']
            best_value_corridors.append({
                'corridor': corridor,
                'total_received': received,
                'effective_rate': received / amount_to_send
            })
    
    # Sort by total received (descending)
    best_value_corridors.sort(key=lambda x: x['total_received'], reverse=True)
    
    print(f"\n   Top 5 best value destinations for AED {amount_to_send}:")
    for i, item in enumerate(best_value_corridors[:5], 1):
        corridor = item['corridor']
        fee = amount_to_send - (item['total_received'] / corridor['exchange_rate'])
        print(f"\n   {i}. {corridor['destination_country']} ({corridor['destination_currency']})")
        print(f"      You Receive: {item['total_received']:.2f} {corridor['destination_currency']}")
        print(f"      Fee: AED {fee:.2f}")
        print(f"      Delivery: {corridor['estimated_time']}")
    
    print("\n" + "=" * 80)


if __name__ == "__main__":
    main()
All endpoints · 1 totalmissing one? ·

Returns current AED exchange rates for all supported remittance corridors. Each corridor includes the destination country, currency, exchange rate (rounded to 4 decimal places), transfer fee, minimum/maximum send amounts, and estimated delivery time. Optionally filter by destination currency.

Input
ParamTypeDescription
destination_currencystringFilter results by destination currency code (ISO 4217). Case-insensitive. Accepted values confirmed: INR, GBP, PKR, PHP, BDT, SAR, EGP, TRY, USD, JOD, CAD, EUR. When omitted, all corridors are returned.
Response
{
  "type": "object",
  "fields": {
    "corridors": "array of corridor objects with destination_country, destination_currency, exchange_rate (4 decimal precision), fee, fee_threshold_amount, min_amount, max_amount, estimated_time",
    "source_currency": "string, always 'AED'",
    "total_corridors": "integer, count of corridors returned"
  },
  "sample": {
    "data": {
      "corridors": [
        {
          "fee": 5,
          "max_amount": 150000,
          "min_amount": 10,
          "exchange_rate": 26.01,
          "estimated_time": "Money should arrive within 1 hour",
          "destination_country": "IN",
          "destination_currency": "INR",
          "fee_threshold_amount": 400
        }
      ],
      "source_currency": "AED",
      "total_corridors": 1
    },
    "status": "success"
  }
}

About the Careem API

What the API Returns

The get_exchange_rates endpoint returns an array of corridor objects, each representing one supported AED-to-foreign-currency remittance route. Fields per corridor include destination_country, destination_currency, exchange_rate, fee, fee_threshold_amount, min_amount, max_amount, and estimated delivery time. The response also surfaces source_currency (always AED) and total_corridors, giving you a count of how many routes are active at the time of the request.

Filtering by Currency

Pass the optional destination_currency parameter as a standard ISO 4217 code — for example INR, PKR, PHP, BDT, GBP, SAR, EGP, TRY, USD, or JOD — to receive data for that corridor only. Omitting the parameter returns the full list of all supported corridors in a single call.

Data Freshness and Coverage

Rates reflect Careem's current published transfer rates for AED-originating sends. The fee and fee_threshold_amount fields let you model the actual cost of a transfer at different send amounts, while min_amount and max_amount define the valid send range for each corridor. Delivery time is included per corridor, so you can surface expected settlement windows to end users without a separate lookup.

Reliability & maintenance

The Careem API is a managed, monitored endpoint for careem.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when careem.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official careem.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Display live AED-to-PKR and AED-to-INR rates in a remittance comparison tool
  • Alert users when the exchange rate for a specific corridor crosses a target threshold
  • Calculate the true cost of a transfer by combining the fee and fee_threshold_amount fields
  • Validate send amounts against per-corridor min_amount and max_amount before submission
  • Show estimated delivery times alongside rates in a money transfer aggregator
  • Track how Careem's rates shift over time by polling the endpoint and storing corridor snapshots
  • Filter to a single currency with destination_currency to power a focused corridor widget
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Careem have an official public developer API for its money transfer rates?+
Careem does not publish a documented public developer API for its remittance exchange rates or corridor data. This Parse API provides structured access to that data.
What does the `destination_currency` parameter do, and which currencies are supported?+
Passing destination_currency filters the response to the single corridor matching that ISO 4217 code. Documented supported values include INR, GBP, PKR, PHP, BDT, SAR, EGP, TRY, USD, and JOD. Omitting the parameter returns all active corridors in one call, with total_corridors indicating the count.
Does the API return historical exchange rate data?+
No. The get_exchange_rates endpoint returns only current rates at the time of the request. Historical rate data is not part of the response. You can fork this API on Parse and revise it to add a storage or time-series layer that logs each response for trend analysis.
Does the API cover non-AED source currencies, such as sending from USD or EUR?+
Not currently. The API covers AED as the sole source currency, reflecting Careem's UAE-based send flow. You can fork this API on Parse and revise it to add endpoints for other source currencies if Careem exposes additional corridors in the future.
Is the delivery time field a single value or a range, and how reliable is it?+
The delivery time is returned per corridor object alongside the rate and fee fields. It reflects what Careem publishes for that corridor at the time of the call. Actual settlement can vary based on bank processing and compliance checks not captured in the API response.
Page content last updated . Spec covers 1 endpoint from careem.com.
Related APIs in FinanceSee all →
fred.stlouisfed.org API
Access data from fred.stlouisfed.org.
data.ecb.europa.eu API
Access official European Central Bank statistical series and observations to retrieve economic data like exchange rates, interest rates, and monetary aggregates. Browse available dataflows and retrieve specific time series data to analyze ECB's published economic indicators.
rba.gov.au API
Access Reserve Bank of Australia data including CPI inflation (current and historical), housing and business lending rates, AUD exchange rates, monetary policy/cash rate changes, and the RBA balance sheet.
cmegroup.com API
Get CME Group market data including FedWatch interest-rate probabilities, futures quotes and settlements, volume/open interest history, and options expirations and near-the-money option chains.
banks.data.fdic.gov API
Search FDIC-insured banks by location or institution, and access detailed information about their financial performance, merger history, deposit demographics, and regulatory changes. Get comprehensive data on bank failures, acquisitions, and historical financial trends to research institutions and analyze the banking landscape.
alphavantage.co API
Track stock prices, forex rates, and cryptocurrency values with real-time and historical market data, while accessing company financials, earnings reports, and technical indicators. Search tickers, monitor economic indicators, analyze news sentiment, and get global quotes all in one place.
polygon.io API
Access real-time and historical market data for stocks, cryptocurrencies, forex, and commodities—including price aggregates, ticker details, and financial statements—all from a single platform. Get the latest market news, check trading status across exchanges, and retrieve comprehensive ticker information to power your investment analysis and trading decisions.
finance.yahoo.com API
Access data from finance.yahoo.com.