← All use cases
Markets & FinanceJSONPath

Currency and FX Rate Monitoring

Track exchange-rate moves between any pair and get notified when crossing a threshold worth acting on - for travel, remittance, or treasury.

Verid Use Cases·3 min read

The scenario

You hold cash in one currency and have a known liability in another - a Tokyo trip in three months, a foreign-currency tuition bill, payroll for a remote contractor. The exchange rate moves day-to-day, and you'd like to convert when it favors you by, say, 2% versus today's mark.

The same pattern fits small treasuries - startups paying USD vendors from a GBP account, freelancers invoicing in EUR but spending in USD.

The problem

Most retail FX conversion happens at terrible spreads anyway, so the marginal benefit of timing right has to overcome that spread to be worth it. Manually checking rates every morning is tolerable for one pair; intolerable for three. Bank-side alerting on FX rates is uncommon - banks aren't incentivized to help you wait.

How Verid solves it

Plenty of public, free, reliable FX APIs exist (exchangerate.host, frankfurter.app, openexchangerates.org's free tier). Verid polls the one you pick on a sensible interval, pulls out the rate as a number via JSONPath, and fires when the threshold trips.

Because JSON APIs return numeric values, percent predicates work cleanly here - no currency-symbol parsing trap.

Build the monitor

Extraction config

Using a simple public API like https://api.frankfurter.app/latest?from=USD&to=JPY:

{
  "method": "json_path",
  "fields": {
    "jpy_per_usd": "$.rates.JPY",
    "date": "$.date"
  }
}

Predicate

You want to buy yen when USD/JPY rises (more JPY per USD = better for the USD holder). That's an increase predicate against the rate field:

{ "type": "field_increases_by_percent", "field": "jpy_per_usd", "threshold": 2 }

For both directions:

{
  "type": "composite",
  "operator": "OR",
  "conditions": [
    { "type": "field_increases_by_percent", "field": "jpy_per_usd", "threshold": 2 },
    { "type": "field_decreases_by_percent", "field": "jpy_per_usd", "threshold": 2 }
  ]
}

Create the monitor

curl -X POST https://api.verid.dev/v1/monitors \
  -H "Authorization: Bearer vrd_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "USD/JPY - 2% move",
    "url": "https://api.frankfurter.app/latest?from=USD&to=JPY",
    "schedule_interval_seconds": 3600,
    "extract_config": {
      "method": "json_path",
      "fields": { "jpy_per_usd": "$.rates.JPY", "date": "$.date" }
    },
    "diff_predicate": { "type": "field_increases_by_percent", "field": "jpy_per_usd", "threshold": 2 },
    "deliveries": [
      { "type": "webhook", "url": "https://my-app.example.com/webhooks/fx" }
    ]
  }'

SDK:

import { VeridClient } from '@verid.dev/sdk';

const client = new VeridClient({ apiKey: 'vrd_your_api_key' });

await client.monitors.create({
  name: 'USD/JPY - 2% move',
  url: 'https://api.frankfurter.app/latest?from=USD&to=JPY',
  schedule_interval_seconds: 3600,
  extract_config: {
    method: 'json_path',
    fields: { jpy_per_usd: '$.rates.JPY', date: '$.date' },
  },
  diff_predicate: {
    type: 'field_increases_by_percent',
    field: 'jpy_per_usd',
    threshold: 2,
  },
  deliveries: [{ type: 'webhook', url: 'https://my-app.example.com/webhooks/fx' }],
});

What the webhook delivers

{
  "id": "del_01H...",
  "fired_at": "2026-05-08T08:00:00Z",
  "diff": {
    "fields_changed": ["jpy_per_usd", "date"],
    "before": { "jpy_per_usd": 152.4, "date": "2026-05-07" },
    "after":  { "jpy_per_usd": 155.6, "date": "2026-05-08" }
  }
}

Caveats & tips

  • Reference rates are not your dealing rates. The public APIs give a mid-market or reference rate; your actual conversion will include a spread. Set thresholds with that in mind - a 0.5% move is below the spread on most retail conversions and isn't actionable.
  • Threshold relative to the original baseline. Verid's percent predicate compares the current value to the previous run's value, not to a fixed long-ago anchor. If the rate drifts 1.5% every day for three days, you may never trip a 2% threshold individually. To detect cumulative drift, store the baseline yourself in your webhook handler and compare there.
  • Once-an-hour is plenty. FX moves on minute-timescale matter to traders, not to people doing one conversion next month.

Related use cases

For crypto, see crypto price alerts. For interest rates, see mortgage & loan rate tracking. For any other JSON endpoint, see JSON API field monitoring.

Ship this monitor today

5 monitors free, no credit card. Set up takes about a minute.

Get started free