PayPal
PayPal's public, signed-out surfaces: the published consumer and merchant fee schedules, the fee on one concrete personal (friends-and-family)…
PayPal's public, signed-out surfaces: the published consumer and merchant fee schedules, the fee on one concrete personal (friends-and-family) transaction, the spread PayPal adds on a currency conversion, Pay Later instalment plans, PayPal.Me handle lookup, Help Center search and articles, the binding policy documents, PayPal Shopping cashback offers, crypto prices, and invoice payer-view reads. Three functions callable today — estimateFee, getFees, getCurrencyConversionQuote.
Domain: paypal.com
Also known as: PayPal, PayPal US, paypal.com, PayPal.Me, PayPal Holdings
Call it directly
bowmark.providers.paypal.estimateFee(args: PaypalEstimateFeeArgs): Promise<PaypalFeeEstimate>
bowmark.providers.paypal.getFees(args: PaypalGetFeesArgs): Promise<PaypalFeeSchedule>
bowmark.providers.paypal.getCurrencyConversionQuote(args: PaypalGetCurrencyConversionQuoteArgs): Promise<PaypalCurrencyConversionQuote>Functions
| Function | What it does |
|---|---|
estimateFee | Computes what PayPal charges to send a PERSONAL (friends-and-family) payment — domestic or cross-border, by funding source — off PayPal's own published fee schedule, e.g. estimateFee({… |
getFees | Reads PayPal's published fee schedule for one audience / country pair and returns every fee table on the page — every row, every published feeDataKey, with documentId-level citations — so a… |
getCurrencyConversionQuote | Reads PayPal's published currency-conversion spread — the half of its fee it DOES disclose — off the same fees page (FEETB26, 4.00% for goodsOrServices/personal/payouts, 3.00% for "other"),… |
Types
interface PaypalEstimateFeeArgs {
amount: number; // > 0, in `currency`
currency: string; // ISO 4217, e.g. "USD"
crossBorder: boolean; // sender and recipient in different countries
fundingSource: "balance" | "bank" | "card" | "amexSend";
}
interface PaypalFeeCitation {
documentId: string; // the CMS fee-table id this figure came from, e.g. "FEETB20"
feeDataKey: string; // the exact published value used, e.g. "2.90%"
internalName: string;
}
interface PaypalFeeEstimate {
amount: number;
currency: string;
crossBorder: boolean;
fundingSource: "balance" | "bank" | "card" | "amexSend";
fee: number;
net: number; // amount - fee
citations: PaypalFeeCitation[];
}
interface PaypalGetFeesArgs {
audience?: "consumer"; // defaults to "consumer"; merchant is a separate, unverified page
country?: string; // ISO 3166-1 alpha-2, defaults to "us"; only "us" is verified end-to-end
}
interface PaypalFeeToken {
feeDataKey: string; // the exact published value, e.g. "2.90%" or "0.30 USD"
internalName: string;
percent: number | null; // 0.029 when "2.90%", else null
amount: { amount: number; currency: string } | null; // when "0.30 USD", else null
}
interface PaypalFeeRow {
labels: string[]; // plain-text label cells, in cell order
tokens: PaypalFeeToken[]; // every published fee token on the row, across all columns
cells: string[]; // plain-text rendering of each cell, in cell order
noFee: boolean; // true iff the row carries no fee token (PayPal's "No fee" rows)
citations: PaypalFeeCitation[];
}
interface PaypalFeeTable {
documentId: string; // the CMS fee-table id, e.g. "FEETB20"
caption: string; // PayPal's own caption, e.g. "Sending domestic personal transactions"
rows: PaypalFeeRow[];
}
interface PaypalFeeSchedule {
audience: "consumer";
country: string; // lowercased to match PayPal's URL path, e.g. "us"
sourceUrl: string;
tables: PaypalFeeTable[];
}
type PaypalConversionKind = "goodsOrServices" | "personal" | "payouts" | "other";
interface PaypalCurrencyConversionCitation {
documentId: string; // the CMS table id this figure came from, e.g. "FEETB26"
feeDataKey: string; // the exact published value used, e.g. "4.00%"
internalName: string;
}
interface PaypalGetCurrencyConversionQuoteArgs {
kind?: PaypalConversionKind; // "goodsOrServices" | "personal" | "payouts" | "other"
audience?: "consumer"; // defaults to "consumer"; merchant is a separate, unverified page
country?: string; // ISO 3166-1 alpha-2, defaults to "us"; only "us" is verified end-to-end
}
interface PaypalCurrencyConversionQuote {
kind: PaypalConversionKind; // which PayPal-conversion context the spread applies to
paypalSpread: number; // 0.04 for goodsOrServices/personal/payouts; 0.03 for "other"
citations: { paypal: PaypalCurrencyConversionCitation };
}