In this guide, we will see how to update currency rates in IFS Cloud automatically from the Global Exchange Rates API, using the currency-update workflow that IFS Cloud already ships with.
The rates come from official sources such as central banks and tax authorities, and are suitable for accounting, VAT and reporting. No customization or code deployment is required: you enable a delivered workflow, change its service URL and response parsing in one script task, and schedule it.
Many tax authorities and auditors expect official documents to use the officially published exchange rate rather than a market estimate, so the workflow below writes those official rates directly to your currency rate types, every business day.
IFS Cloud is configurable per installation and IFS occasionally revises delivered workflow internals between releases. Validate these steps in a non-production environment first, and re-check your modified workflow after an IFS Cloud upgrade.
Prerequisites
- IFS Cloud 24R1 or later. The delivered currency-update workflows are available through 25R2.
- Access to Solution Manager → Workflow Manager, with workflow administration permission.
- A valid API key from Global Exchange Rates. You can generate one in the Developer API portal after subscribing or starting a free trial.
- The provider code for your official source (e.g. ECB). The available codes are listed on the coverage page.
How IFS Cloud updates currency rates
IFS Cloud (24R1 and later) ships three delivered Business Process Automation workflows for currency rate updates. The one you modify is finCurrencyTypeUpdate, whose script task calls an external rates service and writes the results to a currency rate type. Two companion workflows, finUpdateCurrencyRatesForCurrencyTask and finCentralCurrencyHandling, cover multi-company and centralized scenarios. Once the workflows are Action Enabled, an Update Currency Rates command appears on the Currency Rate Types and Currency Rates pages, and runs on demand or on a schedule.
IFS delivers the workflow pointed at a generic market-rate service. Switching it to Global Exchange Rates requires two changes to the script task: the request URL and the response parsing.
1Enable the delivered workflows
In Solution Manager → Workflow Manager → Workflow, set finCurrencyTypeUpdate to Action Enabled. Enable its two companion workflows as well if you need multi-company or centralized updates.
2Change the request URL
Download the finCurrencyTypeUpdate BPMN diagram, open the script task that performs the web-service call, and set the request URL to:
GET https://api.globalexchangerates.org/v1/latest
?subscription-key=YOUR_API_KEY
&provider=ECB
Set provider to the official source you want, one subscription covers every source so different companies or rate types can use different central banks. Keep whatever variable the delivered script already uses for the reference currency.
3Change the response parsing
The script task does more than call the URL. After the call, it reads the rates out of the response and writes them into your currency rate type, one currency at a time. Global Exchange Rates returns the rates in a slightly different shape from the service IFS ships with, so this reading step needs one small edit.
The response looks like this. exchangeRates is simply a list of currency codes with their rate, so to get a rate you look it up by its ISO code, for example exchangeRates["USD"] returns 1.08:
{
"exchangeRates": {
"USD": 1.08,
"GBP": 0.85,
"SEK": 11.32
}
}
In the delivered script, find the line that reads the rate for each currency. The service IFS ships with nests the number one level deeper (inside a per-currency object), while Global Exchange Rates returns the number directly. So the line changes from reading a nested field to reading the value itself:
// delivered service: the rate is nested inside a per-currency object
rate = response.data[currencyCode].value
// Global Exchange Rates: the value IS the rate
rate = response.exchangeRates[currencyCode]
That single line is the only change. It sits inside the loop the delivered script already runs over the currencies enabled on your rate type, so leave the loop and the step that writes the rate into IFS exactly as delivered:
for each currencyCode enabled on the rate type:
rate = response.exchangeRates[currencyCode] // the only line you change
write rate for currencyCode // keep IFS's delivered logic
The exact names (response, currencyCode) depend on your delivered workflow. Match the names already used in the script, and change only how the rate is read.
4Redeploy as a new version of the same workflow
Upload the edited BPMN as a new version of finCurrencyTypeUpdate. Do not save it as a copy under a custom name: a renamed workflow runs from the Update Currency Rates button but is not triggered by the scheduled task, which resolves the workflow by its standard name. An update that works manually but never runs on schedule is almost always caused by this.
5Check the currency rate type
On Currency Rate Types, confirm that the reference currency of the rate type matches the base currency your chosen provider publishes in. Each source publishes against its own currency (the European Central Bank against EUR, for example), so pick the provider whose base matches the rate type you are updating. Also confirm that every currency you need is enabled, since the workflow only writes rates for currencies enabled on the rate type.
6Test and schedule
Run Update Currency Rates → start now and confirm fresh rates and timestamps on the Currency Rates page. Then create the scheduled background job. A daily schedule set shortly after your source publishes is sufficient, since official sources release rates once per business day.
Verifying the integration
In IFS, the last updated timestamp on the currency rate type advances after each run.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Works manually, fails when scheduled | Workflow deployed under a custom name. It must be a version of finCurrencyTypeUpdate. |
| No rates, and no request in the API log | Workflow is not Action Enabled, or was not triggered. |
| Request logged, but no rates in IFS | Script still parsing the old response shape, or the currencies are not enabled on the rate type. |
| HTTP 401 | API key missing from the subscription-key parameter, or the subscription is inactive. |
FAQ
Which IFS Cloud versions does this work with?
The delivered currency-update workflows are available from 24R1. Validate the steps in a non-production environment before rolling them out.
Can different companies use different central banks?
Yes. The provider parameter is set per workflow call, and the IFS multi-company workflows assign a source per company or rate type. One subscription covers every source and every legal entity.
Does this require an IFS customization or a marketplace app?
No. It uses the standard IFS Cloud workflow mechanism. You change the URL and response parsing of a delivered workflow, which is configuration, not customization.
Which other ERP systems are supported?
Global Exchange Rates provides native connectors for Microsoft Dynamics 365 Finance and Operations, Business Central and SAP (S/4HANA and ECC), and integrates with any other system through the REST API.
What does it cost?
See the current plans and pricing. A free trial is available, so you can validate the full setup before subscribing.
Get started
Start a free trial to get an API key, then follow the steps above to have official rates flowing into IFS Cloud the same day.
Related guides: Official exchange rates in Boomi, in NetSuite, in Power BI, in Snowflake.