openapi: 3.0.1
info:
version: '1.0'
title: Business Accounting Tax rates API
description: "As a Revolut Business customer with a Business Account, you can use the Business API to automate your own business processes.\nSave time, reduce your costs, and avoid errors by using the Business API. \n\n:::tip[Before you get started]\nTo learn more about the Business API and its features, check the [**user guides**](https://developer.revolut.com/docs/guides/manage-accounts/introduction).\n\nYou can reach them at any time from the main navigation bar **→ Guides → Business**.\n:::\n\nYou can view accounts, manage counterparties, make payments or currency exchanges without manual effort in the Web UI:\n\n- Accounting: [Account management](https://developer.revolut.com/docs/api/business#get-account), [Accounting settings](https://developer.revolut.com/docs/api/business#tag-accounting), [Expense management](https://developer.revolut.com/docs/api/business#get-expense), [Transactions](https://developer.revolut.com/docs/api/business#get-transactions) \n- Payments: \n - [Counterparty management](https://developer.revolut.com/docs/api/business#get-counterparties)\n - Payment management: [Payment drafts](https://developer.revolut.com/docs/api/business#delete-payment-draft), [Payout links](https://developer.revolut.com/docs/api/business#get-payout-link), [Transfers](https://developer.revolut.com/docs/api/business#tag-transfers)\n - [Foreign exchange](https://developer.revolut.com/docs/api/business#tag-foreign-exchange)\n- Business team: [Card management](https://developer.revolut.com/docs/api/business#delete-card), [Card invitation management](https://developer.revolut.com/docs/api/business#update-card-invitation), [Team member management](https://developer.revolut.com/docs/api/business#delete-team-member)\n- Developer tools: [Sandbox simulations](https://developer.revolut.com/docs/api/business#tag-simulations), [Webhook management](https://developer.revolut.com/docs/api/business#tag-webhooks-v2)\n\nTo see the reference for the specific endpoints and operations of this API, browse the menu on the left.\n\n### Test the Business API\n\nYou can test the Business API in Postman by forking this collection:\n\n[](https://www.postman.com/revolut-api/workspace/revolut-developers/overview)"
contact: {}
servers:
- url: https://b2b.revolut.com/api/1.0
description: Production server (uses live data)
- url: https://sandbox-b2b.revolut.com/api/1.0
description: Sandbox server (uses test data)
tags:
- name: Tax rates
description: 'Manage tax rates for your business.
Create, retrieve, update, and delete tax rates that can be assigned to your financial records such as [expenses](https://developer.revolut.com/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses) or bills.
For more information, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates).
See also the Revolut Help Centre: [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/) and [BillPay](https://help.revolut.com/business/help/integrating-with-external-apps/introduction-to-billpay/).'
paths:
/tax-rates:
post:
summary: Create a new tax rate
operationId: createTaxRate
description: 'Add a new tax rate to the list of tax rates that can be applied to your financial records, such as expenses.
:::note
This operation is not supported for [externally managed tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).
:::
For more details, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates).'
security:
- AccessToken:
- WRITE
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTaxRateRequest'
example:
name: 20% (VAT on Expenses)
percentage: 20
responses:
'201':
description: 'Resource created
On successful creation, the response returns only the ID of the new resource (i.e. the tax rate), even if the resource has more properties.
To get all the details of the tax rate, use the returned resource ID with a [GET request](https://developer.revolut.com/docs/api/business#get-tax-rate).'
$ref: '#/components/responses/ResourceCreatedResponse'
'400':
description: 'Bad Request
Returned, for example, when a required parameter is missing or malformatted.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
param_required:
summary: Required parameter is missing
value:
error_id: fa12f45e-0ebf-4f7c-88e0-ebb7a1441a18
code: 2101
message: '''percentage'' is required'
bad_param_type:
summary: Incorrect parameter type
value:
error_id: 29146977-8042-446f-b362-675e2921d71c
code: 2101
message: '''percentage'' must be a number'
param_value_too_low:
summary: Parameter value too low
value:
error_id: b5a51cd1-9d0f-4074-adae-af224b14c830
code: 2101
message: '''percentage'' must be at least 0'
param_value_too_high:
summary: Parameter value too high
value:
error_id: 89ceb92e-4633-4f78-8d40-42dadc380511
code: 2101
message: '''percentage'' must be at most 100'
invalid_json:
summary: Invalid JSON
value:
error_id: df7b76b2-1313-42f0-8c0b-3673c665f135
code: 2101
message: Request body is not valid JSON
param_value_too_short:
summary: Parameter value too short
value:
error_id: 7acc6073-5290-45f8-8956-c79d487ef1e5
code: 2101
message: '''name'' must be at least 1 character'
param_value_too_long:
summary: Parameter value too long
value:
error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
code: 2101
message: '''name'' must be at most 20 characters'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
description: 'Conflict
Request conflicts with the current state of the resource.
Returned, for example, when a tax rate with the provided name already exists.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
code: 3505
message: Tax rate with name My Unique Rate already exists
'422':
description: "Unprocessable entity - tax rate cannot be created due to business rules \n\nReturned, for example, when you have an accounting software integration connected to your Revolut Business account, and tax rates are managed by that integration.\n\nThe request is well-formed and the server understands it, but the operation cannot be performed because the resource state doesn't permit it.\nRetrying the same request won't succeed."
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
cannot_modify_externally_managed_resource:
summary: Tax rates are managed by integration, cannot be created manually
value:
error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
code: 3514
message: Tax rates are managed by your connected accounting integration and cannot be modified manually
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
tags:
- Tax rates
get:
summary: Retrieve a list of tax rates
operationId: getTaxRates
description: "Get available tax rates based on the provided query criteria.\n\n:::note\nThe API returns a maximum of 500 tax rates per request. \nThe default page size is 100.\n:::\n\nThe tax rates are sorted by the `created_at` date in reverse chronological order, and they're **paginated**.\nThe page size, that is, the maximum number of tax rates returned per page is specified by the `limit` parameter. \n- If the number of results exceeds the page size, the response also returns a cursor for the next page under `next_page_token`. \n To get the next page of results, make a new request using that `next_page_token` value in `page_token`.\n- If the number of results is smaller than the page size, `next_page_token` is not returned.\n\nFor more details, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates)."
security:
- AccessToken:
- READ
parameters:
- name: limit
in: query
required: false
description: 'The page size, that is, the maximum number of tax rates to return per page.
To get the next page of results, use `page_token`.'
schema:
type: integer
minimum: 1
maximum: 500
default: 100
example: 10
- $ref: '#/components/parameters/PageToken'
responses:
'200':
description: List of tax rates
content:
application/json:
schema:
type: object
properties:
next_page_token:
$ref: '#/components/schemas/PageToken'
tax_rates:
type: array
items:
$ref: '#/components/schemas/TaxRateResponse'
required:
- tax_rates
examples:
results_with_next_page:
summary: Results exceed page size (when limit=5) & next page available
value:
next_page_token: MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
tax_rates:
- id: f0e1d2c3-b4a5-4678-9012-3456789abcde
name: Import Duty Surcharge
created_at: '2026-03-19T07:15:00.000000Z'
updated_at: '2026-03-19T08:45:22.111444Z'
percentage: 12.75
- id: f09ad1ad3-a1c0-4c09-b8f8-24b439e72690
name: 20% (VAT on Expenses)
created_at: '2026-03-11T10:33:51.121090Z'
updated_at: '2026-03-11T10:33:51.121090Z'
percentage: 20
- id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
name: Reduced Rate Food & Beverage
created_at: '2026-02-01T08:00:00.000000Z'
updated_at: '2026-02-01T08:00:00.000000Z'
percentage: 5.5
- id: 5f4e3d2c-1b0a-4987-8765-43210fedcba9
name: Standard Output Tax (High)
created_at: '2026-01-15T10:20:30.123456Z'
updated_at: '2026-03-10T14:45:12.987654Z'
percentage: 20
- id: 98765432-abcd-ef01-2345-67890abcdef0
name: Exempt Financial Services
created_at: '2025-12-20T11:11:11.000Z'
updated_at: '2026-03-15T09:30:00.555222Z'
percentage: 0
results_single_page:
summary: Results fit within page size, no more pages available
value:
tax_rates:
- id: 7e6d5c4b-3a2b-1c0d-9e8f-7a6b5c4d3e2f
name: Luxury Goods Tax
created_at: '2026-03-23T14:30:00.000000Z'
updated_at: '2026-03-23T14:30:00.000000Z'
percentage: 25
- id: 8a7b6c5d-4e3f-2g1h-0i9j-8k7l6m5n4o3p
name: Environmental Levy
created_at: '2026-03-22T09:15:22.000000Z'
updated_at: '2026-03-22T10:00:00.000000Z'
percentage: 3.5
- id: 1f2e3d4c-5b6a-7988-7766-554433221100
name: Digital Services Tax
created_at: '2026-03-21T11:45:00.000000Z'
updated_at: '2026-03-21T11:45:00.000000Z'
percentage: 7
'400':
description: 'Bad Request
Returned, for example, when a required parameter is missing or malformatted.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
bad_param_type:
summary: Incorrect query parameter type
value:
error_id: 29146977-8042-446f-b362-af224b14c830
code: 2101
message: Query parameter 'limit' must be an integer
param_value_too_low:
summary: Query parameter value too low
value:
error_id: b5a51cd1-9d0f-4074-adae-675e2921d71c
code: 2101
message: Query parameter 'limit' must be at least 1
param_value_too_high:
summary: Query parameter value too high
value:
error_id: fa12f45e-4633-4f78-8d40-42dadc380511
code: 2101
message: Query parameter 'limit' must be at most 500
multiple_values_not_allowed:
summary: Multiple values provided for a single-value query parameter
value:
error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
code: 2101
message: Query parameter 'limit' must have a single value
param_cannot_be_empty:
summary: Query parameter provided without a value
value:
error_id: fa12f45e-0ebf-4f7c-88e0-3673c665f135
code: 2101
message: Query parameter 'limit' must not be empty
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
tags:
- Tax rates
/tax-rates/{tax_rate_id}:
get:
summary: Retrieve tax rate details
operationId: getTaxRate
description: 'Get the details of a specific tax rate based on the tax rate ID.
The details include the tax rate name and percentage, as well as when the tax rate was added to your settings, and when it was last updated.
For more details, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates).'
security:
- AccessToken:
- READ
parameters:
- name: tax_rate_id
in: path
description: The ID of the tax rate to retrieve.
required: true
schema:
type: string
format: uuid
example: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
responses:
'200':
description: Tax rate details
content:
application/json:
schema:
$ref: '#/components/schemas/TaxRateResponse'
example:
id: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
name: 20% (VAT on Expenses)
created_at: '2026-03-11T10:33:51.121090Z'
updated_at: '2026-03-11T10:33:51.121090Z'
percentage: 20
'400':
description: 'Bad Request
Returned, for example, when a required parameter is missing or malformatted.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
bad_param_format:
summary: Incorrect path parameter format
value:
error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
code: 2101
message: Path parameter 'id' must be a valid UUID
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: 'Not found
Returned when the tax rate that you''re trying to retrieve cannot be found.
This can happen, for example, when the tax rate has been deleted, or the provided tax rate ID is incorrect.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: cbb15721-5f51-4588-a959-7494bb7ba827
code: 3006
message: Tax rate with id 8945879d-6854-4e10-88d6-ce92c5f010ac not found
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
tags:
- Tax rates
patch:
summary: Update tax rate settings
operationId: updateTaxRate
description: 'Update settings for a specific tax rate, based on its ID.
:::note
This operation is not supported for [externally managed tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).
:::
For more details, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates).'
security:
- AccessToken:
- WRITE
parameters:
- name: tax_rate_id
in: path
description: The ID of the tax rate to update.
required: true
schema:
type: string
format: uuid
example: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTaxRateRequest'
example:
name: 20% VAT
responses:
'204':
description: Tax rate updated
'400':
description: 'Bad Request
Returned, for example, when a required parameter is missing or malformatted.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
param_required:
summary: Body is empty
value:
error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
code: 2101
message: Request body must not be empty
bad_param_format:
summary: Incorrect parameter format
value:
error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
code: 2101
message: Path parameter 'id' must be a valid UUID
invalid_json:
summary: Invalid JSON
value:
error_id: 36f3cec5-b4b9-431f-9c28-afd3899bc64f
code: 2101
message: Request body is not valid JSON
param_value_too_short:
summary: Parameter value too short
value:
error_id: 32fd0697-2f3f-4308-b25d-c9230f99c589
code: 2101
message: '''name'' must be at least 1 character'
param_value_too_long:
summary: Parameter value too long
value:
error_id: d8d919b5-d667-4058-9bb3-17b6f7bcd6c8
code: 2101
message: '''name'' must be at most 20 characters'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: 'Not found
Returned when the tax rate that you''re trying to update cannot be found.
This can happen, for example, when the tax rate doesn''t exist, or the provided tax rate ID is incorrect.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
code: 3006
message: Tax rate with id be6c9d90-df25-458a-b559-be61896c94b8 not found
'409':
description: 'Conflict
Request conflicts with the current state of the resource.
Returned, for example, when a tax rate with the provided name already exists.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
code: 3505
message: Tax rate with name My Unique Rate already exists
'422':
description: "Unprocessable entity - tax rate cannot be updated due to business rules \n\nReturned, for example, when you have an accounting software integration connected to your Revolut Business account, and tax rates are managed by that integration.\n\nThe request is well-formed and the server understands it, but the operation cannot be performed because the resource state doesn't permit it.\nRetrying the same request won't succeed."
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
cannot_update_externally_managed_resource:
summary: Tax rate managed by integration, cannot be updated
value:
error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
code: 3514
message: Tax rates are managed by your connected accounting integration and cannot be modified manually
state_mismatch:
summary: Tax rate is no longer available
value:
error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
code: 3100
message: Invalid request
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
tags:
- Tax rates
delete:
summary: Delete a tax rate
operationId: deleteTaxRate
description: "Delete a specific tax rate, based on its ID.\n\n:::note\nThis operation is not supported for [externally managed tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).\n:::\n\nOnce the tax rate is deleted, it will not be returned by the API or in the Revolut Business app, and:\n- You will not be able to apply it to new financial records (e.g. expenses). \n- Existing records with this tax rate that have not been completed will be marked as invalid, and you'll need to update them to use a different tax rate.\n- Completed records will not be affected by the change. \n\nA successful response does not get any content in return.\n\nFor more details, see the guides: [Manage accounting settings](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](https://developer.revolut.com/docs/guides/manage-accounts/accounting/manage-tax-rates)."
security:
- AccessToken:
- WRITE
parameters:
- name: tax_rate_id
description: The ID of the tax rate to delete.
in: path
required: true
schema:
type: string
format: uuid
example: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
responses:
'204':
description: Tax rate deleted
'400':
description: 'Bad Request
Returned, for example, when a required parameter is missing or malformatted.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
bad_param_format:
summary: Incorrect path parameter format
value:
error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
code: 2101
message: Path parameter 'id' must be a valid UUID
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: 'Not found
Returned when the tax rate that you''re trying to delete cannot be found.
This can happen, for example, when the tax rate doesn''t exist, or the provided tax rate ID is incorrect.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
code: 3006
message: Tax rate with id be6c9d90-df25-458a-b559-be61896c94b8 not found
'422':
description: "Unprocessable entity - tax rate cannot be deleted due to business rules \n\nReturned, for example, when you have an accounting software integration connected to your Revolut Business account, and tax rates are managed by that integration.\n\nThe request is well-formed and the server understands it, but the operation cannot be performed because the resource state doesn't permit it.\nRetrying the same request won't succeed."
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
cannot_delete_externally_managed_resource:
summary: Tax rate managed by integration, cannot be deleted
value:
error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
code: 3514
message: Tax rates are managed by your connected accounting integration and cannot be modified manually
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
tags:
- Tax rates
components:
responses:
ServiceUnavailable:
description: 'Service Unavailable
The system is temporarily unavailable.
If the response includes the `Retry-After` header instruction, please respect it and refrain from earlier retry attempts.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
service_unavailable:
summary: System temporarily unavailable
value:
error_id: 201768bc-c5cd-4db8-8898-7ae96b9d89ab
code: 5003
message: The service is temporarily unavailable. Try again in a few moments. If the issue persists, please contact support
InternalServerError:
description: 'Internal server error
An unexpected application error occurred.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
example:
error_id: 7f96652e-7518-4229-872b-4e4c867fb4da
code: 5000
message: An unexpected error occurred while processing your request. If the issue persists, please contact support
Unauthorized:
description: 'Unauthorized – authentication credentials are missing or invalid
Returned when the request was not fulfilled because authentication has failed or has not been provided.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
access_token_invalid_or_expired:
summary: Access token invalid or expired
value:
error_id: 9d66499d-3fc5-45e9-92f6-3ddcad4793c6
code: 1000
message: Access token is invalid or has expired. Please refresh your access token or generate a new one following the 'Get a new access token' guide in the Revolut API docs.
invalid_token:
summary: Invalid token
value:
error_id: 7835beae-98ed-42dc-b993-95f4ded951a1
code: 1000
message: Invalid token. The authorization header must follow the 'Bearer <token>' format.
TooManyRequests:
description: 'Too many requests
Returned, for example, when the rate limit has been exceeded.
If the response includes the `Retry-After` instruction, please respect it and refrain from earlier retry attempts.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorWithId'
examples:
rateLimitExceededNoRetryAfter:
summary: Rate limit exceeded (no Retry-After)
value:
error_id: 06153eec-c5cd-4db8-8898-7ae96b9d89ab
code: 3162
message: Request rate limit has been reached. Try again later.
rateLimitExceededWithRetryAfter:
summary: Rate limit exceeded (with Retry-After)
value:
error_id: 06153eec-c5cd-4db8-8898-7ae96b9d89ab
# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/revolut/refs/heads/main/openapi/revolut-tax-rates-api-openapi.yml