Loan

πŸ“˜

For all our existing clients using our V1, Loans are replacing Advances. Advance endpoints will still work during sometime and you will be notified several months before the final deprecation.

Definition

This is our core feature: by creating an Loan, you will ask Aria to finance an Invoice that was sent to your client (Debtor). For each uploaded Invoice, you are able to create as much as Loans you need.

Before creating a Loan :

  • Make sure the User (supplier) you want to pay is created
  • Make sure the Invoice you asked Aria to finance is created

Payment

Based on the type of currency you want to use, various payment options are accessible. The full range of these can be found here: Currencies and Payment Methods.

By default, a User will always be paid on the payment destination set during its creation. However, you are able to specify a new payment destination for every Loan you create.

Extra attachments

According to your invoicing flow, an extra Invoice or other proof might be necessary (the required attachments are defined during your onboarding process). If the attachment is closely related to the payment, you may upload the additional attachment in your Loan.

Validation

When the Loan is created, automated checks are made to verify the information consistency and the debtor solvability.

We provide 11 status:

  • CREATED: The Loan has not been validated yet by Aria.
  • BLOCKED: The Loan has been blocked by Aria and you need to fix the issue. This means we expect action from you before making a decision.
  • ACCEPTED: The Loan has been validated by Aria but it has not been sent to our banking provider yet.
  • REFUSED: We refused the Loan because of the information filled or the debtor solvability.
  • CANCELED: You decided to cancel a CREATED, BLOCKED or ACCEPTED Loan.

πŸ“˜

BLOCKED and REFUSED status always comes with one or multiple reasons: See the full list.

We strongly recommend not integrating automatic workflows using reasons as they might change over time.

  • PAYMENT_ORDERED: The order has been transferred to our banking provider, the transaction is not yet on the SEPA network.
  • TO_REPAY: The transaction has been sent into the SEPA network. We are waiting for a repayment for this Loan.
  • REPAID: We received a repayment and it was enough to note this Loan as repaid.
  • PAST_DUE: The repayment of the Loan is late. We did not received a sufficient repayment to note this Loan as repaid.
  • PAYMENT_FAILED: The payment transferred to our Payment Service Provider has failed. Aria Support Team will contact you.
  • PAYMENT_RETRY_REQUESTED: Someone asked to retry a failed payment by setting a new payment destination. That could be you or our support team.
  • PAYMENT_CANCELED: We canceled the payment after agreeing with you to do so.
Loan Lifecycle

Loan Lifecycle

You can cancel a Loan if it didn't pass the `PAYMENT_ORDERED` status using the API

A Loan can be canceled if it is not in REFUSED status and has not yet reached PAYMENT_ORDERED.

Rules

The sum of all Loans linked to the financed Invoice can not be greater that the amount of the Invoice. Loans in REFUSED, PAYMENT_CANCELED status are not concerned by this rule.

Webhook payload

When a loan is created, updated, or deleted, the payload will have this schema:

{
    "date": Date,
    "event": "loan.created",
    "payload": {
        id: string,
        status: string,
        currency: string,
        amount: number,
        beneficiaryIdentifier: Identifier,
        quoteId: string | null,
        invoiceId: string | null,
        repaymentReference: string | null,
        attachments: Attachments[],
        createdAt: string,
        acceptedAt: string | null,
        refusedAt: string | null,
        canceledAt: string | null,
        paymentOrderedAt: string | null,
        paymentFailedAt: string | null,
        paymentFailureReasons: Object | null,
        paidAt: string | null,
        repaidAt: string | null,
        dueDate: string,
        payoutLabel: string | null,
        payoutIBAN: string | null,
        activeBlockReasons?: Array<{ code: string; description?: string }> | null,
        refusalReasons?: Array<{ code: string }> | null
    }
}