Payroll FX vendor checklist

Currency API for Global Payroll and Contractor Payments in 2026: Vendor Checklist for Rate Evidence, Cutoffs, and Cost Controls

Global payroll does not fail only when a payment rail fails. It also fails when a worker, contractor, finance manager, or support team cannot explain which exchange rate was used, why that date was chosen, and whether the number changed after approval.

Global PayrollContractor PaymentsRate EvidenceFinance Ops

Why payroll teams need better FX evidence

A pay run has more stakeholders than a normal product conversion. Payroll owns the calendar, finance owns the funding view, operations owns exceptions, and engineering owns the data path. A contractor may submit an invoice in USD, expect payment in PHP, and ask why the converted amount differs from the preview shown last week. If the system only stores the final amount, the answer becomes a manual investigation.

The practical goal is simple: every converted payout should carry its own evidence. Store the source amount, payout currency, policy date, exchange rate, rate timestamp, request time, and reviewer. Then a payroll question becomes a record lookup instead of a debate over which rate a spreadsheet used.

Currency-Exchange.app's verified public surface supports the building blocks for that pattern: conversion, exchange-rate lookup, historical date parameters, currency metadata, API key management, rate limits, daily usage counts, and downloadable usage exports. No native payroll connector is verified, so the clean wording is API-based payroll automation.

The buyer checklist

When you evaluate FX data for payroll or contractor payments, do not stop at the headline update cadence. Ask how the provider behaves during close, during a support escalation, and during a batch retry.

AreaBuyer questionWhy it matters
Rate evidenceCan every committed payout store exchangeRate, rateTime, policy date, and request time?Payroll and contractor support teams need to explain the number without replaying the pay run later.
Historical replayCan the API return a rate for the payroll cutoff date, invoice approval date, or pay date?Global teams often approve work before cash leaves the account. The policy date must be explicit.
Currency metadataCan the workflow validate ISO codes, symbols, country usage, and decimal behavior before payment?A bad currency code or rounding rule can become a rejected payout, underpayment, or manual correction.
Operational controlCan finance export API usage and assign keys by worker, payroll system, or contractor portal?Unowned automation creates surprise spend and makes close-period review harder.
Freshness policyCan engineering choose cached reads for previews and fresh reads for committed payments?Every workflow does not need the same freshness window. The rule should match money risk.

A practical payroll FX workflow

1

Separate payroll policy dates from request time

Store the cutoff date, approval date, pay date, and request timestamp separately. The currency API can accept a date parameter, but the payroll owner must decide which date controls the amount.

2

Validate worker and currency metadata

Use currency list or detail responses to confirm ISO codes, active status, symbols, decimal digits, and country metadata before rows enter payroll approval.

3

Calculate payout amounts with evidence

Call conversion or rate lookup for each approved row, store exchangeRate and rateTime, and keep the original amount beside the converted amount.

4

Route exceptions before funding

Send unsupported currencies, missing rate timestamps, unusual variance, and retry-heavy batches to finance or operations before the pay file is released.

5

Reconcile usage after the run

Compare payroll batch row counts with API usage statistics or downloadable usage exports so finance can explain traffic and cost.

This is not a tax or labor-law workflow. Payroll policy, employment classification, withholding, and statutory reporting belong in your payroll platform and local advisory process. The FX system's job is narrower: make the rate choice explicit, reproducible, and reviewable.

Where rates enter the pay run

StageFX needControl
Compensation planningScenario rates for salary bands, contractor budgets, and country-level planning.Use named scenarios and avoid presenting planning rates as final payout commitments.
Contractor invoice approvalInvoice-date or approval-date historical conversion for independent contractor bills.Store the contractor invoice ID, policy date, source currency, target currency, and reviewer.
Payroll fundingFresh rate or approved historical rate for cash forecast and payment-run review.Freeze the approved file before funds move. Re-rate only through a visible approval path.
Support and correctionsHistorical replay for underpayment, overpayment, chargeback, or refund review.Keep the original rate evidence so support does not invent a rate from today's market.

API examples for payroll and contractor payments

The public API supports conversion with an optional historical date. In payroll, the date should come from policy, not from convenience. The example below prices a contractor invoice on a chosen cutoff date and asks for performance diagnostics.

curl "https://api.currency-exchange.app/v1-convert-currency?from=USD&to=PHP&amount=3250&date=2026-05-29&getPerformanceData=true" \
  -H "x-api-key: YOUR_API_KEY"

Validate codes before you build a pay file. Currency metadata helps catch unsupported or inactive codes before the batch is funded.

curl "https://api.currency-exchange.app/v1-list-currencies?code[]=USD&code[]=PHP&code[]=EUR&active=true&pageSize=50" \
  -H "x-api-key: YOUR_API_KEY"

After the run, export API usage for the same period. That gives finance a way to reconcile batch size, retries, monitoring calls, and API cost.

curl "https://api.currency-exchange.app/v1-download-api-usage?from=2026-05-01&to=2026-05-31&service=currency" \
  -H "x-api-key: YOUR_API_KEY"

TypeScript evidence object

The implementation should return evidence, not just a converted number. Store this object with the pay run row or write it into an approved FX evidence table.

type PayRunRow = {
  payeeId: string;
  invoiceId?: string;
  sourceAmount: number;
  sourceCurrency: string;
  payoutCurrency: string;
  policyDate: string;
};

type PayRunEvidence = {
  payeeId: string;
  sourceAmount: number;
  convertedAmount: number;
  sourceCurrency: string;
  payoutCurrency: string;
  policyDate: string;
  exchangeRate: number;
  rateTime: string;
  requestedAt: string;
  provider?: string;
  cached?: boolean;
  rateLimitRemaining: string | null;
};

export async function pricePayrollRow(row: PayRunRow): Promise<PayRunEvidence> {
  const requestedAt = new Date().toISOString();
  const url = new URL('https://api.currency-exchange.app/v1-convert-currency');
  url.searchParams.set('from', row.sourceCurrency);
  url.searchParams.set('to', row.payoutCurrency);
  url.searchParams.set('amount', String(row.sourceAmount));
  url.searchParams.set('date', row.policyDate);

  const response = await fetch(url, {
    headers: { 'x-api-key': process.env.FX_API_KEY ?? '' },
  });

  if (!response.ok) {
    throw new Error('FX conversion failed for payee ' + row.payeeId + ': ' + response.status);
  }

  const data = (await response.json()) as {
    exchangeRate: number;
    convertedAmount: number;
    rateTime: string;
    provider?: string;
    cached?: boolean;
  };

  return {
    payeeId: row.payeeId,
    sourceAmount: row.sourceAmount,
    convertedAmount: data.convertedAmount,
    sourceCurrency: row.sourceCurrency,
    payoutCurrency: row.payoutCurrency,
    policyDate: row.policyDate,
    exchangeRate: data.exchangeRate,
    rateTime: data.rateTime,
    requestedAt,
    provider: data.provider,
    cached: data.cached,
    rateLimitRemaining: response.headers.get('X-RateLimit-Remaining'),
  };
}

Automation patterns that are safe to claim

Payroll automation can live in many tools, but the claims should stay precise. If a connector is not verified, call the workflow API-based, HTTP-based, spreadsheet-based, or no-code-orchestrated.

Payroll system or employer-of-record platform

Call the API from middleware or a backend worker that prepares approved payout files.

This is an API-based workflow. Do not describe it as a native payroll integration unless one is verified.

Contractor portal

Show the source amount, converted amount, rate timestamp, and payout currency before approval.

Do not let the portal silently recalculate after the contractor accepts a payout quote.

Spreadsheet or no-code review

Use Google Sheets, Excel, n8n, Make, or Power Automate as the review or orchestration layer.

The control comes from stored evidence and approvals, not from the spreadsheet tool itself.

Finance data warehouse

Upsert rate evidence into a table that can be joined to payroll, contractor, and cash forecast records.

Use one approved table instead of letting each report recalculate FX in a different way.

Decision matrix for finance and engineering

Cutoff policy

Choose the date rule before the API call. Store it with the payout.

Evidence table

Keep rateTime, exchangeRate, convertedAmount, provider, and cached when returned.

Key ownership

Use named keys for payroll workers, contractor portals, and close-period jobs.

Cost control

Review usage exports after every pay run and before monthly close.

Claims to keep out of the RFP

Payroll buyers should be especially strict about wording. Do not describe a workflow as native payroll, bank, EOR, ERP, spreadsheet, or MCP integration unless that connector is separately verified. Do not call a rate interbank, mid-market, provider-sourced, blended, or competitive unless the source says exactly that. Do not promise tax compliance, labor-law compliance, or guaranteed payment savings from an FX data feed. Those claims belong to payroll, payment, tax, and legal systems that sit around the rate lookup.

The safer commercial promise is operational: the API can provide conversion, historical lookup, currency metadata, API key context, rate-limit headers, and usage evidence that your own payroll workflow can store. That is still valuable. It gives finance a clean audit trail, engineering a predictable integration surface, and support a record they can show when a contractor asks why a payout changed.

FAQ

Is Currency-Exchange.app a native payroll or contractor payment platform?

No native payroll, employer-of-record, bank, spreadsheet, ERP, no-code, or MCP connector is verified in the public product surface. This article describes an API-based workflow where your payroll system, middleware, spreadsheet script, or orchestration layer calls documented endpoints.

Which exchange-rate date should payroll use?

That is a payroll and finance policy decision. Common choices include contract date, invoice approval date, payroll cutoff date, pay date, or funding date. The API supports a date parameter for historical lookup, but the business must store which policy date was used.

Can this workflow process many contractors or employees?

Yes as a batch workflow, but the current public OpenAPI surface verifies single conversion and rate endpoints rather than a native bulk endpoint. Use your own queue, worker, spreadsheet script, or no-code automation and respect rate-limit headers.

What evidence should payroll keep for each converted payout?

Keep payee ID, source amount, source currency, payout currency, policy date, request timestamp, exchangeRate, converted amount, rateTime, provider when returned, cached when returned, reviewer, and the run ID tied to usage exports.

Where to go next

Start with a small payroll or contractor pilot. Pick one currency pair, one policy date, and one exception rule. Then verify that payroll, finance, and support can all answer the same question: what rate did we use, when was it collected, and who approved it?