Payments agent

The Payments Agent CorDapp is hosted by a trusted member of a network, such as the Business Network Operator (BNO). In this technical preview, you can assign the role of Payments Agent to a node on your local network by adding the CorDapp to that node.

Payments Agent and the PSP

In the role of Payments Agent on a network, you are responsible for the connection between your node and the Payment Service Provider (PSP) you are using—in the technical preview, this is Modulr. You must have an account with Modulr in order to act as the Payments Agent, and to make use of this technical preview.

Customers of the Payments Agent

As the Payments Agent, you can consider members of your network who wish to make payments as your customers. In this documentation, any reference to a customer or customer ID refers to members of a network who wish to make payments using Corda Payments with you as their Payments Agent.

Before you can create accounts for a party on your network, you must add them as a customer.

Using the Payments Agent CorDapp, you can manage your customers’ payment accounts and payment requests. You can use the Payments Agent CorDapp endpoints to connect to a UI to perform tasks as required.

Payments Agent flows

The Payments Agent CorDapp provides flows that correspond to API endpoints. You can use these flows to:

CloseAccountDetails

Close an account state on the vault.

Parameters

accountId. The account ID in the vault.

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class CloseAccountDetails(
    private val accountId: PaymentAccountId
) : CloseAccountDetailsInitiator()

Return type

FlowLogic<Unit>

Example

startFlow(
    ::CloseAccountDetails,
    accountId
)

CloseCustomerDetails

Close a customer details state on the vault.

Parameters

customerId: PaymentCustomerId

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class CloseCustomerDetails(
    private val customerId: PaymentCustomerId
) : CloseCustomerDetailsInitiator()

Return type

FlowLogic<CustomerDetailsState>

Example

startFlow(::CloseCustomerDetails, customerId)

CreateAccountDetails

Create a customer account state object in the vault.

Parameters

  • accountName. Account name.
  • currency. Account currency.
  • customerId. Existing customer who will own the account.
  • pspAccountId. Optional. Existing Modulr account to link to.

Flow signature

@StartableByRPC
@Suppress("unused")
class CreateAccountDetails(
    private val accountName: String,
    private val currency: String,
    private val customerId: String,
    private val pspAccountId: String?
) : CreateAccountDetailsInitiator()

Return type

FlowLogic<PaymentAccountDetailsState>

Example

startFlow(
    ::CreateAccountDetails,
    accountName,
    currency,
    customerId,
    pspAccountId
)

CreateCustomerDetails

Create a payment customer details state object in the vault. If the customer already exists then a flow exception is thrown.

Parameters

  • paymentCustomer. Customer name.
  • details. Customer details.

Flow signature

@StartableByRPC
@Suppress("unused")
class CreateCustomerDetails(
    private val paymentCustomer: PaymentCustomer,
    private val details: Map<String, Any>
) : CreateCustomerDetailsInitiator()

Return type

FlowLogic<CustomerDetailsState>

Example

startFlow(::CreateCustomerDetails, customer, details)

GetAccountBalance

Return the AccountBalance for a given accountId. Internal flow logic for use by responder and direct for agent UI interactions.

Parameters

  • accountId. The ID associated with the account.

Flow signature

@StartableByRPC
class GetAccountBalance(
    private val accountId: PaymentAccountId
) : FlowLogic<AccountBalance>()

Return type

FlowLogic<AccountBalance>

Example

startFlow(
    ::GetAccountBalance,
    accountId
)

GetAvailablePSPs

Returns a list of the PSPs that are configured on the Payments application.

Parameters

None.

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class GetAvailablePSPs : FlowLogic<List<String>>()

Return type

FlowLogic<List<String>>

Example

startFlow(::GetAvailablePSPs)

GetCurrenciesOnAgent

Return all currencies provided by the Payments Agent’s PSPs integrations.

Parameters

None.

Flow signature

@StartableByRPC
class GetCurrenciesOnAgent() : FlowLogic<Set<FiatCurrency>>()

Return type

FlowLogic<Set<FiatCurrency>>

Example

startFlow(::GetCurrenciesOnAgent)

GetCustomerAccounts

Return a list of accounts associated with a customer.

Parameters

private val customerId: String

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class GetCustomerAccounts(private val customerId: String) : FlowLogic<List<PaymentAccount>>() {

Return type

FlowLogic<List<PaymentAccount>>

Example

startFlow(::GetCustomerAccounts, customerId)

GetPaymentAccount

Return the PaymentAccount for a given PaymentAccountId. Internal flow logic for use by responder and direct for agent UI interactions.

Will return from local cache map if available; else fetches from vault query, adds to cache, then returns.

Parameters

paymentAccountId: PaymentAccountId

Flow signature

@StartableByRPC
class GetPaymentAccount(private val paymentAccountId: PaymentAccountId) : FlowLogic<PaymentAccount>()

Return type

FlowLogic<PaymentAccount>

Example

startFlow(::GetPaymentAccount, paymentAccountId)

GetPSPAccounts

Return a page of customers managed by the agent on the PSP.

Parameters

Search criteria.

Flow signature

@StartableByRPC
class GetPSPAccounts(
    private val criteria: AccountDetailsCriteria
) : FlowLogic<PagedResponse<AccountDetails>>()

Return type

FlowLogic<PagedResponse<AccountDetails>>

Example

startFlow(::GetPSPAccounts, criteria)

GetPSPCustomers

Return a page of customers managed by the agent on the PSP.

Parameters

Search criteria.

Flow signature

@StartableByRPC
class GetPSPCustomers(
    private val criteria: CustomerDetailsCriteria
) : FlowLogic<PagedResponse<CustomerDetails>>()

Return type

FlowLogic<PagedResponse<CustomerDetails>>

Example

startFlow(::GetPSPCustomers, criteria)

GetPSPSpecification

Returns a PSP specification.

Parameters

private val psp: String

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class GetPSPSpecification(private val psp: String) : FlowLogic<PSPSpecification>()

Return type

FlowLogic<PSPSpecification>

Example

startFlow(::GetPSPSpecification, psp.toUpperCase())

GetTransactions

Return the transaction history of an account.

Parameters

  • accountId: String. The account ID.
  • criteria: PaymentTransactionCriteria.

Flow signature

@StartableByRPC
@StartableByService
@Suppress("unused")
class GetTransactions(
    private val accountId: String,
    private val criteria: PaymentTransactionCriteria
) : FlowLogic<PagedResponse<PaymentTransaction>>()

Return type

FlowLogic<PagedResponse<PaymentTransaction>>

Example

startFlow(::GetTransactions, accountId, criteria)

UpdateCustomerDetails

Update a payment customer details state object in the vault.

Parameters

customerId. Customer Id. details. Customer details. deleted. Customer details to be deleted.

Flow signature

@StartableByRPC
@Suppress("unused")
class UpdateCustomerDetails(
    private val customerId: PaymentCustomerId,
    private val details: Map<String, Any>,
    private val deleted: List<String> = emptyList()
) : UpdateCustomerDetailsInitiator()

Return type

FlowLogic<CustomerDetailsState>

Example

startFlow(
  ::UpdateCustomerDetails,
  customerId,
  details,
  deleted
)

Was this page helpful?

Thanks for your feedback!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.

We're sorry this page wasn't helpful. Let us know how we can make it better!

Chat with us

Chat with us on our #docs channel on slack. You can also join a lot of other slack channels there and have access to 1-on-1 communication with members of the R3 team and the online community.

Create an issue

Create a new GitHub issue in this repository - submit technical feedback, draw attention to a potential documentation bug, or share ideas for improvement and general feedback.

Propose documentation improvements directly

Help us to improve the docs by contributing directly. It's simple - just fork this repository and raise a PR of your own - R3's Technical Writers will review it and apply the relevant suggestions.