---
description: 'Learn about the Currency entity and its relation to other entities. Currencies are used to define the price of products, services, and other monetary details in a commerce system.'
---

# Currency Architecture

In this document, you’ll learn about the Currency entity and its relation to other entities.

## Introduction

Currencies are used to define the price of products, services, and other monetary details in a commerce system.

Medusa supports multi-currency within your commerce store. You can specify prices per currency, and even per region. This means that you can serve customers globally without limitations related to pricing.

---

## Currency Entity Overview

The `Currency` entity has the following attributes:

- `code`: A string indicating the [3 character ISO code](https://en.wikipedia.org/wiki/ISO_4217#Active_codes) for the currency. This attribute also acts as a unique and primary column of the entity.
- `symbol`: A string indicating the display symbol of the currency. This would typically be the symbol you would show to the customer or admin users when displaying a price.
- `symbol_native`: A string indicating the native symbol of the currency.
- `name`: A string indicating the name of the currency.

---

## How Currencies are Created

Currencies are defined in the core of your Medusa backend under `utils/currencies.js` (or `packages/medusa/src/utils/currencies.ts` if you’re using the Medusa mono-repository). They’re defined in an object in that file.

When you run the `migration` or `seed` command the first time on your Medusa server, a migration uses this object to insert all its properties (the currencies) into the database.

So, if you want to add more currencies, you can create a migration that inserts your currencies into the database.

:::tip

You can learn more about Migrations in [this guide](../../development/entities/migrations/overview.mdx).

:::

---

## Relation to Other Entities

### Store

A store has a default currency and can have many currencies. These currencies are then used in other relations, such as when associating a region with a currency.

There are two relations available on the `Store` entity related to the `Currency` entity:

- You can expand the `default_currency` relation on a store and access the default currency with `store.default_currency`. You can also use the `default_currency_code` attribute on the store to access the code of the default currency.
- You can expand the `currencies` relation on a store and access the currencies with `store.currencies`.

### Region

Each region is associated with a currency. A currency can be used in more than one region, but a region can have only one currency.

The relation is available on a region by expanding the `region.currency` relation and accessing `region.currency`. You can also access the currency code through the attribute `currency_code` on the region.

### MoneyAmount

The `MoneyAmount` entity is used to store the price of different entities within your commerce store.

The relation is available on the `MoneyAmount` entity by expanding the `currency` relation and accessing `money_amount.currency`. You can also access the currency code through the attribute `currency_code` on the money amount.

### Order

The `Order` entity includes a relation to the currency, as it is the currency that the order was placed in.

The relation is available on the `Order` entity by expanding the `currency` relation and accessing `order.currency`. You can also access the currency code through the attribute `currency_code` on the order.

### Payment

The `Payment` entity is used to represent a payment of any kind, such as for orders. Each payment is associated with a currency.

The relation is available on the `Payment` entity by expanding the `currency` relation and accessing `payment.currency_code`. You can also access the currency code through the attribute `currency_code` on the payment.

### PaymentCollection

The `PaymentCollection` entity is used to represent a collection of payments. Each payment collection is associated with a currency.

The relation is available on the `PaymentCollection` entity by expanding the `currency` relation and accessing `payment_collection.currency_code`. You can also access the currency code through the attribute `currency_code` on the payment collection.

---

## See Also

- [Price Selection Strategy](../price-lists/price-selection-strategy.md)
- [Tax-Inclusive Pricing](../taxes/inclusive-pricing.md)
