Introduction

This guide explains how to effectively use Two's POST /v1/order_intent endpoint. This endpoint allows you to check in advance whether Two is likely to approve a buyer for invoice payment before an actual order is created. Integrating this step can significantly enhance your checkout process by providing early insights into creditworthiness, enabling you to make informed decisions about offering "Pay by Two" as a payment method.Leveraging the order_intent endpoint is a best practice for a smoother buyer experience and more predictable order processing.

Why Use Order Intent?

The POST /v1/order_intent endpoint serves as a preliminary credit assessment tool. When you send details about a potential buyer and their intended purchase, Two performs a real-time risk evaluation. The core of the response is a boolean (approved: true or approved: false), indicating the likelihood of credit approval for a subsequent, formal order.

Key Advantages:

  • Enhanced Buyer Experience: By checking credit likelihood upfront, you can conditionally display "Pay by Two." If the intent is not approved, you can hide this option, preventing buyers from selecting a payment method that would ultimately be declined. This avoids a frustrating situation where a buyer completes a checkout, only to have their chosen payment method fail at the final hurdle (the POST /v1/order call).
  • Reduced Integration Complexity: If an order_intent is approved: false, you can guide the buyer to alternative payment methods immediately, rather than creating an order that will be REJECTED for credit. As outlined in our Order Creation Path guide, a REJECTED order cannot proceed to verification or fulfilment.
  • Optimized API Usage: Avoids unnecessary POST /v1/order calls for buyers who are unlikely to be approved for credit, streamlining your integration.
  • Improved Approval Accuracy with Detailed Data: The order_intent schema mirrors the POST /v1/order schema. Providing comprehensive and accurate data—especially detailed line_items, buyer.representative information, and the correct gross_amount—allows Two to perform a more precise assessment, generally leading to more reliable intent responses and higher approval rates for subsequent orders.

Recommended Integration Flow

For the most effective use of order_intent, consider this sequence in your checkout or order creation process:
  1. Buyer Finalizes Basket: The buyer assembles their cart or order details.
  2. Gather Intent Data: Collect all necessary information for the order_intent call, mirroring what you would send for a POST /v1/order request. This includes full buyer company details, representative information, complete line items, and accurate total amounts.
  3. Call POST /v1/order_intent: Send the request to Two.
  4. Evaluate Response & See it in Action:
    • If approved: true: Confidently display "Pay by Two" as a payment option. Store the returned tracking_id.

      Order Intent Approved GIF

    • If approved: false: Hide or disable "Pay by Two" for this transaction and prompt the buyer to select an alternative payment method.

      Order Intent Rejected GIF

  5. Proceed to Order Creation (if approved): If the buyer selects "Pay by Two" (after a successful order_intent), proceed to call POST /v1/order. Include the tracking_id from the order_intent response in your POST /v1/order request to link the two.

This flow ensures that an order is only created with Two if there's a high probability of credit approval, leading to a smoother journey for the buyer. This is an example of how to deal with the order intent decision in a standard checkout flow, but this conditional consideration can be extended to however you shape your integration solution.

How to Use the v1/order_intent Endpoint

1. Gather Necessary Information

To make an order_intent request, you'll need to gather relevant information about the prospective buyer and the potential order. The closer this data matches the eventual POST /v1/order request, the more reliable the intent assessment will be.

Key pieces of information include:

  • Buyer Details (buyer object):
    • company: company_name, organization_number, country_prefix. (Tip: Use Two's Company API to get verified company details first).
    • representative: first_name, last_name, email, phone_number.
  • Order Details:
    • gross_amount: The total amount of the potential order, including all taxes and charges.
    • currency: The currency of the transaction (e.g., "GBP", "USD", "EUR").
    • line_items (Highly Recommended and Crucial for Accuracy): An array of objects, each detailing a product or service. Include fields like name, description, quantity, unit_price, net_amount, tax_amount, tax_rate, and gross_amount for each item.
  • Merchant Information:
    • merchant_id: Your unique merchant identifier provided by Two.
Refer to the POST /v1/order_intent API specification for a complete list of required and optional parameters.

2. Make the API Request

Construct a JSON request body with the gathered information and send it to the POST /v1/order_intent endpoint.

Example Request Snippet (Conceptual):

Copy
Copied
{
    "gross_amount": "120.00",
    "currency": "GBP",
    "buyer": {
        "company": {
            "company_name": "Example Corp Ltd",
            "organization_number": "12345678",
            "country_prefix": "GB"
        },
        "representative": {
            "first_name": "Jane",
            "last_name": "Doe",
            "email": "jane.doe@examplecorp.com",
            "phone_number": "+447123456789"
        }
    },
    "line_items": [
        {
            "name": "Premium Widget",
            "description": "High-quality widget for industrial use",
            "quantity": "2",
            "unit_price": "50.00",
            "net_amount": "100.00",
            "tax_rate": "0.20",
            "tax_amount": "20.00",
            "gross_amount": "120.00",
            "type": "PHYSICAL"
            // ... other line item details as per schema
        }
    ],
    "merchant_id": "your-unique-merchant-id",
    "order_origination": "ONLINE"
}

3. Interpret the Response

The API will respond with a JSON object. The most critical field is approved.
  • approved: true: Indicates that, based on the provided information, Two is likely to approve a formal order for this buyer and amount. You can confidently display "Pay by Two" as a payment option. The response will also include a tracking_id. It is crucial to store this tracking_id as it should be passed in the subsequent POST /v1/order request.
  • approved: false: Suggests that Two is unlikely to approve a formal order under the current conditions. You should hide "Pay by Two" for this transaction and guide the buyer to alternative payment methods.

Example Response Snippet (Conceptual):

Copy
Copied
{
    "approved": true,
    "tracking_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
    "decline_reason": null
}

Important Considerations

  • Accuracy is Key: The order_intent assessment is only as good as the data provided. Ensure the information, particularly gross_amount, line_items, and buyer details, accurately reflects the intended order. Discrepancies between the order_intent and the actual POST /v1/order can lead to different outcomes.
  • Strong Indicator, Not an Absolute Guarantee: While an approved: true from order_intent is a very reliable signal, the final, binding credit decision is made during the POST /v1/order call. Minor shifts in risk assessment or significant differences between the intent and order data could, in rare cases, change the outcome.
  • Utilize the tracking_id: Always pass the tracking_id from an approved order_intent response into the corresponding POST /v1/order request. This links the preliminary check to the formal order, aiding Two's processes and providing a better audit trail.
  • Session-Based Assessment: The order_intent response is typically valid for the current checkout session. If significant time passes or details change substantially, it's advisable to make a new order_intent call.

Conclusion

Integrating the POST /v1/order_intent endpoint into your B2B sales process is a strategic move towards a more seamless and reliable checkout experience. It empowers you to proactively manage credit risk, enhance buyer satisfaction by setting clear expectations, and streamline your integration with Two. By following the recommended flow and providing accurate, detailed information, you can leverage order_intent to make "Pay by Two" a more predictable and user-friendly option for your customers.