Skip to main content

UMA as a Service (UMAaaS) API (2025-05-15)

Download OpenAPI specification:Download

Lightspark Support: support@lightspark.com License: Proprietary

API for managing global payments to and from UMA addresses. This service facilitates cross-currency financial transactions using simple human-readable UMA addresses.

Platform Configuration

Platform configuration endpoints for managing global settings. You can also configure these settings in the UMAaas dashboard.

Get platform configuration

Retrieve the current platform configuration

Authorizations:
BasicAuth

Responses

Response samples

Content type
application/json
{
  • "id": "PlatformConfig:019542f5-b3e7-1d02-0000-000000000003",
  • "umaDomain": "platform.uma.domain",
  • "proxyUmaaasSubdomain": "platform",
  • "supportedCurrencies": [
    ],
  • "createdAt": "2023-06-15T12:30:45Z",
  • "updatedAt": "2023-06-15T12:30:45Z"
}

Update platform configuration

Update the platform configuration settings

Authorizations:
BasicAuth
Request Body schema: application/json
required
umaDomain
string
webhookEndpoint
string
Array of objects (PlatformCurrencyConfig)

Responses

Request samples

Content type
application/json
{
  • "umaDomain": "mycompany.com",
  • "supportedCurrencies": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "PlatformConfig:019542f5-b3e7-1d02-0000-000000000003",
  • "umaDomain": "platform.uma.domain",
  • "proxyUmaaasSubdomain": "platform",
  • "supportedCurrencies": [
    ],
  • "createdAt": "2023-06-15T12:30:45Z",
  • "updatedAt": "2023-06-15T12:30:45Z"
}

Users

User management endpoints for creating and updating user information

Add a new user

Register a new user in the system with UMA address and bank account information

Authorizations:
BasicAuth
Request Body schema: application/json
required
umaAddress
required
string

full UMA address

platformUserId
required
string

Platform-specific user identifier

userType
required
string (UserType)

Whether the user is an individual or a business entity

fullName
string

Individual's full name

birthDate
string <date>

Date of birth in ISO 8601 format (YYYY-MM-DD)

nationality
string

Country code (ISO 3166-1 alpha-2)

object (Address)
required
UserClabeAccountInfo (object) or UserUsAccountInfo (object) or UserPixAccountInfo (object) or UserIbanAccountInfo (object) or UserFboAccountInfo (object) or UserUpiAccountInfo (object) (UserBankAccountInfo)

Responses

Request samples

Content type
application/json
Example
{
  • "umaAddress": "$jane.doe@uma.domain.com",
  • "platformUserId": "7b3c5a89d2f1e0",
  • "userType": "INDIVIDUAL",
  • "fullName": "Jane Doe",
  • "birthDate": "1992-03-25",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "id": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "umaAddress": "$john.doe@uma.domain.com",
  • "platformUserId": "9f84e0c2a72c4fa",
  • "userType": "INDIVIDUAL",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z",
  • "isDeleted": false,
  • "fullName": "John Michael Doe",
  • "birthDate": "1990-01-15",
  • "nationality": "US",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

List users

Retrieve a list of users with optional filtering parameters. Returns all users that match the specified filters. If no filters are provided, returns all users (paginated).

Authorizations:
BasicAuth
query Parameters
platformUserId
string

Filter by platform-specific user identifier

umaAddress
string

Filter by UMA address

userType
string (UserType)
Enum: "INDIVIDUAL" "BUSINESS"
Example: userType=INDIVIDUAL

Filter by user type

createdAfter
string <date-time>

Filter users created after this timestamp (inclusive)

createdBefore
string <date-time>

Filter users created before this timestamp (inclusive)

updatedAfter
string <date-time>

Filter users updated after this timestamp (inclusive)

updatedBefore
string <date-time>

Filter users updated before this timestamp (inclusive)

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of results to return (default 20, max 100)

cursor
string

Cursor for pagination (returned from previous request)

isIncludingDeleted
boolean

Whether to include deleted users in the results. Default is false.

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string",
  • "totalCount": 0
}

Get user by ID

Retrieve a user by their system-generated ID

Authorizations:
BasicAuth
path Parameters
userId
required
string

System-generated unique user identifier

Responses

Response samples

Content type
application/json
Example
{
  • "id": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "umaAddress": "$john.doe@uma.domain.com",
  • "platformUserId": "9f84e0c2a72c4fa",
  • "userType": "INDIVIDUAL",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z",
  • "isDeleted": false,
  • "fullName": "John Michael Doe",
  • "birthDate": "1990-01-15",
  • "nationality": "US",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

Update user by ID

Update a user's metadata by their system-generated ID

Authorizations:
BasicAuth
path Parameters
userId
required
string

System-generated unique user identifier

Request Body schema: application/json
required
One of
umaAddress
string

Full UMA address

fullName
string

Individual's full name

birthDate
string <date>

Date of birth in ISO 8601 format (YYYY-MM-DD)

nationality
string

Country code (ISO 3166-1 alpha-2)

object (Address)
UserClabeAccountInfo (object) or UserUsAccountInfo (object) or UserPixAccountInfo (object) or UserIbanAccountInfo (object) or UserFboAccountInfo (object) or UserUpiAccountInfo (object) (UserBankAccountInfo)

Responses

Request samples

Content type
application/json
Example
{
  • "userType": "INDIVIDUAL",
  • "fullName": "John Smith",
  • "birthDate": "1985-06-15",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

Response samples

Content type
application/json
Example
{
  • "id": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "umaAddress": "$john.doe@uma.domain.com",
  • "platformUserId": "9f84e0c2a72c4fa",
  • "userType": "INDIVIDUAL",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z",
  • "isDeleted": false,
  • "fullName": "John Michael Doe",
  • "birthDate": "1990-01-15",
  • "nationality": "US",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

Delete user by ID

Delete a user by their system-generated ID

Authorizations:
BasicAuth
path Parameters
userId
required
string

System-generated unique user identifier

Responses

Response samples

Content type
application/json
Example
{
  • "id": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "umaAddress": "$john.doe@uma.domain.com",
  • "platformUserId": "9f84e0c2a72c4fa",
  • "userType": "INDIVIDUAL",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z",
  • "isDeleted": false,
  • "fullName": "John Michael Doe",
  • "birthDate": "1990-01-15",
  • "nationality": "US",
  • "address": {
    },
  • "bankAccountInfo": {
    }
}

Upload users via CSV file

Upload a CSV file containing user information for bulk creation. The CSV file should follow a specific format with required and optional columns based on user type.

CSV Format

The CSV file should have the following columns:

Required columns for all users:

  • umaAddress: The user's UMA address (e.g., $john.doe@uma.domain.com)
  • platformUserId: Your platform's unique identifier for the user
  • userType: Either "INDIVIDUAL" or "BUSINESS"

Required columns for individual users:

  • fullName: Individual's full name
  • birthDate: Date of birth in YYYY-MM-DD format
  • addressLine1: Street address line 1
  • city: City
  • state: State/Province/Region
  • postalCode: Postal/ZIP code
  • country: Country code (ISO 3166-1 alpha-2)
  • accountType: Bank account type (CLABE, US_ACCOUNT, PIX, IBAN)
  • accountNumber: Bank account number
  • bankName: Name of the bank

Required columns for business users:

  • businessLegalName: Legal name of the business
  • addressLine1: Street address line 1
  • city: City
  • state: State/Province/Region
  • postalCode: Postal/ZIP code
  • country: Country code (ISO 3166-1 alpha-2)
  • accountType: Bank account type (CLABE, US_ACCOUNT, PIX, IBAN)
  • accountNumber: Bank account number
  • bankName: Name of the bank

Optional columns for all users:

  • addressLine2: Street address line 2
  • platformAccountId: Your platform's identifier for the bank account
  • description: Optional description for the user

Optional columns for individual users:

  • email: User's email address

Optional columns for business users:

  • businessRegistrationNumber: Business registration number
  • businessTaxId: Tax identification number

Additional required columns based on account type:

For US_ACCOUNT:

  • routingNumber: ACH routing number (9 digits)
  • accountCategory: Either "CHECKING" or "SAVINGS"

For CLABE:

  • clabeNumber: 18-digit CLABE number

For PIX:

  • pixKey: PIX key value
  • pixKeyType: Type of PIX key (CPF, CNPJ, EMAIL, PHONE, RANDOM)

For IBAN:

  • iban: International Bank Account Number
  • swiftBic: SWIFT/BIC code (8 or 11 characters)

See the UserBankAccountInfo and UserInfo schemas for more details on the required and optional fields.

Example CSV

umaAddress,platformUserId,userType,fullName,birthDate,addressLine1,city,state,postalCode,country,accountType,accountNumber,bankName,platformAccountId,businessLegalName,routingNumber,accountCategory
john.doe@uma.domain.com,user123,INDIVIDUAL,John Doe,1990-01-15,123 Main St,San Francisco,CA,94105,US,US_ACCOUNT,123456789,Chase Bank,chase_primary_1234,,222888888,SAVINGS
acme@uma.domain.com,biz456,BUSINESS,,,400 Commerce Way,Austin,TX,78701,US,US_ACCOUNT,987654321,Bank of America,boa_business_5678,Acme Corp,121212121,CHECKING

The upload process is asynchronous and will return a job ID that can be used to track progress. You can monitor the job status using the /users/bulk/jobs/{jobId} endpoint.

Authorizations:
BasicAuth
Request Body schema: multipart/form-data
required
file
required
string <binary>

CSV file containing user information

Responses

Response samples

Content type
application/json
{
  • "jobId": "Job:019542f5-b3e7-1d02-0000-000000000006",
  • "status": "PENDING"
}

Get bulk import job status

Retrieve the current status and results of a bulk user import job. This endpoint can be used to track the progress of both CSV uploads.

The response includes:

  • Overall job status
  • Progress statistics
  • Detailed error information for failed entries
  • Completion timestamp when finished
Authorizations:
BasicAuth
path Parameters
jobId
required
string

ID of the bulk import job to retrieve

Responses

Response samples

Content type
application/json
{
  • "jobId": "Job:019542f5-b3e7-1d02-0000-000000000006",
  • "status": "PROCESSING",
  • "progress": {
    },
  • "errors": [
    ],
  • "completedAt": "2023-08-15T14:32:00Z"
}

Transactions

Endpoints for retrieving transaction information

Get transaction by ID

Retrieve detailed information about a specific transaction

Authorizations:
BasicAuth
path Parameters
transactionId
required
string

Unique identifier of the transaction

Responses

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

List transactions

Retrieve a paginated list of transactions with optional filtering. The transactions can be filtered by user ID, platform user ID, UMA address, date range, status, and transaction type.

Authorizations:
BasicAuth
query Parameters
userId
string

Filter by system user ID

platformUserId
string

Filter by platform-specific user ID

umaAddress
string

Filter by UMA address (either sender or receiver)

senderUmaAddress
string

Filter by sender UMA address

receiverUmaAddress
string

Filter by receiver UMA address

status
string (TransactionStatus)
Enum: "CREATED" "PENDING" "PROCESSING" "COMPLETED" "REJECTED" "FAILED" "REFUNDED" "EXPIRED"

Filter by transaction status

type
string (TransactionType)
Enum: "INCOMING" "OUTGOING"

Filter by transaction type

reference
string

Filter by reference

startDate
string <date-time>

Filter by start date (inclusive) in ISO 8601 format

endDate
string <date-time>

Filter by end date (inclusive) in ISO 8601 format

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of results to return (default 20, max 100)

cursor
string

Cursor for pagination (returned from previous request)

sortOrder
string
Default: "desc"
Enum: "asc" "desc"

Order to sort results in

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string",
  • "totalCount": 0
}

Approve a pending incoming payment

Approve a pending incoming payment that was previously acknowledged with a 202 response. This endpoint allows platforms to asynchronously approve payments after async processing.

Authorizations:
BasicAuth
path Parameters
transactionId
required
string

Unique identifier of the transaction to approve

Request Body schema: application/json
optional
object

Information about the recipient, provided by the platform if requested in the original webhook via requestedReceiverUserInfoFields.

property name*
additional property
any

Responses

Request samples

Content type
application/json
{
  • "receiverUserInfo": { }
}

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

Reject a pending incoming payment

Reject a pending incoming payment that was previously acknowledged with a 202 response. This endpoint allows platforms to asynchronously reject payments after additional processing.

Authorizations:
BasicAuth
path Parameters
transactionId
required
string

Unique identifier of the transaction to reject

Request Body schema: application/json
optional
reason
string

Optional reason for rejecting the payment. This is just for debugging purposes or can be used for a platform's own purposes.

Responses

Request samples

Content type
application/json
{
  • "reason": "RESTRICTED_JURISDICTION"
}

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

Sending Payments

Endpoints for creating and managing payment quotes and executing payments

Look up a UMA address for payment

Lookup a receiving UMA address to determine supported currencies and exchange rates. This endpoint helps platforms determine what currencies they can send to a given UMA address.

Authorizations:
BasicAuth
path Parameters
receiverUmaAddress
required
string

UMA address of the intended recipient

query Parameters
senderUmaAddress
string

UMA address of the sender (optional if userId is provided)

userId
string

System ID of the sender (optional if senderUmaAddress is provided)

Responses

Response samples

Content type
application/json
{
  • "receiverUmaAddress": "$receiver@uma.domain",
  • "supportedCurrencies": [
    ],
  • "requiredPayerDataFields": [
    ],
  • "lookupId": "Lookup:019542f5-b3e7-1d02-0000-000000000009"
}

Create a payment quote

Generate a quote for a payment from one UMA address to another. The quote locks in exchange rates and fees for a set period of time and provides payment instructions that can be used to execute the payment.

Depending on the lockedCurrencySide parameter, either the sending amount or receiving amount will be locked.

The returned quote includes payment instructions with the banking details needed to execute the payment and fulfill the quote. These instructions must be followed precisely, including any reference codes provided.

Authorizations:
BasicAuth
Request Body schema: application/json
required
lookupId
required
string

Unique identifier for the prior receiver uma address lookup request.

sendingCurrencyCode
required
string

Currency code for the sending amount

receivingCurrencyCode
required
string

Currency code for the receiving amount

lockedCurrencySide
required
string (QuoteLockSide)
Enum: "SENDING" "RECEIVING"

The side of the quote which should be locked and specified in the lockedCurrencyAmount. For example, if I want to send exactly $5 MXN from my wallet, I would set this to "sending", and the lockedCurrencyAmount to 500 (in cents). If I want the receiver to receive exactly $10 USD, I would set this to "receiving" and the lockedCurrencyAmount to 10000 (in cents).

lockedCurrencyAmount
required
integer <int64> > 0

The amount to send/receive in the smallest unit of the locked currency (eg. cents). See lockedCurrencySide for more information.

description
string

Optional description/memo for the payment

object

Key-value pairs of information about the sender which was requested by the counterparty (recipient) institution. Any fields specified in requiredPayerDataFields from the response of the /receiver/{receiverUmaAddress} (lookupUma) endpoint MUST be provided here if they were requested. If the counterparty (recipient) institution did not request any information, this field can be omitted.

Responses

Request samples

Content type
application/json
Example
{
  • "lookupId": "LookupRequest:019542f5-b3e7-1d02-0000-000000000009",
  • "sendingCurrencyCode": "USD",
  • "receivingCurrencyCode": "EUR",
  • "lockedCurrencySide": "SENDING",
  • "lockedCurrencyAmount": 1000,
  • "description": "Payment for invoice #1234"
}

Response samples

Content type
application/json
{
  • "quoteId": "Quote:019542f5-b3e7-1d02-0000-000000000006",
  • "sendingCurrency": {
    },
  • "receivingCurrency": {
    },
  • "totalSendingAmount": 123010,
  • "totalReceivingAmount": 1000,
  • "exchangeRate": 0,
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "feesIncluded": 10,
  • "counterpartyInformation": {
    },
  • "paymentInstructions": {
    },
  • "status": "PENDING",
  • "transactionId": "Transaction:019542f5-b3e7-1d02-0000-000000000005",
  • "originalQuoteId": "Quote:019542f5-b3e7-1d02-0000-000000000001",
  • "rateDetails": {
    }
}

Get quote by ID

Retrieve a quote by its ID. If the quote has been settled, it will include the transaction ID. This allows clients to track the full lifecycle of a payment from quote creation to settlement.

Authorizations:
BasicAuth
path Parameters
quoteId
required
string

ID of the quote to retrieve

Responses

Response samples

Content type
application/json
{
  • "quoteId": "Quote:019542f5-b3e7-1d02-0000-000000000006",
  • "sendingCurrency": {
    },
  • "receivingCurrency": {
    },
  • "totalSendingAmount": 123010,
  • "totalReceivingAmount": 1000,
  • "exchangeRate": 0,
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "feesIncluded": 10,
  • "counterpartyInformation": {
    },
  • "paymentInstructions": {
    },
  • "status": "PENDING",
  • "transactionId": "Transaction:019542f5-b3e7-1d02-0000-000000000005",
  • "originalQuoteId": "Quote:019542f5-b3e7-1d02-0000-000000000001",
  • "rateDetails": {
    }
}

Retry an incomplete payment

In the case where a customer is debited but the Lightning payment fails to complete, integrators can retry the payment using this endpoint.

Payments retried with this endpoint will debit from the sender and deliver to the recipient the same amount as the original quote. As UMA as a service does not persist customer PII, retries need to start with a lookup request to retrieve the original quote's recipient counter party data requirements then pass that sender information in the request body. Before calling this endpoint, you should reach out to the UMA as a service team to investigate the underlying issue. As part of resolution, they'll update the transaction to the appropriate state. The quote / transaction to retry must be in a FAILED or REFUNDED state.

Authorizations:
BasicAuth
path Parameters
quoteId
required
string

ID of the quote to retry

Request Body schema: application/json
lookupId
required
string

Unique identifier for the prior receiver uma address lookup request.

object

Key-value pairs of information about the sender which was requested by the counterparty (recipient) institution. Any fields specified in requiredPayerDataFields from the response of the /receiver/{receiverUmaAddress} (lookupUma) endpoint MUST be provided here if they were requested. If the counterparty (recipient) institution did not request any information, this field can be omitted.

Responses

Request samples

Content type
application/json
{
  • "lookupId": "Lookup:019542f5-b3e7-1d02-0000-000000000009",
  • "senderUserInfo": {
    }
}

Response samples

Content type
application/json
{
  • "quoteId": "Quote:019542f5-b3e7-1d02-0000-000000000006",
  • "sendingCurrency": {
    },
  • "receivingCurrency": {
    },
  • "totalSendingAmount": 123010,
  • "totalReceivingAmount": 1000,
  • "exchangeRate": 0,
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "feesIncluded": 10,
  • "counterpartyInformation": {
    },
  • "paymentInstructions": {
    },
  • "status": "PENDING",
  • "transactionId": "Transaction:019542f5-b3e7-1d02-0000-000000000005",
  • "originalQuoteId": "Quote:019542f5-b3e7-1d02-0000-000000000001",
  • "rateDetails": {
    }
}

Trigger payment from a FBO account

This endpoint should only be used for when your account is configured for FBO payments. It triggers funding a quote from your FBO account to initiate payment.

Authorizations:
BasicAuth
path Parameters
quoteId
required
string

ID of the quote to pay from FBO

Responses

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

Webhooks

Webhook endpoints and configuration for receiving notifications

Incoming payment webhook and approval mechanism Webhook

Webhook that is called when an incoming payment is received by a user's UMA address. This endpoint should be implemented by clients of the UMAaas API.

Authentication

The webhook includes a signature in the X-UMAaas-Signature header that allows you to verify that the webhook was sent by UMAaas. To verify the signature:

  1. Get the UMAaas public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

Payment Approval Flow

When a transaction has status: "PENDING", this webhook serves as an approval mechanism:

  1. The client should check the counterpartyInformation against their requirements
  2. To APPROVE the payment synchronously, return a 200 OK response
  3. To REJECT the payment, return a 403 Forbidden response with an Error object
  4. To request more information, return a 422 Unprocessable Entity with specific missing fields
  5. To process the payment asynchronously, return a 202 Accepted response and then call the /transactions/{transactionId}/approve or /transactions/{transactionId}/reject endpoint within 5 seconds. Note that synchronous approval/rejection is preferred where possible.

The UMAaas system will proceed or cancel the payment based on your response.

For transactions with other statuses (COMPLETED, FAILED, REFUNDED), this webhook is purely informational.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
timestamp
required
string <date-time>

ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)

webhookId
required
string

Unique identifier for this webhook delivery (can be used for idempotency)

type
required
string

Type of webhook event

required
object (IncomingTransaction)
Array of objects (CounterpartyFieldDefinition)

Information required by the sender's VASP about the recipient. Platform must provide these in the 200 OK response if approving. Note that this only includes fields which UMAaaS does not already have from initial user registration.

Responses

Request samples

Content type
application/json
Example
{
  • "transaction": {
    },
  • "requestedReceiverUserInfoFields": [
    ],
  • "timestamp": "2023-08-15T14:32:00Z",
  • "webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000007",
  • "type": "INCOMING_PAYMENT"
}

Response samples

Content type
application/json
{
  • "receiverUserInfo": { }
}

Outgoing payment status webhook Webhook

Webhook that is called when an outgoing payment's status changes. This endpoint should be implemented by clients of the UMAaas API.

Authentication

The webhook includes a signature in the X-UMAaas-Signature header that allows you to verify that the webhook was sent by UMAaas. To verify the signature:

  1. Get the UMAaas public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

This webhook is informational only and is sent when an outgoing payment completes successfully or fails.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
timestamp
required
string <date-time>

ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)

webhookId
required
string

Unique identifier for this webhook delivery (can be used for idempotency)

type
required
string

Type of webhook event

required
object (IncomingTransaction)
Array of objects (CounterpartyFieldDefinition)

Information required by the sender's VASP about the recipient. Platform must provide these in the 200 OK response if approving. Note that this only includes fields which UMAaaS does not already have from initial user registration.

Responses

Request samples

Content type
application/json
Example
{
  • "transaction": {
    },
  • "timestamp": "2023-08-15T14:32:00Z",
  • "webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000007",
  • "type": "OUTGOING_PAYMENT"
}

Response samples

Content type
application/json
{
  • "status": 400,
  • "code": "INVALID_INPUT",
  • "message": "string",
  • "details": { }
}

Test webhook for integration verification Webhook

Webhook that is sent once to verify your webhook endpoint is correctly set up. This is sent when you configure or update your platform settings with a webhook URL.

Authentication

The webhook includes a signature in the X-UMAaas-Signature header that allows you to verify that the webhook was sent by UMAaas. To verify the signature:

  1. Get the UMAaas public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

This webhook is purely for testing your endpoint integration and signature verification.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
timestamp
required
string <date-time>

ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)

webhookId
required
string

Unique identifier for this webhook delivery (can be used for idempotency)

type
required
string

Type of webhook event

required
object (IncomingTransaction)
Array of objects (CounterpartyFieldDefinition)

Information required by the sender's VASP about the recipient. Platform must provide these in the 200 OK response if approving. Note that this only includes fields which UMAaaS does not already have from initial user registration.

Responses

Request samples

Content type
application/json
{
  • "timestamp": "2023-08-15T14:32:00Z",
  • "webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000001",
  • "type": "TEST"
}

Response samples

Content type
application/json
{
  • "status": 400,
  • "code": "INVALID_INPUT",
  • "message": "string",
  • "details": { }
}

Bulk upload status webhook Webhook

Webhook that is called when a bulk user upload job completes or fails. This endpoint should be implemented by clients of the UMAaas API.

Authentication

The webhook includes a signature in the X-UMAaas-Signature header that allows you to verify that the webhook was sent by UMAaas. To verify the signature:

  1. Get the UMAaas public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

This webhook is sent when a bulk upload job completes or fails, providing detailed information about the results.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
timestamp
required
string <date-time>

ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)

webhookId
required
string

Unique identifier for this webhook delivery (can be used for idempotency)

type
required
string

Type of webhook event

required
object (IncomingTransaction)
Array of objects (CounterpartyFieldDefinition)

Information required by the sender's VASP about the recipient. Platform must provide these in the 200 OK response if approving. Note that this only includes fields which UMAaaS does not already have from initial user registration.

Responses

Request samples

Content type
application/json
Example
{
  • "bulkUserImportJob": {
    },
  • "webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000008",
  • "type": "BULK_UPLOAD",
  • "timestamp": "2023-08-15T14:32:00Z"
}

Response samples

Content type
application/json
{
  • "status": 400,
  • "code": "INVALID_INPUT",
  • "message": "string",
  • "details": { }
}

Invitation claimed webhook Webhook

Webhook that is called when an invitation is claimed by a user. This endpoint should be implemented by platform clients of the UMAaaS API.

When a user claims an invitation, this webhook is triggered to notify the platform that:

  1. The invitation has been successfully claimed
  2. The invitee UMA address is now associated with the invitation
  3. The invitation status has changed from PENDING to CLAIMED

This allows platforms to:

  • Track invitation usage and conversion rates
  • Trigger onboarding flows for new users who joined via invitation
  • Apply referral bonuses or rewards to the inviter
  • Update their UI to reflect the claimed status

Authentication

The webhook includes a signature in the X-UMAaas-Signature header that allows you to verify that the webhook was sent by UMAaas. To verify the signature:

  1. Get the UMAaas public key provided to you during integration
  2. Decode the base64 signature from the header
  3. Create a SHA-256 hash of the request body
  4. Verify the signature using the public key and the hash

If the signature verification succeeds, the webhook is authentic. If not, it should be rejected.

Authorizations:
WebhookSignature
Request Body schema: application/json
required
timestamp
required
string <date-time>

ISO8601 timestamp when the webhook was sent (can be used to prevent replay attacks)

webhookId
required
string

Unique identifier for this webhook delivery (can be used for idempotency)

type
required
string

Type of webhook event

required
object (IncomingTransaction)
Array of objects (CounterpartyFieldDefinition)

Information required by the sender's VASP about the recipient. Platform must provide these in the 200 OK response if approving. Note that this only includes fields which UMAaaS does not already have from initial user registration.

Responses

Request samples

Content type
application/json
{
  • "invitation": {
    },
  • "timestamp": "2023-09-01T15:45:00Z",
  • "webhookId": "Webhook:019542f5-b3e7-1d02-0000-000000000008",
  • "type": "INVITATION_CLAIMED"
}

Response samples

Content type
application/json
{
  • "status": 400,
  • "code": "INVALID_INPUT",
  • "message": "string",
  • "details": { }
}

Send a test webhook

Send a test webhook to the configured endpoint

Authorizations:
BasicAuth

Responses

Response samples

Content type
application/json
{}

Invitations

Endpoints for creating, claiming and managing UMA invitations

Create an UMA invitation from a given platform user.

Create an UMA invitation from a given platform user.

Authorizations:
BasicAuth
Request Body schema: application/json
required
inviterUma
required
string

The UMA address of the user creating the invitation

firstName
string

First name of the invitee to show as part of the invite

amountToSend
integer <int64>

An amount to send (in the smallest unit of the user's currency) to the invitee when the invitation is claimed. This is optional and if not provided, the invitee will not receive any amount. Note that the actual sending of the amount must be done by the inviter platform once the INVITATION_CLAIMED webhook is received. If the inviter platform either does not send the payment or the payment fails, the invitee will not receive this amount. This field is primarily used for display purposes on the claiming side of the invitation.

expiresAt
string <date-time>

When the invitation expires (if at all)

Responses

Request samples

Content type
application/json
{
  • "inviterUma": "$inviter@uma.domain",
  • "firstName": "Alice",
  • "amountToSend": 12550,
  • "expiresAt": "2023-09-01T14:30:00Z"
}

Response samples

Content type
application/json
{
  • "code": "019542f5",
  • "createdAt": "2023-09-01T14:30:00Z",
  • "claimedAt": "2023-09-01T14:30:00Z",
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "inviterUma": "$inviter@uma.domain",
  • "inviteeUma": "$invitee@uma.domain",
  • "status": "PENDING",
  • "firstName": "Jane",
  • "amountToSend": {
    }
}

Get a specific UMA invitation by code.

Get a specific UMA invitation by code.

Authorizations:
BasicAuth
path Parameters
invitationCode
required
string

The code of the invitation to get

Responses

Response samples

Content type
application/json
{
  • "code": "019542f5",
  • "createdAt": "2023-09-01T14:30:00Z",
  • "claimedAt": "2023-09-01T14:30:00Z",
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "inviterUma": "$inviter@uma.domain",
  • "inviteeUma": "$invitee@uma.domain",
  • "status": "PENDING",
  • "firstName": "Jane",
  • "amountToSend": {
    }
}

Claim an UMA invitation

Claim an UMA invitation by associating it with an invitee UMA address.

When an invitation is successfully claimed:

  1. The invitation status changes from PENDING to CLAIMED
  2. The invitee UMA address is associated with the invitation
  3. An INVITATION_CLAIMED webhook is triggered to notify the platform that created the invitation

This endpoint allows users to accept invitations sent to them by other UMA users.

Authorizations:
BasicAuth
path Parameters
invitationCode
required
string

The code of the invitation to claim

Request Body schema: application/json
required
inviteeUma
required
string

The UMA address of the user claiming the invitation

Responses

Request samples

Content type
application/json
{
  • "inviteeUma": "$invitee@uma.domain"
}

Response samples

Content type
application/json
{
  • "code": "019542f5",
  • "createdAt": "2023-09-01T14:30:00Z",
  • "claimedAt": "2023-09-01T14:30:00Z",
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "inviterUma": "$inviter@uma.domain",
  • "inviteeUma": "$invitee@uma.domain",
  • "status": "PENDING",
  • "firstName": "Jane",
  • "amountToSend": {
    }
}

Cancel an UMA invitation

Cancel a pending UMA invitation. Only the inviter or platform can cancel an invitation.

When an invitation is cancelled:

  1. The invitation status changes from PENDING to CANCELLED
  2. The invitation can no longer be claimed
  3. The invitation URL will show as cancelled when accessed

Only pending invitations can be cancelled. Attempting to cancel an invitation that is already claimed, expired, or cancelled will result in an error.

Authorizations:
BasicAuth
path Parameters
invitationCode
required
string

The code of the invitation to cancel

Responses

Response samples

Content type
application/json
{
  • "code": "019542f5",
  • "createdAt": "2023-09-01T14:30:00Z",
  • "claimedAt": "2023-09-01T14:30:00Z",
  • "expiresAt": "2023-09-01T14:30:00Z",
  • "inviterUma": "$inviter@uma.domain",
  • "inviteeUma": "$invitee@uma.domain",
  • "status": "PENDING",
  • "firstName": "Jane",
  • "amountToSend": {
    }
}

Sandbox

Endpoints to trigger test cases in sandbox

Simulate sending funds

Simulate sending funds to the bank account as instructed in the quote. This endpoint is only for the sandbox environment and will fail for production platforms/keys.

Authorizations:
BasicAuth
Request Body schema: application/json
required
reference
required
string

The unique reference code that was in the payment instructions

currencyCode
required
string

Currency code for the funds to be sent

currencyAmount
required
integer <int64> > 0

The amount to send in the smallest unit of the currency (eg. cents)

Responses

Request samples

Content type
application/json
{
  • "reference": "UMA-Q12345-REF",
  • "currencyCode": "USD",
  • "currencyAmount": 1000
}

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

Simulate payment send to test receiving a payment

Simulate sending payment from an sandbox uma address to a platform user to test payment receive. This endpoint is only for the sandbox environment and will fail for production platforms/keys.

Authorizations:
BasicAuth
Request Body schema: application/json
required
senderUmaAddress
required
string

UMA address of the sender from the sandbox

receiverUmaAddress
string

UMA address of the receiver (optional if userId is provided)

userId
string

System ID of the receiver (optional if receiverUmaAddress is provided)

receivingCurrencyCode
required
string

The currency code for the receiving amount

receivingCurrencyAmount
required
integer <int64> > 0

The amount to be received in the smallest unit of the currency (eg. cents)

Responses

Request samples

Content type
application/json
{
  • "senderUmaAddress": "$success.usd@sandbox.umaaas.uma.money",
  • "receiverUmaAddress": "$receiver@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "receivingCurrencyCode": "USD",
  • "receivingCurrencyAmount": 1000
}

Response samples

Content type
application/json
Example
{
  • "id": "Transaction:019542f5-b3e7-1d02-0000-000000000004",
  • "status": "CREATED",
  • "type": "INCOMING",
  • "senderUmaAddress": "$sender@external.domain",
  • "receiverUmaAddress": "$recipient@uma.domain",
  • "userId": "User:019542f5-b3e7-1d02-0000-000000000001",
  • "platformUserId": "18d3e5f7b4a9c2",
  • "settledAt": "2023-08-15T14:30:00Z",
  • "createdAt": "2023-08-15T14:25:18Z",
  • "description": "Payment for invoice #1234",
  • "counterpartyInformation": {
    },
  • "receivedAmount": {
    },
  • "reconciliationInstructions": {
    },
  • "rateDetails": {
    },
  • "failureReason": "LNURLP_FAILED"
}

API Tokens

Endpoints to programatically manage API tokens

Create a new API token

Create a new API token to access the UMAaaS APIs.

Authorizations:
BasicAuth
Request Body schema: application/json
required
name
required
string

Name of the token to help identify it

permissions
required
Array of strings (Permission)
Items Enum: "VIEW" "TRANSACT" "MANAGE"

A list of permissions to grant to the token

Responses

Request samples

Content type
application/json
{
  • "name": "Sandbox read-only",
  • "permissions": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "Token:019542f5-b3e7-1d02-0000-000000000001",
  • "name": "Sandbox read-only token",
  • "permissions": [
    ],
  • "clientId": "01947d2284054f890000e63bca4810df",
  • "clientSecret": "ed0ad25881e234cc28fb2dec0a4fe64e4172",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z"
}

List tokens

Retrieve a list of API tokens with optional filtering parameters. Returns all tokens that match the specified filters. If no filters are provided, returns all tokens (paginated).

Authorizations:
BasicAuth
query Parameters
name
string

Filter by name of the token

createdAfter
string <date-time>

Filter users created after this timestamp (inclusive)

createdBefore
string <date-time>

Filter users created before this timestamp (inclusive)

updatedAfter
string <date-time>

Filter users updated after this timestamp (inclusive)

updatedBefore
string <date-time>

Filter users updated before this timestamp (inclusive)

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of results to return (default 20, max 100)

cursor
string

Cursor for pagination (returned from previous request)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string",
  • "totalCount": 0
}

Get API token by ID

Retrieve an API token by their system-generated ID

Authorizations:
BasicAuth
path Parameters
tokenId
required
string

System-generated unique token identifier

Responses

Response samples

Content type
application/json
{
  • "id": "Token:019542f5-b3e7-1d02-0000-000000000001",
  • "name": "Sandbox read-only token",
  • "permissions": [
    ],
  • "clientId": "01947d2284054f890000e63bca4810df",
  • "clientSecret": "ed0ad25881e234cc28fb2dec0a4fe64e4172",
  • "createdAt": "2023-07-21T17:32:28Z",
  • "updatedAt": "2023-07-21T17:32:28Z"
}

Delete API token by ID

Delete an API token by their system-generated ID

Authorizations:
BasicAuth
path Parameters
tokenId
required
string

System-generated unique token identifier

Responses

Response samples

Content type
application/json
{
  • "status": 400,
  • "code": "INVALID_INPUT",
  • "message": "string",
  • "details": { }
}

Available UMA Providers

This endpoint provides a list of counterparties that are available.

This endpoint provides a list of counterparties that are available.

The response includes basic information about each provider, such as its UMA address, name, and supported currencies. This can be used to determine which providers are available for sending or receiving payments.

Authorizations:
BasicAuth
query Parameters
countryCode
string
Example: countryCode=US

The alpha-2 representation of a country, as defined by the ISO 3166-1 standard.

currencyCode
string
Example: currencyCode=USD

The ISO 4217 currency code to filter providers by supported currency.

hasBlockedProviders
boolean

Whether to include providers which are not on your allowlist in the response. By default the response will include blocked providers.

limit
integer [ 1 .. 100 ]
Default: 20

Maximum number of results to return (default 20, max 100)

cursor
string

Cursor for pagination (returned from previous request)

sortOrder
string
Default: "desc"
Enum: "asc" "desc"

Order to sort results in

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "hasMore": true,
  • "nextCursor": "string",
  • "totalCount": 0
}