Inyo

Trust Level Limits

The Trust Level (Compliance Level) system controls how much a sender is allowed to transact. Higher levels require more KYC data and documents but unlock higher transaction limits across three rolling time windows: 24 hours, 30 days, and 180 days.


Checking Compliance Level

Endpoint: GET /organizations/{tenant}/participants/{participantId}/complianceLevels
Authentication: Tenant-level (x-api-key)

curl --request GET \
  --url https://{FQDN}/organizations/$TENANT/participants/$SENDER_ID/complianceLevels \
  --header "x-api-key: $API_KEY"

This endpoint returns:

  • The participant's current compliance level and its limits
  • The next available level and its required fields
  • The fields the participant is still missing to reach the next level

Sample Response

A participant at LEVEL_0 (cannot transact yet) with upgrade path to LEVEL_1:

{
  "participantId": "48066496-9445-41b7-acbe-85e069a77cb7",
  "currentComplianceLevel": {
    "level": "LEVEL_0",
    "limits": {
      "oneDayLimit": { "amount": "0.00", "currency": "USD" },
      "thirtyDaysLimit": { "amount": "0.00", "currency": "USD" },
      "oneHundredAndEightyDaysLimit": { "amount": "0.00", "currency": "USD" }
    },
    "requiredFields": [],
    "perTransactionFields": []
  },
  "nextComplianceLevel": {
    "level": "LEVEL_1",
    "limits": {
      "oneDayLimit": { "amount": "2999.00", "currency": "USD" },
      "thirtyDaysLimit": { "amount": "6000.00", "currency": "USD" },
      "oneHundredAndEightyDaysLimit": { "amount": "9999.00", "currency": "USD" }
    },
    "requiredFields": [
      "firstName",
      "lastName",
      "phoneNumber",
      "residentialAddress"
    ],
    "perTransactionFields": []
  },
  "missingFieldsForNextComplianceLevel": [
    "phoneNumber",
    "residentialAddress"
  ]
}

Key fields:

  • currentComplianceLevel β€” the level the participant qualifies for right now (LEVEL_0 with zero limits when no data has been provided)
  • nextComplianceLevel.requiredFields β€” everything the next level requires
  • missingFieldsForNextComplianceLevel β€” the subset the participant hasn't provided yet β€” drive your progressive-onboarding UI from this list

Compliance Level Overview

LevelTypical Required FieldsDescription
LEVEL_0(none)Default level. Cannot transact. Participant exists but has not provided minimum KYC data.
LEVEL_1firstName, lastName, address, phoneNumber, ID Number, DOBBasic KYC. Enables standard transaction volumes.
LEVEL_2SSN/ITIN, occupation, document ID uploadEnhanced KYC. Unlocks higher limits.
LEVEL_3Proof of source of fundsFull KYC. Maximum transaction limits.

These levels are customizable per tenant. Your specific required fields and limits are defined during the Inyo onboarding process and may differ from the defaults shown above.


Checking Transaction Limits & Usage

To see how much of their limit a sender has already used:

Endpoint: GET /organizations/{tenant}/fx/participants/{participantId}/limits
Authentication: Agent-level (x-api-key + x-agent-id + x-agent-api-key)

curl --request GET \
  --url https://{FQDN}/organizations/$TENANT/fx/participants/$SENDER_ID/limits \
  --header "x-api-key: $API_KEY" \
  --header "x-agent-id: $AGENT_ID" \
  --header "x-agent-api-key: $AGENT_KEY"

Sample Response:

{
  "oneDayLimit": {
    "limit": { "amount": "2999.00", "currency": "USD" },
    "used": { "amount": "500.00", "currency": "USD" },
    "available": { "amount": "2499.00", "currency": "USD" }
  },
  "thirtyDaysLimit": {
    "limit": { "amount": "6000.00", "currency": "USD" },
    "used": { "amount": "2959.99", "currency": "USD" },
    "available": { "amount": "3040.01", "currency": "USD" }
  },
  "oneHundredAndEightyDaysLimit": {
    "limit": { "amount": "9999.00", "currency": "USD" },
    "used": { "amount": "5000.00", "currency": "USD" },
    "available": { "amount": "4999.00", "currency": "USD" }
  }
}

Key fields:

  • limit β€” Maximum amount for this time window (from the participant's current compliance level)
  • used β€” Amount already consumed in the rolling window (only transactions that count toward limits β€” declined/cancelled ones don't)
  • available β€” Remaining capacity (limit - used)

The limits reported here stay in lockstep with GET /participants/{id}/complianceLevels β€” both endpoints answer with the same numbers, and available is computed with the same rules the transaction validator applies.


Upgrading a Sender's Level

To move a sender from one level to the next:

  1. Check current level β€” GET /participants/{id}/complianceLevels
  2. Identify missing fields β€” Look at missingFieldsForNextComplianceLevel
  3. Collect the data β€” Update the sender's profile with the missing fields:
    • Use PATCH /people/{personId} for profile fields (SSN, occupation, etc.)
    • Use PUT /people/{personId}/address for address updates
    • Use document upload endpoints for ID documents and source of funds
  4. Verify the upgrade β€” Call the compliance levels endpoint again to confirm the level increased
          LEVEL_0                 LEVEL_1                 LEVEL_2                 LEVEL_3
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚  Cannot      β”‚  Add  β”‚  Standard    β”‚  Add  β”‚  Enhanced    β”‚  Add  β”‚  Maximum     β”‚
     β”‚  transact    │──────▢│  limits      │──────▢│  limits      │──────▢│  limits      β”‚
     β”‚              β”‚ name, β”‚              β”‚ SSN,  β”‚              β”‚ proof β”‚              β”‚
     β”‚  $0 / $0 / $0β”‚ addr, β”‚  $X/$X/$X    β”‚ docs, β”‚  $X/$X/$X    β”‚ of    β”‚  $X/$X/$X    β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ phone β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ occup β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ funds β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Use Cases

  • Progressive onboarding β€” Start with minimal data (Level 1) and prompt for more only when the user needs higher limits.
  • Limit warnings β€” Show users their remaining capacity before they initiate a transaction.
  • Upgrade prompts β€” When a transaction would exceed the current limit, show exactly which fields are missing and guide the user to complete them.
  • Compliance dashboard β€” Display a visual progress bar showing the user's level and what's needed for the next tier.

Tracking Document Review

To show users that their documents are under review, track verification status per document β€” see Uploading Documents β€” or subscribe to the DocumentUpdatedEvents webhook.

Interactive API Documentation