Definition

This is our core concept: by requesting an Loan, you are asking Aria to advance payment for an Invoice or a Receivable issued to the Debtor.

πŸ“˜

Despite its name, this endpoint manages advance payments on invoices, not traditional loans. The term "Loan" has no legal or accounting implications, as our primary service is invoice factoring.

For each created Invoice, you can attach one or many Loans.

For each created Receivable, you can attach one Loan.

Before creating a Loan :

  • Make sure the User you want to pay is created
  • Make sure the Invoice or the Receivable 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.

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 created and needs to be validated by Aria.
  • BLOCKED: The Loan has been blocked by Aria and there is something to be fixed by you or one of the counterparties. 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 still pending on their side.
  • 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's not REFUSED and has not yet reached PAYMENT_ORDERED.

Rules

The sum of all Loans linked to the financed Invoice or Receivable 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,
        receivableId: 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
    }
}

What’s Next