Skip to content

Accounts and corporates: verification status

The account endpoints tell you whether a party you onboarded has cleared verification and what it may do right now.

Planned

This is part of the v1 contract and is documented ahead of release. It is not yet served in production. Build against it only once this notice is gone.

Both endpoints need the account:read scope. This page explains how to use them. The shapes are stated on the accounts reference.

What these endpoints answer

They answer one question: is this party verified enough for you to transact with? You get a verification status, a country code, capability flags and, for customers, monthly withdrawal limits. You do not get identity. There are no names of individuals, no documents and no contact details. See what these endpoints will never return.

Use these reads to decide what to offer a party, not to identify one.

Customers

GET/v1/customers/{customerId}account:readPlanned

customerId is the opaque identifier MYRT assigned when the customer was linked to your integration, for example cus_9f2a3b4c. It is not a MYRT account id, an email address, or anything a customer could be recognised by. Linking happens during onboarding with your account manager. It is the same value you send on every mint, redeem and transfer.

bash
curl https://sandbox-api.myrt.money/v1/customers/cus_9f2a3b4c \
  -H "Authorization: Bearer $MYRT_API_KEY"

200 OK

json
{
  "ok": true,
  "customerId": "cus_9f2a3b4c",
  "accountType": "RETAIL",
  "verification": { "status": "VERIFIED", "level": "TIER_2", "verifiedAt": "2026-04-02T09:11:00.000Z" },
  "residency": { "countryCode": "MY", "isResident": true },
  "limits": {
    "currency": "MYR",
    "monthlyWithdrawalCap": "50000.00",
    "monthlyWithdrawalUsed": "12500.00",
    "monthlyWithdrawalRemaining": "37500.00"
  },
  "capabilities": { "canMint": true, "canRedeem": true, "canTransfer": true },
  "createdAt": "2026-04-01T02:20:14.000Z"
}
FieldTypeDescription
customerIdstringThe identifier you supplied in the path
accountTypestringRETAIL or ENTERPRISE
verification.statusstringOne of UNVERIFIED, PENDING, VERIFIED, REJECTED, SUSPENDED. Treat anything other than VERIFIED as not cleared
verification.levelstringA tier label, for example TIER_2. New labels may appear, so handle values you do not recognise
verification.verifiedAtstring or nullISO 8601 UTC. null unless status is VERIFIED
residency.countryCodestringISO 3166-1 alpha-2 country code
residency.isResidentbooleantrue for a resident customer. A non-resident customer is limited to RM 100,000 per transaction on mint and redeem, returned as FOREIGNER_LIMIT_EXCEEDED
limits.currencystringThe currency the limit values are expressed in
limits.monthlyWithdrawalCapstringDecimal string. The customer's monthly withdrawal limit. Redemptions count against it
limits.monthlyWithdrawalUsedstringDecimal string. The amount already counted against the cap this month
limits.monthlyWithdrawalRemainingstringDecimal string. What the customer can still withdraw this month
capabilities.canMintbooleanWhether the customer may mint right now
capabilities.canRedeembooleanWhether the customer may redeem right now
capabilities.canTransferbooleanWhether the customer may transfer right now
createdAtstringISO 8601 UTC

Limit values are decimal strings, not numbers. Parse them with a decimal library and never compare the strings. See amounts.

Corporates

GET/v1/corporates/{corporateId}account:readPlanned

A corporate is identified by corporateId, for example cor_71bd5e29. It appears only on this endpoint. Value-moving calls carry customerId, never corporateId.

bash
curl https://sandbox-api.myrt.money/v1/corporates/cor_71bd5e29 \
  -H "Authorization: Bearer $MYRT_API_KEY"

200 OK

json
{
  "ok": true,
  "corporateId": "cor_71bd5e29",
  "companyName": "Acme Sdn Bhd",
  "verification": { "status": "VERIFIED", "stage": "COMPLETE", "verifiedAt": "2026-05-18T03:44:00.000Z" },
  "jurisdiction": { "countryCode": "MY" },
  "industry": "Payments",
  "capabilities": { "canMint": true, "canRedeem": true, "canPayroll": true },
  "createdAt": "2026-05-02T01:02:03.000Z"
}
FieldTypeDescription
corporateIdstringThe identifier you supplied in the path
companyNamestringThe company's name
verification.statusstringOne of UNVERIFIED, PENDING, VERIFIED, REJECTED, SUSPENDED. Treat anything other than VERIFIED as not cleared
verification.stagestringWhere the corporate is in the verification process, for example COMPLETE
verification.verifiedAtstring or nullISO 8601 UTC. null unless status is VERIFIED
jurisdiction.countryCodestringISO 3166-1 alpha-2 country code
industrystringThe industry the company operates in
capabilities.canMintbooleanWhether the corporate may mint right now
capabilities.canRedeembooleanWhether the corporate may redeem right now
capabilities.canPayrollbooleanWhether payroll is enabled for the corporate
createdAtstringISO 8601 UTC

Using capabilities

Read capabilities before you offer a mint, redeem or transfer. If the flag for an action is false, do not offer that action.

The flags are a snapshot at the time of the read. Verification can change between that read and your order, so keep handling 403 CUSTOMER_NOT_VERIFIED on every mint, redeem and transfer. The order call is the authority. The capability flag is a hint that saves a failed request.

For redemptions, limits.monthlyWithdrawalRemaining tells you how much the customer can still withdraw this month. A redeem that would exceed it returns 400 MONTHLY_WITHDRAWAL_LIMIT_EXCEEDED with meta.monthlyLimit, meta.monthlyCommitted and meta.requestedAmount. Show the remaining amount before the customer commits, and still handle the error.

Do not poll these endpoints in a tight loop. Read once when a party opens a flow, and again when an order is refused. Both reads draw from the standard read bucket described under rate limits.

What these endpoints will never return

By design, and permanently, neither endpoint returns:

  • email addresses
  • phone numbers
  • legal names of individuals
  • national identity or passport numbers
  • uploaded verification documents, or links to them
  • residential or registered addresses
  • IP addresses
  • login history
  • device data
  • internal identifiers
  • wallet addresses, other than ones you supplied on your own orders
  • any data about a party you did not onboard

If your integration needs identity attributes beyond verification status, that requires a separate agreement with a separate legal basis under Malaysia's Personal Data Protection Act. It is not part of the partner API.

Access rules

  • You can read only parties linked to your integration. A customerId or corporateId that is not linked to you returns 404 NOT_FOUND, the same response as an identifier that does not exist. You cannot use these endpoints to find out whether someone is a MYRT customer.
  • account:read is granted only under a signed data processing agreement. Until one is on file, every call returns 403 SCOPE_DENIED, even if your key was issued with the scope. See scopes.
  • Identity attributes need a separate agreement under Malaysia's Personal Data Protection Act. They are not part of the partner API.
CodeHTTPWhen
SCOPE_DENIED403The key lacks account:read, or no data processing agreement is on file
NOT_FOUND404The party does not exist or is not linked to your integration

The full list is on the errors page. Field-by-field shapes are on the accounts reference.

MYRT is a 1:1 Ringgit-backed stablecoin on Ethereum.