Skip to main content

Order Expiration, Late Payment & Webhook Behavior Guide

Written by Emy Huang

Due to on-chain network congestion, gas fee fluctuations, or user delays, merchants may encounter situations where a user completes payment after an order has already expired (late payment), or only pays a partial amount (partial payment). To protect merchant funds and provide flexible order handling, Infini offers a well-defined Order Status system, Exception Tags, and real-time Webhook notifications.

This guide explains the core business logic for expired orders, late payments, and partial payments, and shows merchants how to correctly parse Webhook data for accurate reconciliation and order processing.

1. Order Status & Exception Tag Definitions

When integrating with the Infini payment gateway, it is important to distinguish between two separate dimensions: Order Status and Exception Tags. Order Status reflects the main lifecycle stage of an order, while Exception Tags are supplementary markers that flag special or abnormal on-chain payment behavior.

1.1 Order Status

Order Status is the core database field that records the final processing state of an order. Merchants can retrieve it via the Query Order API (GET /v1/acquiring/order) or by listening to Webhook events.

Value

Description

pending

Order created, awaiting on-chain payment from the user.

processing

On-chain payment detected, but funds are not yet fully confirmed (e.g., partial funds received or awaiting block confirmations).

paid

Order fully paid; funds successfully confirmed and credited.

partial_paid

Order expired with only partial payment received; the amount did not meet the required order total.

expired

Order expired with no payment received.

1.2 Exception Tags

On-chain payments are irreversible and subject to delays, which can lead to various abnormal situations. Infini provides exception tags (exception_tags) to assist merchants with customer service, financial reconciliation, and risk management.

Important: Exception tags are supplementary markers only. They never affect the order's main status, and a single order can carry multiple exception tags simultaneously.

Tag Name

Description

late

Late payment. The user completed payment after the order had already expired. This is distinct from the expired status (expired with no payment received).

2. Core Scenario Breakdown

The following sections provide a detailed breakdown of the two key abnormal payment scenarios: late payment and partial payment, covering their business behavior, data changes, and Webhook behavior.

2.1 Late Payment Scenario

A late payment occurs when a user fails to complete payment within the order's validity window, but the funds still arrive at Infini's receiving address within a grace period after expiration.

  • Grace Period: Infini provides a default 24-hour grace period. If a user completes payment within 24 hours after order expiration, the funds will still be credited to the merchant's account balance.

  • Order Status: Even though the funds are successfully received, the order status remains expired — it will not be reversed to paid.

  • Exception Tag: The system automatically appends the late exception tag to the order.

  • Webhook Behavior:

    • The system will continue to send Webhook notifications to the merchant.

    • The status field in the Webhook payload remains expired.

    • The amount_confirmed field is updated to reflect the actual amount received.

    • The exception_tags array will include "late".

2.2 Partial Payment Scenario

A partial payment occurs when a user initiates a payment but the amount paid is less than the order's required total, and the order ultimately expires.

  • Order Status: When the order reaches its expiration time with a received amount greater than zero but less than the required total, the status changes to partial_paid.

  • Webhook Behavior:

    • The system sends a Webhook notification with status set to partial_paid.

    • The amount_confirmed field reflects the actual partial amount received.

3. Integration Best Practices

To avoid missed orders, duplicate fulfillment, or reconciliation discrepancies caused by abnormal on-chain payments, merchants are advised to follow the practices below.

3.1 Parse Webhook Holistically

When handling Webhook callbacks, do not rely solely on the status field to decide whether to fulfill an order. Always evaluate status, exception_tags, and amount_confirmed together.

// Example Webhook payload for a Late Payment {   "event": "order.updated",   "order_id": "ord_123456789",   "amount": "100.00",   "amount_confirmed": "100.00",   "status": "expired",   "exception_tags": ["late"],   "timestamp": 1716710400 }

3.2 Recommended Handling Logic

When your server receives a Webhook from Infini, use the following decision table to determine the appropriate business action:

status

exception_tags contains late

amount_confirmed fully paid

Recommended Action

Case Notes

paid

No

Yes

Fulfill the order. Payment was completed in full within the validity window.

The merchant's Infini account has received the full order amount. Proceed to fulfill for the customer.

expired

Yes

Yes

Handle late receipt. Funds have been credited but the order was already expired. Depending on your business policy: (1) Auto-fulfill the order (recommended); or (2) Refund the payment and notify the customer.

The customer paid after order expiration, but funds still arrived. The merchant decides how to proceed — no need to contact Infini.

partial_paid

No

No

Handle partial payment. The order expired with insufficient funds. Do not fulfill. The merchant should contact the customer directly to collect the remaining balance or arrange a refund.

The merchant received only partial funds. This is handled directly between the merchant and the end customer — no need to contact Infini support.

expired

No

No

No action required. The order expired normally with no payment received.

Order timed out with no funds received. No action needed.

4. FAQ

Q1: Why does the order status still show expired even though the customer already paid?

A: This happens because the payment was made after the order's validity window had closed (e.g., the 15- or 30-minute payment window).

To maintain transaction integrity, the system does not reverse an expired order status. However, within the 24-hour grace period, the funds will still be safely credited to your account and the late tag will be applied.

Q2: Will Webhooks still be sent for a late payment?

A: Yes. Even though the order status remains expired, the system will still trigger a Webhook when the funds are confirmed. The amount_confirmed field will be updated to the actual amount received, and exception_tags will include "late".

Q3: Can I rely entirely on the Webhook event and status to determine the payment state, or should I also follow the exception tag logic?

A: To avoid missed orders, we strongly recommend combining exception_tags and amount_confirmed in your processing logic — do not rely on status alone.

If you only trigger fulfillment when status == "paid", you will miss all late payment orders and risk customer complaints.

By also handling the case where status == "expired" and exception_tags contains "late", you can automate fulfillment for late payments and significantly reduce manual support workload.

V. Contact Us

If you have any questions or feedback regarding the API integration feature, please feel free to contact our support team through customer service channels. Click the small green phone icon in the bottom right corner of the Infini system and select [Message] to contact us.

Disclaimer: Infini provides technology and payment infrastructure services. Financial and payment services are delivered by licensed partner institutions and are subject to applicable laws and regulations. Service availability and scope may vary by region. This content is for reference only and does not constitute any commitment or investment advice. The service is not available in Mainland China, the United States, or other restricted jurisdictions.

Did this answer your question?