How Long Do Points and Miles Transfers Take?

Last updated: November 10, 2026

How long do point transfers take? AwardWallet measures these times rather than estimating them. We run transfers ourselves and record when the points land. We also learn from members who set up a balance watch on the destination program after initiating a transfer, telling us which program the points are coming from and when they started. We then check the destination account at least hourly, and members often refresh manually far more often, so we can identify the arrival moment closely. Averaging across many transfers of the same pair is what produces the figures below.

This page covers 600+ transfer pairs across Amex Membership Rewards, Chase Ultimate Rewards, Capital One, Bilt, Marriott Bonvoy and other programs, including country-specific variants where ratios and speeds differ. Most transfers to airline partners are immediate, but some take considerably longer, and a handful of pairs stretch to several days. Because a transfer is irreversible once submitted, knowing the speed in advance matters when you are holding an award booking. Note that these are transfer times, not purchase times. Pairs marked "Unknown" do not have enough data yet.

From
To
Transfer Ratio
Min. Transfer
Average Time

Frequently Asked Questions

q: How long do Amex points take to transfer?

a: Most Amex Membership Rewards transfers to airline partners post immediately, though some partners take a day or more.

q: Are point transfers reversible?

a: No. Transfers from a bank program to an airline or hotel program are generally irreversible once submitted.

Developer access: Mile Transfer Times API

Build with AwardWallet's measured transfer speeds. Use our public endpoints to fetch how long point transfers really take across bank, airline, and hotel programs, including card-specific rates and ratios.

Usage & attribution (rules of engagement)

You're free to use this data in your products as long as you clearly attribute AwardWallet, link to this page, and keep our links live:

Data details

  • Unit: hours (durations may include a decimal part; 0 = immediate, null = not enough data yet)
  • Shape: single transfers[] array, one object per source/target pair
  • Card-specific rates are split into variants[]; credit_cards: null means the rate applies to all cards
  • Each variant includes ratio, min_transfer, duration, bonus, message_html, buy_url

Caching

  • Responses include ETag and meta.data_hash for cache validation.
  • We recommend respecting Cache-Control and using conditional requests.

Examples

API (OpenAPI 3.1)

bash
curl -s https://loyalty.awardwallet.com/v1/mile-transfer-times/list \
        -H 'Accept: application/json'

JavaScript (fetch)

javascript
const res = await fetch('https://loyalty.awardwallet.com/v1/mile-transfer-times/list', {
    headers: { 'Accept': 'application/json' }
});
const data = await res.json();

/* Example filter: pairs with at least one immediate transfer */
const instant = data.transfers.filter(t =>
    t.variants.some(v => v.duration.max_hours === 0)
);

Conditional fetch with ETag

bash
curl 'https://loyalty.awardwallet.com/v1/mile-transfer-times/list' -v -H 'If-None-Match: "your-saved-etag-from-last-fetch"' -q

The server will return '304 Not Modified' with an empty body if there is no new data, and '200 OK' with the new data if there is new data.

Versioning

  • Current version: v1 (/v1/…).
  • If the schema changes, we’ll introduce /v2 and keep /v1 available for a deprecation window.