Monerium API (2.0.0)
Download OpenAPI specification:Download
API for developers to integrate Monerium payments, wallets, and user onboarding functionalities into their applications.
New to the Monerium API? See the Getting Started guide for setup instructions, environment details, and integration walkthroughs.
Endpoints marked Whitelabel or Private are only available to those application types.
Endpoints for authorization and token management. See the OAuth, Whitelabel, and Private guides for integration walkthroughs.
Authorization
Initiates user authorization. Redirects users through the Authorization Code Flow (HTTP 307), or completes authorization immediately for existing customers using Sign in with Ethereum (SIWE). The resulting authorization code is exchanged for an access token via POST /auth/token.
Request Body schema: application/x-www-form-urlencodedrequired
| client_id required | string <UUID> (AuthClientID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The Authorization Code Flow client ID of your application. |
| code_challenge required | string PKCE challenge derived from the |
| code_challenge_method | string Value: "S256" Method used to generate the challenge. Monerium only supports |
| redirect_uri | string The URL to redirect to after authorization. Required if more than one redirect URL is registered; must match a registered URL exactly. |
| state | string Opaque value returned with the redirect. Recommended for CSRF protection. |
boolean You can prefill the email field for login and sign up steps to ensure the user uses the correct email. | |
| skip_kyc | boolean You can skip the KYC onboarding steps in the Authorization Flow during testing. |
| auth_mode | string Enum: "login" "signup" Controls which auth screen to show first when the user is not authenticated. Defaults to the start screen. |
Responses
| Location | string Redirect URI with either:
|
| Location | string Example: "https://sandbox.monerium.dev/partners/a15806ac-e6d6-11ed-891c-2ea11c960b3f/auth?client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f&code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0&redirect_uri=http%3A%2F%2Flocalhost%3A3000&response_type=code" Uri to authorization flow. Customer has to go through the Monerium onboarding screen and will eventually give the application permission to read their data. |
Request samples
- Authorization code flow
- SIWE
curl -i 'https://api.monerium.dev/auth' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0' \ --data-urlencode 'client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f' \ --data-urlencode 'redirect_uri=http://localhost:3000' \ --data-urlencode 'code_challenge_method=S256'
Authorization
Same as POST /auth using a GET request with the same properties as query parameters.
Request samples
- CLI
curl https://api.monerium.dev/auth?code_challenge=9Y__uhKapn7GO_ElcaQpd8C3hdOyqTzAU4VXyR2iEV0&client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f&redirect_uri=http://localhost:3000&code_challenge_method=S256
Context
Returns details about the currently authenticated user, including their roles and accessible profiles.
Authorizations:
Responses
Response Schema: application/json
| userId | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the User. |
string <email> An email address associated with the account. | |
| name | string The user name or alias. You can treat this as metadata. |
| roles | Array of strings Default: [] Items Value: "admin" List of Role |
object Information about how the user was authenticated. | |
| defaultProfile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the default profile. The default profile allows the API consumer to use the simpler API endpoints omitting the profile ID from the structure. |
Array of objects (ProfileSummary) List containing information about every profiles accessible to the User. |
Request samples
- curl
curl https://api.monerium.dev/auth/context \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response samples
- 200
- 401
{- "userId": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "email": "user@example.com",
- "name": "user@example.com",
- "roles": [ ],
- "auth": {
- "method": "password",
- "subject": "user@example.com",
- "verified": true
}, - "defaultProfile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "profiles": [
- {
- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "kind": "corporate",
- "name": "user@example.com",
- "state": "incomplete"
}
]
}Access token
Obtain an OAuth 2.0 access token. Supports three grant types:
authorization_code: Exchange the code received after the OAuth authorization flow for an access token.refresh_token: Use a refresh token to obtain a new access token without user interaction. See Refresh the access token.client_credentials: Authenticate directly with your client ID and secret. Used by Whitelabel and Private applications.
Request Body schema: application/x-www-form-urlencoded
| client_id required | string <UUID> (AuthClientID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The Authorization Code Flow client ID of your application. |
| grant_type required | string Value: "authorization_code" |
| code required | string The authorization code that was acquired from authorization flow. |
| code_verifier required | string The random string used to generate the |
| redirect_uri required | string The same |
Responses
Response Schema: application/json
| access_token | string Bearer token used to authenticate API requests. |
| expires_in | integer The duration in seconds for which the access token is valid. |
| refresh_token | string A token used to obtain a new access token after the current one expires. |
| token_type | string The type of token returned. In this case, it is always 'Bearer'. |
Request samples
- Auth code
- Refresh token
- Client credentials
curl --location --request POST 'https://api.monerium.dev/auth/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'client_id=a08bfa22-e6d6-11ed-891c-2ea11c960b3f' \ --data-urlencode 'code=BvTYQprmQzKt8YSn3xsTWQ' \ --data-urlencode 'code_verifier=KO2yF8CUSxU8KJepixDmXdiCOFTMMZFLDmVjNd4J2VhbFUSSgU1lXl0aYyWYK8hIZIEH9bEBDeJ78CIuNoeOIcZOybzzqFlIGedtclJ7ZTKF6GmRBZ4fdMvg6OXnf2dl' \ --data-urlencode 'redirect_uri=http://localhost:3000'
Response samples
- 200
- 400
{- "access_token": "EoWmpc2uSZar6h2bKgh",
- "expires_in": 3600,
- "refresh_token": "cowYzCowQxGPUl4p15iwKA",
- "token_type": "Bearer"
}A profile represents a customer undergoing KYC/KYB onboarding (personal or corporate) and is the owner of associated IBANs and addresses. See the Onboarding guide for the full flow.
Create profile
Create a new profile. The kind determines whether the personal or corporate
body structure is used in the subsequent form, verifications, and share endpoints.
The kind cannot be changed after creation.
Authorizations:
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/jsonrequired
| id | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Optional partner-supplied profile ID. |
| kind required | string (ProfileKind) Enum: "corporate" "personal" Determines whether the profile is personal or corporate, and which body structure to use in subsequent PATCH endpoints. |
Responses
Response Schema: application/json
| id | string Unique identifier of the profile. The Profile ID is the main identifier used to represent ownership of other API resources |
| kind | string Value: "personal" |
| name | string The Profile name. This can be a corporate or an individual. |
| state | string (ProfileState) Enum: "created" "incomplete" "pending" "approved" "rejected" The state of the profile lifecycle:
|
object (ProfileSection) KYC details section with its current state. | |
object (ProfileSection) Additional data section used for risk calculations. | |
Array of objects (PersonalVerifications) Verifications for an individual |
Request samples
- Payload
- CLI
{- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "kind": "personal"
}Response samples
- 201
- 400
- 401
- 403
{- "id": "4f079ef8-6d26-11eb-9bc8-acde48001122",
- "kind": "personal",
- "name": "Jane Doe",
- "state": "incomplete",
- "details": {
- "state": "incomplete"
}, - "form": {
- "state": "incomplete"
}, - "verifications": [
- {
- "kind": "idDocument",
- "state": "incomplete"
}, - {
- "kind": "proofOfResidency",
- "state": "incomplete"
}
]
}Profiles
Retrieves a list of all profiles that your application has access to.
Authorizations:
query Parameters
| state | string (ProfileState) Enum: "created" "incomplete" "pending" "approved" "rejected" Example: state=incomplete Filter the list on the state of profiles |
| kind | string (ProfileKind) Enum: "corporate" "personal" Example: kind=personal Filter the list on the kind of profiles |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
Array of objects (Profiles) | |||||||||
Array
| |||||||||
Request samples
- CLI
curl https://api.monerium.dev/profiles?state=approved&kind=personal \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "profiles": [
- {
- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "kind": "corporate",
- "name": "user@example.com",
- "state": "incomplete"
}
]
}Profile
Retrieves details about a single profile, including the state of each section (details, form, verifications).
Authorizations:
path Parameters
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: a78d8ff2-e51f-11ed-9e13-cacb9390199c The ID of the profile |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
| id | string Unique identifier of the profile. The Profile ID is the main identifier used to represent ownership of other API resources |
| kind | string Value: "personal" |
| name | string The Profile name. This can be a corporate or an individual. |
| state | string (ProfileState) Enum: "created" "incomplete" "pending" "approved" "rejected" The state of the profile lifecycle:
|
object (ProfileSection) KYC details section with its current state. | |
object (ProfileSection) Additional data section used for risk calculations. | |
Array of objects (PersonalVerifications) Verifications for an individual |
Request samples
- CLI
curl https://api.monerium.dev/profiles/4f079ef8-6d26-11eb-9bc8-acde48001122 \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "kind": "personal",
- "state": "incomplete",
- "details": {
- "state": "incomplete"
}, - "form": {
- "state": "incomplete"
}, - "verifications": [
- {
- "kind": "idDocument",
- "state": "incomplete"
}, - {
- "kind": "proofOfResidency",
- "state": "incomplete"
}
]
}Update profile details
Submit the compliance details for a profile. Updates only the details section without affecting other sections.
KYC reliance model only. Most integrations should use POST /profiles/{profile}/share to populate details via Sumsub instead.
Authorizations:
path Parameters
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: a78d8ff2-e51f-11ed-9e13-cacb9390199c The ID of the profile |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
object Details for an individual | |||||||||||||||||||||
| |||||||||||||||||||||
Responses
Response Schema: application/json
Request samples
- Payload
- CLI
{- "personal": {
- "firstName": "Jane",
- "lastName": "Doe",
- "address": "Pennylane 123",
- "postalCode": "7890",
- "city": "Liverpool",
- "country": "FR",
- "countryState": "Merseyside",
- "nationality": "FR",
- "birthday": "1990-05-15",
- "idDocument": {
- "number": "A1234566788",
- "kind": "passport"
}
}
}Response samples
- 202
- 400
- 401
- 403
- 409
{ }Update profile form
Submit additional data for a profile used for risk calculations (e.g. purpose of account, source of funds). Updates only the form section without affecting other sections.
Authorizations:
path Parameters
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: a78d8ff2-e51f-11ed-9e13-cacb9390199c The ID of the profile |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
object (PersonalForm) Form for an individual | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
Responses
Response Schema: application/json
Request samples
- Payload
- CLI
{- "personal": {
- "occupation": "OCCUPATION_EMPLOYED",
- "profession": "PROF_ACCOUNTANCY",
- "fundOrigin": "FUND_ORIGIN_SALARY",
- "annualIncome": "ANNUAL_INCOME_UNDER_10K",
- "monthlyTurnover": "TURNOVER_UNDER_10K",
- "monthlyTransactionCount": "TRANSACTION_COUNT_LESS_THAN_5",
- "activities": [
- "ACTIVITY_COMMERCE_SELLING"
], - "activityOther": "farming airdrops",
- "publicFunction": true,
- "fundOwner": true,
- "usCitizen": true,
- "usTaxPerson": true,
- "tin": "123-45-6789",
- "taxResidenceCountry": "FR"
}
}Response samples
- 202
- 400
- 401
- 403
- 409
{ }Update profile verifications
Submit verifications for a profile. Only the verifications provided are updated. sourceOfFunds is submitted here by all partners when required; other verification kinds are populated automatically when using the Sumsub share flow.
Authorizations:
path Parameters
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: a78d8ff2-e51f-11ed-9e13-cacb9390199c The ID of the profile |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
Array of objects (UpdatePersonalVerifications) Verifications for an individual | |||||
Array
| |||||
Responses
Response Schema: application/json
Request samples
- Payload
- CLI
{- "personal": [
- {
- "kind": "idDocument",
- "documents": [
- {
- "kind": "passport",
- "fileId": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "side": "front"
}
]
}
]
}Response samples
- 202
- 400
- 401
- 403
- 409
{ }Link a blockchain address to a profile with a cryptographic proof of ownership. See the Link a wallet guide for signing walkthroughs including EOA and smart contract wallets.
Link address
Links a blockchain address to Monerium by verifying ownership via a signature. Supports EOA signatures as well as Smart Contract Account (SCA/Safe) signatures via ERC-1271, both onchain and offchain.
Authorizations:
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Profile ID that owns the address. |
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
| message required | string Fixed message to be signed with the private key corresponding to the given address. |
required | EOA address (string) or Safe onchain (string) or Safe offchain (string) |
Responses
Response Schema: application/json
Response Schema: application/json
| code | integer |
| status | string |
Request samples
- Payload
- CLI
{- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "message": "I hereby declare that I am the address owner.",
- "signature": "0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f"
}Response samples
- 201
- 202
- 400
- 401
- 403
{ }Addresses
List of addresses that have been connected. You can filter the addresses by the chain they are connected to.
Authorizations:
query Parameters
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: profile=a78d8ff2-e51f-11ed-9e13-cacb9390199c Return addresses for a given profile ID. By default the caller profile ID is used. |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) Example: chain=ethereum Filter the list on the chain |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
Array of objects (AddressObject) | |||||||
Array
| |||||||
Request samples
- CLI
curl https://api.monerium.dev/addresses?profile=a78d8ff2-e51f-11ed-9e13-cacb9390199c&chain=ethereum \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "addresses": [
- {
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chains": [
- "ethereum"
]
}
]
}Address
Get details for a single address by using the address public key after the address has been successfully linked to Monerium.
Authorizations:
path Parameters
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ Example: 0x59cFC408d310697f9D3598e1BE75B0157a072407 The public key of the blockchain account. |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The profile id that owns the address |
| address | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
Array of Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) list of chains that this address has been connected to |
Request samples
- CLI
curl https://api.monerium.dev/addresses/0x59cFC408d310697f9D3598e1BE75B0157a072407 \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chains": [
- "ethereum"
]
}Balances
Retrieves the balance for an address on a given chain.
Authorizations:
path Parameters
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ Example: 0x59cFC408d310697f9D3598e1BE75B0157a072407 Address |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) Example: ethereum Chain name |
query Parameters
| currency | string (Currency) Enum: "eur" "usd" "gbp" "isk" Currency to return the balance for. If not provided |
Responses
Response Schema: application/json
| address | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) | |
Array of objects The amount owned of currency |
Request samples
- curl
curl https://api.monerium.dev/balances/ethereum/0x59cFC408d310697f9D3598e1BE75B0157a072407 \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "balances": [
- {
- "currency": "eur",
- "amount": "123.45"
}
]
}Provision and manage IBANs linked to blockchain addresses. Incoming SEPA payments are automatically minted as EURe to the linked address. See the EUR IBAN guide.
Request IBAN
Create an IBAN for a specified address and chain. All incoming EUR payments will automatically be routed to the linked address on that chain. Any linked address can use this IBAN for outgoing payments.
Authorizations:
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
Responses
Response Schema: application/json
Request samples
- Payload
- CLI
{- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum"
}Response samples
- 202
- 304
- 400
- 401
- 403
{ }IBANs
List of IBANs that have been created. You can filter by the address, or the chain they are connected to.
Authorizations:
query Parameters
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: profile=a78d8ff2-e51f-11ed-9e13-cacb9390199c Return the list for the profile ID. By default the caller profile is used. |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) Example: chain=ethereum Filter the list on the chain |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
Array of objects (IBANObject) | |||||||||||||
Array
| |||||||||||||
Request samples
- CLI
curl https://api.monerium.dev/ibans?profile=a78d8ff2-e51f-11ed-9e13-cacb9390199 \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "ibans": [
- {
- "iban": "EE127310138155512606682602",
- "name": "Jane Doe",
- "bic": "EAPFESM2XXX",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum"
}
]
}IBAN
Get details for a single IBAN.
Authorizations:
path Parameters
| iban required | string (IBAN) ^(?:[A-Z]{2}[0-9]{2}(?:\s?[0-9A-Z]{4}){1,7}\s... Example: EE127310138155512606682602 The IBAN is a unique identifier for a bank account across different countries and includes a two-letter country code, two check digits, and a number of alphanumeric characters. It may include spaces for readability but should be stored without spaces. |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
| iban | string (IBAN) ^(?:[A-Z]{2}[0-9]{2}(?:\s?[0-9A-Z]{4}){1,7}\s... The IBAN is a unique identifier for a bank account across different countries and includes a two-letter country code, two check digits, and a number of alphanumeric characters. It may include spaces for readability but should be stored without spaces. |
| name | string The name of the IBAN owner. This can be a corporate or an individual. |
| bic | string Bank Identifier Code (BIC) of the bank associated with this IBAN. |
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The profile id that owns the IBAN |
| address | string (Address) ^0x[0-9a-fA-F]{40}$ The address that this IBAN is connected to |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
Request samples
- CLI
curl https://api.monerium.dev/ibans/EE73I9684012278810458214196 \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "iban": "EE127310138155512606682602",
- "name": "Jane Doe",
- "bic": "EAPFESM2XXX",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum"
}Move IBAN
Move an existing IBAN to a specified address an chain. All incoming EUR payments will automatically be routed to the address on that chain.
Authorizations:
path Parameters
| iban required | string (IBAN) ^(?:[A-Z]{2}[0-9]{2}(?:\s?[0-9A-Z]{4}){1,7}\s... Example: EE127310138155512606682602 The IBAN is a unique identifier for a bank account across different countries and includes a two-letter country code, two check digits, and a number of alphanumeric characters. It may include spaces for readability but should be stored without spaces. |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
Responses
Response Schema: application/json
Request samples
- Payload
- CLI
{- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum"
}Response samples
- 200
- 400
- 401
- 403
{ }An order represents a fund movement: an issue (EURe minted on incoming payment) or a redeem (EURe burned for an outgoing SEPA payment or cross-chain transfer). See the Orders guide.
Place order
An order represents an instruction to transfer funds from one account to another. The transfer can occur within the blockchain ecosystem (cross-chain) or from a blockchain account to a traditional bank account via SEPA.
An order requires a signature from the wallet owner to authorize the processing of the order. The wallet owner signs a specific message to prove ownership and consent for the transaction.
Attaching a supporting document for amounts above 15,000 EUR is required. Supporting document can be an invoice or an agreement.
Authorizations:
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
| id | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The unique identifier of the order. |
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The address to redeem from. Can be any Monerium linked address. |
| currency required | |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
| kind required | string Value: "redeem" Identifier specifying the nature of the order. |
| amount required | string The quantity of money sent, represented as a series of digits, possibly followed by a decimal point and up to two additional digits. The amount must be a non-negative value. |
required | object (Counterpart) The counterpart represents the other party involved in a financial transaction, such as the recipient of a payment or the payer. The counterpart can be either an individual or a corporate. It includes identifying information such as account details, name, and country. |
required | IBAN (string) or Cross-chain transaction (string) A string message that the wallet owner must sign to authorize the processing of the order. This signed message verifies the consent of the wallet owner, ensuring that the transaction can proceed securely and legitimately. |
required | EOA address (string) or Safe onchain (string) or Safe offchain (string) |
| memo | string (Memo) [ 5 .. 140 ] characters UTF-8 Payment reference / memo. Can be used as filter parameters when querying orders. |
| referenceNumber | string (ReferenceNumber) [ 0 .. 35 ] characters UTF-8 Payment reference. Structured identifier for a transaction or order, typically used for automatic payment reconciliation |
| supportingDocumentId | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... File ID, required for orders with amount greater or equal to €15,000. |
Responses
Response Schema: application/json
| id required | string <UUID> ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The ID of the order. |
| kind required | string Enum: "issue" "redeem" Issue orders are created when payment is received and the token, e.g. EURe, is minted to the specified address and chain. Redeem orders are created for sending outgoing payments. The tokens, e.g. EURe, are burned from the specified address and chain and then sent to the Counterpart. |
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the profile involved in the order. |
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
| currency required | |
| amount required | string The order amount. |
required | object (CounterpartResponse) The counterpart represents the other party involved in a financial transaction, such as the recipient of a payment or the payer. The counterpart can be either an individual or a corporate. It includes identifying information such as account details, name, and country. |
| memo required | string (Memo) [ 5 .. 140 ] characters UTF-8 Payment reference / memo. Can be used as filter parameters when querying orders. |
| referenceNumber | string (ReferenceNumber) [ 0 .. 35 ] characters UTF-8 Payment reference. Structured identifier for a transaction or order, typically used for automatic payment reconciliation |
| state required | string Enum: "placed" "pending" "processed" "rejected" The state of the order:
|
required | object |
Response Schema: application/json
| code | integer |
| status | string |
Request samples
- Payload
- CLI
{- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "currency": "eur",
- "chain": "ethereum",
- "kind": "redeem",
- "amount": "1000",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "message": "Send EUR 1 to EE127310138155512606682602 at 2024-07-12T12:02:49Z",
- "signature": "0x5rc0b4cb4efbb577cb0c19d1cb23c7cc4912d2138b3267ee4799c88a68e203a5d568bec12f5da2b3a416f9bb03257b472a1605bf489bcdb805c2c029c212d3a5120505f52546da16217f630339cd332d6049f11cf15a1a82939663a58b02d129c40607c0c290ace726c89c35228b6485f5d3796d6c10df5b8a0de196092797bfe7e1f",
- "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "supportingDocumentId": "a78d8ff2-e51f-11ed-9e13-cacb9390199c"
}Response samples
- 200
- 202
- 401
- 403
{- "id": "8c0fd7b1-01da-11ed-89c1-52c47a86c354",
- "kind": "redeem",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "currency": "eur",
- "amount": "999",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "state": "rejected",
- "meta": {
- "placedAt": "2024-07-29T12:21:58.777884Z",
- "processedAt": "2024-07-29T12:21:58.777884Z",
- "rejectedReason": "Declined due to insufficient funds.",
- "supportingDocumentId": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "txHashes": [
- "0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd"
]
}
}Orders
Retrieves all orders for the caller profile. Query parameters can be used to filter and sort the result.
Authorizations:
query Parameters
| address | string (Address) ^0x[0-9a-fA-F]{40}$ Example: address=0x798728D5410aB4FB49d2C277A49baC5048aB43ca Get all orders belonging to a specific blockchain address. |
| txHash | string Example: txHash=0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd The blockchains transaction hash. |
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: profile=123e4567-e89b-12d3-a456-426614174000 The profile ID which the order belongs to. By default the caller profile ID is used. |
| memo | string (Memo) [ 5 .. 140 ] characters Example: memo=Powered by Monerium UTF-8 Payment reference / memo. Can be used as filter parameters when querying orders. |
| state | string Enum: "pending" "processed" "rejected" Get all orders in a particular state:
|
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
Array of objects (Order) | |||||||||||||||||||||||||
Array
| |||||||||||||||||||||||||
Request samples
- curl
curl https://api.monerium.dev/orders \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "orders": [
- {
- "id": "8c0fd7b1-01da-11ed-89c1-52c47a86c354",
- "kind": "redeem",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "currency": "eur",
- "amount": "999",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "state": "rejected",
- "meta": {
- "placedAt": "2024-07-29T12:21:58.777884Z",
- "processedAt": "2024-07-29T12:21:58.777884Z",
- "rejectedReason": "Declined due to insufficient funds.",
- "supportingDocumentId": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "txHashes": [
- "0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd"
]
}
}
]
}Order
Retrieve the details of an existing order. Supply the unique order ID from either an order creation or the order list, and Monerium will return the corresponding order information
Authorizations:
path Parameters
| orderId required | string The ID of the order |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
| id required | string <UUID> ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... The ID of the order. |
| kind required | string Enum: "issue" "redeem" Issue orders are created when payment is received and the token, e.g. EURe, is minted to the specified address and chain. Redeem orders are created for sending outgoing payments. The tokens, e.g. EURe, are burned from the specified address and chain and then sent to the Counterpart. |
| profile required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the profile involved in the order. |
| address required | string (Address) ^0x[0-9a-fA-F]{40}$ The public key of the blockchain account. |
required | Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) |
| currency required | |
| amount required | string The order amount. |
required | object (CounterpartResponse) The counterpart represents the other party involved in a financial transaction, such as the recipient of a payment or the payer. The counterpart can be either an individual or a corporate. It includes identifying information such as account details, name, and country. |
| memo required | string (Memo) [ 5 .. 140 ] characters UTF-8 Payment reference / memo. Can be used as filter parameters when querying orders. |
| referenceNumber | string (ReferenceNumber) [ 0 .. 35 ] characters UTF-8 Payment reference. Structured identifier for a transaction or order, typically used for automatic payment reconciliation |
| state required | string Enum: "placed" "pending" "processed" "rejected" The state of the order:
|
required | object |
Request samples
- curl
curl https://api.monerium.dev/orders/b48f7ca4-e51f-11ed-9e13-cacb9390199c \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 401
- 403
{- "id": "8c0fd7b1-01da-11ed-89c1-52c47a86c354",
- "kind": "redeem",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "currency": "eur",
- "amount": "999",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "state": "rejected",
- "meta": {
- "placedAt": "2024-07-29T12:21:58.777884Z",
- "processedAt": "2024-07-29T12:21:58.777884Z",
- "rejectedReason": "Declined due to insufficient funds.",
- "supportingDocumentId": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "txHashes": [
- "0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd"
]
}
}Fetch pending signature requests for linking addresses and approving orders. Used with smart contract wallets that sign on-chain. See the Link a wallet guide.
Get pending signatures
Returns pending signatures for the authenticated user, filterable by address, chain, and kind (order, linkAddress).
Authorizations:
query Parameters
| address | string (Address) ^0x[0-9a-fA-F]{40}$ Example: address=0x59cFC408d310697f9D3598e1BE75B0157a072407 Filter by blockchain address |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) Example: chain=ethereum Filter by blockchain network | |
| kind | string Enum: "linkAddress" "order" Filter by signature request kind |
| profile | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Example: profile=a78d8ff2-e51f-11ed-9e13-cacb9390199c UUID of the profile (defaults to authenticated user's default profile) |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
| X-Total-Count | integer Total number of signatures returned |
Response Schema: application/json
Array of objects (PendingSignature) | |
| total | integer Total number of pending signatures |
Request samples
- CLI
curl https://api.monerium.dev/signatures \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Accept: application/vnd.monerium.api-v2+json"
Response samples
- 200
- 400
- 401
- 403
- 404
- 500
{- "pending": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "kind": "order",
- "chain": "ethereum",
- "address": "0x1234567890123456789012345678901234567890",
- "amount": "100.50",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "GB33BUKB20201555555555"
}, - "details": {
- "name": "John Doe"
}
}, - "currency": "eur",
- "createdAt": "2024-01-15T10:30:00Z"
}
], - "total": 1
}Upload files to obtain a fileId for use in profile verifications and orders above €15,000. See the Onboarding guide for verification requirements.
File upload
Upload documents for KYC onboarding and order support.
Authorizations:
Request Body schema: multipart/form-datarequired
| file required | string (file) Path to the file. Maximum length filename: 100 |
Responses
Response Schema: application/json
| id | string File ID |
| name | string File name |
| type | string File type |
| size | integer File size |
| hash | string |
object |
Request samples
- CLI
curl --form file='@doc.pdf' https://api.monerium.dev/files
Response samples
- 200
- 401
- 403
{- "id": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "name": "doc.pdf",
- "type": "application/pdf",
- "size": 595101,
- "hash": "f2d8e62b44c59079536910eeb595f91833874a44aafc42c73c80588d91e7796b",
- "meta": {
- "uploadedBy": "6d510620-f6c9-11ec-81c1-62a51ab3b761",
- "createdAt": "2024-07-15T15:03:11.990387Z",
- "updatedAt": "2024-07-15T15:03:11.990387Z"
}
}Receive real-time event notifications for profile approvals, IBAN provisioning, and order state changes. See the Webhooks guide for registration and signature verification details.
Subscription created Webhook
This notification is used to validate if receiver is able to handle webhook notifications.
Your webhook endpoint must respond with a 200 OK status code to indicate successful receipt.
If the delivery fails, the subscription won't be created.
Request Body schema: application/jsonrequired
| type | string Value: "subscription.created" The type of the event. |
| timestamp | string <date-time> (TimeStamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z... The timestamp in RFC3339 format. It includes the date, time to the second, and optional fractional seconds, followed by 'Z' to indicate UTC time. |
Responses
Request samples
- Payload
- CURL
{- "type": "subscription.created",
- "timestamp": "2024-07-29T12:21:58.777884Z"
}Order created Webhook
This notification represents an order creation.
It's send as a POST request to the endpoint specified during subscription creation.
Request Body schema: application/jsonrequired
| type | string Value: "order.created" The type of the event. |
| timestamp | string <date-time> (TimeStamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z... The timestamp in RFC3339 format. It includes the date, time to the second, and optional fractional seconds, followed by 'Z' to indicate UTC time. |
object (Order) |
Responses
Request samples
- Payload
{- "type": "order.created",
- "timestamp": "2024-07-29T12:21:58.777884Z",
- "data": {
- "id": "8c0fd7b1-01da-11ed-89c1-52c47a86c354",
- "kind": "redeem",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "currency": "eur",
- "amount": "999",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "state": "rejected",
- "meta": {
- "placedAt": "2024-07-29T12:21:58.777884Z",
- "processedAt": "2024-07-29T12:21:58.777884Z",
- "rejectedReason": "Declined due to insufficient funds.",
- "supportingDocumentId": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "txHashes": [
- "0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd"
]
}
}
}Order updated Webhook
This notification represents an order update event. It's sent when an order is processed or rejected.
It's send as a POST request to the endpoint specified during subscription creation.
Request Body schema: application/jsonrequired
| type | string Value: "order.updated" The type of the event. |
| timestamp | string <date-time> (TimeStamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z... The timestamp in RFC3339 format. It includes the date, time to the second, and optional fractional seconds, followed by 'Z' to indicate UTC time. |
object (Order) |
Responses
Request samples
- Payload
{- "type": "order.updated",
- "timestamp": "2024-07-29T12:21:58.777884Z",
- "data": {
- "id": "8c0fd7b1-01da-11ed-89c1-52c47a86c354",
- "kind": "redeem",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum",
- "currency": "eur",
- "amount": "999",
- "counterpart": {
- "identifier": {
- "standard": "iban",
- "iban": "EE127310138155512606682602"
}, - "details": {
- "firstName": "Satoshi",
- "lastName": "Nakamoto",
- "country": "FR"
}
}, - "memo": "Powered by Monerium",
- "referenceNumber": "RF123456789",
- "state": "rejected",
- "meta": {
- "placedAt": "2024-07-29T12:21:58.777884Z",
- "processedAt": "2024-07-29T12:21:58.777884Z",
- "rejectedReason": "Declined due to insufficient funds.",
- "supportingDocumentId": "3ebc51a8-044f-11ed-8b1f-4a76448b7b21",
- "txHashes": [
- "0x692ff12125b71c167b3ea90bddb3b28edd60941851cb0cdd852cc3b6d79311cd"
]
}
}
}Profile updated Webhook
Sent when a profile's state changes. Your endpoint must respond with 200 OK; failed deliveries are retried with exponential backoff up to 10 times over 12 hours.
Request Body schema: application/jsonrequired
| type | string Value: "profile.updated" The type of the event. |
| timestamp | string <date-time> (TimeStamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z... The timestamp in RFC3339 format. It includes the date, time to the second, and optional fractional seconds, followed by 'Z' to indicate UTC time. |
Personal (object) or Corporate (object) (Profile) |
Responses
Request samples
- Payload
- CURL
{- "type": "profile.updated",
- "timestamp": "2024-07-29T12:21:58.777884Z",
- "data": {
- "id": "4f079ef8-6d26-11eb-9bc8-acde48001122",
- "kind": "personal",
- "name": "Jane Doe",
- "state": "incomplete",
- "details": {
- "state": "incomplete"
}, - "form": {
- "state": "incomplete"
}, - "verifications": [
- {
- "kind": "idDocument",
- "state": "incomplete"
}
]
}
}IBAN updated Webhook
Sent when an IBAN is updated. Your endpoint must respond with 200 OK; failed deliveries are retried with exponential backoff up to 10 times over 12 hours.
Request Body schema: application/jsonrequired
| type | string Value: "iban.updated" The type of the event. |
| timestamp | string <date-time> (TimeStamp) ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z... The timestamp in RFC3339 format. It includes the date, time to the second, and optional fractional seconds, followed by 'Z' to indicate UTC time. |
object (IBANObject) |
Responses
Request samples
- Payload
- CURL
{- "type": "iban.updated",
- "timestamp": "2024-07-29T12:21:58.777884Z",
- "data": {
- "iban": "EE127310138155512606682602",
- "name": "Jane Doe",
- "bic": "EAPFESM2XXX",
- "profile": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "address": "0x59cFC408d310697f9D3598e1BE75B0157a072407",
- "chain": "ethereum"
}
}List subscriptions
List all webhook subscriptions for the authenticated user. The response includes the details of each subscription, such as the URL, secret, and event types.
Authorizations:
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Responses
Response Schema: application/json
Array of objects (WebhookSubscription) | |||||||||
Array
| |||||||||
Response samples
- 200
{- "subscriptions": [
- {
- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "types": [
- "iban.updated",
- "profile.updated"
], - "state": "active"
}
]
}Create subscription
Create webhook subscription to receive notifications like profile update on specified endpoint. Subscription created notification is sent during subscription creation to validate if receiver is able to handle further notifications.
Authorizations:
Request Body schema: application/jsonrequired
| url required | string The URL where the notification will be sent. |
| secret required | string A secret key used to verify the authenticity of webhook notifications.
Each notification is sent with a webhook-signature header, which contains a minified JSON payload encrypted using the secret key via the HMAC-SHA256 scheme.
The secret key must be a base64-encoded, random value between 24 and 64 bytes, prefixed with |
| types | Array of strings Items Enum: "iban.updated" "order.created" "order.updated" "profile.updated" An array of event types that the webhook will subscribe to. If not specified, default events types are subscribed to. Default event types:
|
Responses
Response Schema: application/json
| id required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the webhook subscription. |
| url required | string <uri> The URL to which the webhook events will be sent. |
| types required | Array of arrays List of event types that trigger the webhook. |
| state required | string Enum: "active" "inactive" The state of the webhook subscription. |
Request samples
- Payload
- CLI
{- "secret": "whsec_mUt3nH+3wx/djdHf8RHn9yJMMiAhq10b",
- "types": [
- "iban.updated",
- "profile.updated"
]
}Response samples
- 201
{- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "types": [
- "iban.updated",
- "profile.updated"
], - "state": "active"
}Update subscription
Update an existing webhook subscription to change the URL, secret, or event types. The updated subscription will be validated by sending a subscription created notification to the new URL.
Authorizations:
path Parameters
| subscription required | string <uuid> The ID of the webhook subscription |
header Parameters
| Accept required | string Example: application/vnd.monerium.api-v2+json Accept header to specify API version 2 |
Request Body schema: application/json
| state | string Enum: "active" "inactive" The state of the webhook subscription. If set to |
| types | Array of strings Items Enum: "iban.updated" "order.created" "order.updated" "profile.updated" An array of event types that the webhook will subscribe to. If not specified, default events types are subscribed to. Default event types:
|
Responses
Response Schema: application/json
| id required | string <UUID> (UUID) ^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab... Unique identifier of the webhook subscription. |
| url required | string <uri> The URL to which the webhook events will be sent. |
| types required | Array of arrays List of event types that trigger the webhook. |
| state required | string Enum: "active" "inactive" The state of the webhook subscription. |
Request samples
- Payload
{- "state": "active",
- "types": [
- "iban.updated",
- "profile.updated"
]
}Response samples
- 200
{- "id": "a78d8ff2-e51f-11ed-9e13-cacb9390199c",
- "types": [
- "iban.updated",
- "profile.updated"
], - "state": "active"
}Supported e-money tokens with contract addresses and chain details. For icons, integration examples, and supported standards, see the Tokens section in the developer docs.
Tokens
Returns supported tokens with their tickers, decimals, and contract addresses per chain. For icons, integration examples, and supported standards, see the Tokens section in the developer docs.
Authorizations:
Responses
Response Schema: application/json
| currency | |
| ticker | any Enum: "EUR" "GBP" "USD" "ISK" The traditional currency abbreviation. |
| symbol | any Enum: "EURe" "GBPe" "USDe" "ISKe" The official symbol of the token used in DeFi platforms. |
Ethereum (string) or Gnosis (string) or Polygon (string) or Arbitrum (string) or Linea (string) or Base (string) or Noble (string) or Sepolia (string) or Chiado (string) or Amoy (string) or Arbitrum Sepolia (string) or Linea Sepolia (string) or Base Sepolia (string) or Noble Grand (string) (Chain) | |
| address | string The address of the token. |
| decimals | string Number of decimals used in the asset. |
Request samples
- CLI
curl https://api.monerium.dev/tokens \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response samples
- 200
[- {
- "currency": "eur",
- "ticker": "EUR",
- "symbol": "EURe",
- "chain": "ethereum",
- "address": "0x3231cb76718cdef2155fc47b5286d82e6eda273f",
- "decimals": 18
}, - {
- "currency": "gbp",
- "ticker": "GBP",
- "symbol": "GBPe",
- "chain": "ethereum",
- "address": "0x7ba92741bf2a568abc6f1d3413c58c6e0244f8fd",
- "decimals": 18
}, - {
- "currency": "isk",
- "ticker": "ISK",
- "symbol": "ISKe",
- "chain": "ethereum",
- "address": "0xc642549743a93674cf38d6431f75d6443f88e3e2",
- "decimals": 18
}, - {
- "currency": "usd",
- "ticker": "USD",
- "symbol": "USDe",
- "chain": "ethereum",
- "address": "0xbc5142e0cc5eb16b47c63b0f033d4c2480853a52",
- "decimals": 18
}, - {
- "currency": "eur",
- "ticker": "EUR",
- "symbol": "EURe",
- "chain": "polygon",
- "address": "0x18ec0A6E18E5bc3784fDd3a3634b31245ab704F6",
- "decimals": 18
}, - {
- "currency": "gbp",
- "ticker": "GBP",
- "symbol": "GBPe",
- "chain": "polygon",
- "address": "0x75792CBDb361d80ba89271a079EfeE62c29FA324",
- "decimals": 18
}, - {
- "currency": "isk",
- "ticker": "ISK",
- "symbol": "ISKe",
- "chain": "polygon",
- "address": "0xf1bBf27A9D659D326efBfa5D284EBaeFB803983D",
- "decimals": 18
}, - {
- "currency": "usd",
- "ticker": "USD",
- "symbol": "USDe",
- "chain": "polygon",
- "address": "0x64E97c1a6535afD4a313eF46F88A64a34250B719",
- "decimals": 18
}
]2026-05-08:
- PATCH /profiles/{profile}/verifications - Each verification item now takes a
documentsarray instead of a singlefileId. Each document haskind,fileId, and an optionalside. Corporate verifications support apersonIdfield to submit documents for a specific person (representative, director, or beneficial owner). - PATCH /profiles/{profile}/verifications - Updated verification type
facialSimilaritytofacialSimilarityMotionfor better alignment with the wire value.
2026-05-07:
- PATCH /profiles/{profile}/form -
PersonalForm: renamedtaxIdtotinand addedtaxResidenceCountryas a required field.
2026-05-06:
- GET /profiles, GET /profiles/{profile}, POST /profiles, GET /auth/context, Webhook profile.updated -
ProfileStateandSectionState: renamedsubmittedtopending.
2026-04-29:
- PATCH /profiles/{profileId}/verifications - Separated request schemas (
UpdatePersonalVerificationsandUpdateCorporateVerifications) from response schemas. Profileresponse schema now explicitly usesoneOfto return either aProfilePersonalorProfileCorporatestructure based on thekind.- Verification items in profile responses now correctly document the
stateproperty.
2026-04-28:
- GET /countries - Added countries endpoint to fetch supported countries and their details.
2026-04-27:
- POST /auth, GET /auth - Added
auth_modequery parameter to control initial auth screen (loginorsignup) when the user is not authenticated.
2026-04-08:
- POST /profiles - New endpoint to create a profile. Replaces
POST /auth/signupas the entry point for partner-led onboarding. Requireskind(personalorcorporate), which determines the body structure used in subsequent PATCH and share endpoints. - POST /auth/signup - Deprecated; use POST /profiles instead.
- GET /profiles/{profile} - Response now includes
details,form, andverificationssections, each with their ownstate. - POST /profiles/{profile}/share - New endpoint to reuse KYC data from a third-party provider (e.g. Sumsub). Populates
detailsandverificationsautomatically.formmust still be submitted separately viaPATCH /profiles/{profile}/form. - PATCH /profiles/{profile}/details, PATCH /profiles/{profile}/form, PATCH /profiles/{profile}/verifications - New partial-update endpoints. Preferred over the PUT variants.
- PATCH /profiles/{profile}/verifications - Each verification item takes a
kindand afileIddirectly. - PUT /profiles/{profile}/details, PUT /profiles/{profile}/form, PUT /profiles/{profile}/verifications - Deprecated; use the PATCH variants instead.
enhancedDueDiligencerenamed tosourceOfFundsin verification kinds.ProfileStatesimplified: removedpendingandblocked. Active states arecreated,incomplete,submitted,approved,rejected. Thesubmittedstate blocks further submissions until the profile transitions toapproved,rejected, orincomplete.info_requiredstate renamed toincompleteacross profile and section states.
2026-02-25:
- Orders now include
txHashesin themetafield, containing the blockchain transaction hashes for the mint or burn. Only present once the order has been processed on-chain.
2026-02-17:
- Removed
skip_create_accountfrom Athorization endpoint query parameters as it is no longer used in the flow. Use the Link Address and Request IBAN endpoints instead. - Enabled KYC testing in the Authorization flow. By default the
skip_kycparameter isfalse.
2026-02-02:
- Add missing 202 Status for Order creation endpoint.
- Add /signatures documentation to fetch pending signature requests.
2026-01-22:
- Base chain supported.
2025-11-14:
- Orders now support the
referenceNumberfield for structured SEPA reference info (max 35 characters). The field is available in the POST /place-order request, GET /order/{id} and GET /orders responses, as well as in order webhooks. - WIP Order memo field - Effective 15th of December, the
memofield in incoming SEPA payments will hold only unstructured remittance text. Structured reference will be provided exclusively in thereferenceNumberfield. Please ensure your integration usesreferenceNumberfor structured references before this change takes effect.
2025-07-17:
- Noble testnet chain identifier is now
grand, previouslynoble. - Noble chain identifier,
noble, documented. - Linea and Linea Sepolia chain identifiers,
lineaandlineasepoliadocumented.
2024-11-11:
- GET/POST /auth changes to query parameters.
- added
email: You can prefill the email field for login and sign up steps to ensure the user uses the correct email. - added
skip_kyc: You can skip the KYC onboarding steps in the Authorization Flow and use the the details, additional data, and verifications API endpoints after you have gotten the authorization. - changed
skip_create_account: changed skipCreateAccount to snake case for consistency.
- added
2024-10-22:
- WIP GET /orders - We're updating the orders response to return an object with an orders key containing an array of all orders. This new structure makes it easier to handle pagination and extend the response with additional metadata in the future. We plan to release this upgrade within 5th of November.
2024-10-07:
- POST /orders - Introduced a short format IBAN in the message.
2024-10-04:
- Webhook for Subscription notification - A notification that is used to validate if webhook receiver can handle further notifications.
- PUT /profiles/{profile}/form - profile form is extracted from profile details into a separate endpoint.
- PUT /profiles/{profile}/verifications - profile verifications is extracted from profile details into a separate endpoint.
- Arbitrum and Arbitrum Sepolia chains supported.
2024-09-27
- GET /balances - added a new endpoint to retrieve the account balances. Removed the deprecated
GET /profiles/{profile}/balancesendpoint.
2024-09-09
- POST /auth - removed required
version=v2argument from the request. Clarified required parameters for the oauth flow.
2024-08-30
- POST /auth - added required
version=v2and Sign in with Ethereum (SIWE) flow.
2024-08-19:
- PUT /profiles/{profile}/details - added form and verifications for personal and corporate profiles (WIP).
2024-08-09:
- POST /webhooks - A new endpoint to register webhook subscription and receive notifications like profile updates.
- Webhook for Profile notifications - A webhook notification about profile updates.
2024-07-15:
- PATCH /ibans/{iban} - Changed from PUT to PATCH request.
- PUT /profiles/{profile}/details - added 409 response when submitting details for an already approved profile.
2024-06-20:
- POST /auth/signup - Added a 304 response when trying to sign up existing users. This will require explicit authorization from the user using the authorization flow.
- PUT /ibans/{iban} - New endpoint released to move existing IBANs to another wallet address.