LogoLogo
System Status
  • Digital River API
  • Getting started
  • Using our services
    • Local pricing
    • Item classification
    • Subscriptions
    • e-Invoicing
  • Integration options
    • Low-code checkouts
      • Implementing a Prebuilt Checkout
      • Implementing a Components checkout
      • Offering local pricing
      • Using a shipping endpoint
      • Processing subscription acquisitions
      • Adding custom fields
      • Offering store credit
      • Displaying policies and getting consent
      • Collecting e-invoice information
      • Handling completed checkout-sessions
    • Direct integrations
      • Standard flow
      • Building checkouts
        • Checking out guest and registered customers
        • Describing line items
          • Setting the price of an item
          • Managing items with shared SKU identifiers
        • Providing address information
        • Handling shipping choice
        • Tax identifiers
        • Applying a discount
        • Setting the customer type
        • Providing the IP address
        • Selecting a currency
        • Initiating a charge
        • Setting the purchase location
        • Configuring taxes
        • Accessing regulatory fee information
        • Localizing invoices and credit memos
        • Providing an upstream identifier
        • Applying store credit
        • Handling e-invoicing requirements
        • Landed cost
        • Tax calculation inputs
        • Selling entities
        • Payment sessions
        • Applying store credit (legacy)
        • Country specs
      • Building payment workflows
        • Handling redirect payment methods
        • Handling delayed payment methods
      • Subscription acquisitions
        • Handling subscription acquisitions
        • Handling external subscription acquisitions
        • Subscription information
      • Digital River coordinated fulfillments
        • Checking inventory levels
        • Using shipping quotes
        • Reserving inventory items
        • Managing a fulfillment order
        • Cancelling a fulfillment order
    • Connectors
  • Order management
    • Processing orders
    • Handling a rejected order
    • Accessing invoices and credit memos
    • Fulfilling goods and services
    • Capturing and cancelling charges
    • Payment reauthorizations
    • Handling reversals
      • Return basics
        • Digital River coordinated returns
        • Third party coordinated returns
      • Refund basics
        • Issuing refunds
        • Refunding asynchronous payment methods
      • Disputes and chargebacks
    • Customer notifications
    • Responding to events
      • Events
        • Key event types
        • All event types
      • Webhooks
        • Creating a webhook
        • Digital River API safelist
        • Digital River signature
      • Expanding events
      • Preventing webhooks from getting disabled
    • Distributor model
  • Subscription Management
    • Managing a subscription
    • Managing an external subscription
  • Payments
    • Payment solutions
      • Drop-in payments
        • How Drop-in payments work
        • Drop-in payments integration guide
      • DigitalRiver.js with Elements
        • Elements integration guide
        • Configuring payment methods
          • Configuring Afterpay
          • Configuring Alipay+ (cross-border)
          • Configuring Alipay (domestic)
          • Configuring Amazon Pay
          • Configuring Apple Pay
          • Configuring Bancontact
          • Configuring BNP Paribas
          • Configuring BLIK
          • Configuring CCAvenue
          • Configuring Clearpay
          • Configuring Credit Cards
          • Configuring FPX Online Banking
          • Configuring Google Pay
          • Configuring iDEAL
          • Configuring Klarna
          • Configuring Konbini
          • Configuring Online Banking (IBP)
          • Configuring Online Banking (Korea Bank Transfer)
          • Configuring PayCo
          • Configuring PayPal
          • Configuring SEPA Direct Debit
          • Configuring Trustly
          • Configuring Wire Transfer
          • Common payment sources
          • Common payment objects
    • Supported payment methods
      • Afterpay
      • Alipay (domestic)
      • Alipay+ (cross-border)
      • Amazon Pay
      • Apple Pay
      • Bancontact
      • BNP Paribas
      • BLIK
      • CCAvenue
      • Clearpay
      • Credit Cards
      • FPX Online Banking
      • Google Pay
      • iDEAL
      • Klarna
      • Konbini
      • Korea Bank Transfer (Online Banking)
      • Online Banking (IBP)
      • Pay with Installments France
      • PayCo
      • PayPal
      • PayPal Billing Agreement
      • PayPal Credit
      • PayPal Pay in 3
      • PayPal Pay in 4
      • PayPal RatenZahlung (Installment Payment)
      • SEPA Direct Debit
      • Trustly
      • Wire Transfer
    • Source basics
      • Managing sources
      • Handling credit card sources
      • Retrieving sources
    • Authorization declines
    • PSD2 and SCA
      • How to ensure SCA compliance
    • Payment testing scenarios
  • Product management
    • Product basics
    • Managing SKUs
    • Using product details
    • Grouping SKUs
    • SKU-inventory item pairs
    • Managing inventory items
    • Regulatory fees
      • What are regulatory fees?
        • Fees terminology
        • Regulatory fee management
        • European regulatory fees
        • Compliance obligations
        • WEEE directive requirements
        • Copyright directive requirements
        • Compliance challenges
      • Managing regulatory fees
  • Customer management
    • Customer basics
    • Creating and updating customers
    • Setting up tax exemptions
    • Recording a customer's request to be forgotten
  • Financial reporting
    • Financials basics
    • Sales transactions
      • Returning a list of sales transactions
      • Getting a sales transaction by ID
    • Sales summaries
      • Returning a list of sales summaries
      • Getting a sales summary by ID
    • Payouts
      • Returning a list of payouts
      • Getting a payout by ID
      • Get a list of transactions included in payout by ID
  • Developer resources
    • Digital River API reference
    • DigitalRiver.js reference
      • Including DigitalRiver.js
      • Initializing DigitalRiver.js
      • DigitalRiver object
      • Elements
        • Amazon Pay element
        • Apple Pay elements
        • Google Pay elements
        • IBAN element
        • iDEAL element
        • Konbini elements
        • Compliance element
        • Offline Refund elements
        • Online Banking elements
        • Tax Identifier element
        • Invoice attribute element
        • Delayed Payment Instructions element
        • PayPal elements
      • Guidelines for capturing payment details
      • Security
      • Digital River payment objects
      • Error types, codes, and objects
    • DigitalRiverCheckout.js reference
      • Including DigitalRiverCheckout.js
      • Initializing DigitalRiverCheckout.js
        • DigitalRiverCheckout configuration object
      • DigitalRiverCheckout object
        • Configuring Prebuilt Checkout
          • Performing actions
          • Defining experience
        • Components
          • Configuring components
          • Address component
          • Shipping component
          • Tax identifier component
          • Invoice component
          • Wallet component
          • Payment component
          • Compliance component
          • Order summary component
          • Thank you component
        • Rendering a checkout button
          • Performing actions on the checkout button
        • Determining the checkout's status
      • Accessing country and currency
    • DynamicPricing.js reference
    • Postman collection
  • administration
    • Sign in
    • Digital River Dashboard
      • Digital River Dashboard quick start guide
      • Key features
      • Reset your password
      • Test and production environments
      • Account
        • Adding an account
        • Switching accounts
        • Account access
      • Profile settings
        • Viewing your personal information
        • Changing your password
        • Updating your phone number
        • Enabling multi-factor authentication
      • Finance
        • Payouts
          • Viewing your payout details
          • Filtering your payouts
          • Exporting your payouts
        • Sales summaries
          • Viewing your sales summaries details
          • Filtering your sales summaries
          • Exporting your sales summaries
          • Exporting your sales summary details
        • Transactions
          • Viewing your transaction details
          • Filtering your transactions
          • Exporting your transactions
      • Order management
        • Orders
          • Searching for orders
          • Filtering your orders
          • Viewing the order details
          • Cancelling items
          • Fulfilling items
          • Downloading an invoice
          • Downloading a credit memo
          • Creating shipping labels
          • Recording a customer's request to be forgotten
          • Viewing returns and refunds
          • Creating a return
          • Accepting a return
          • Creating a refund
          • Viewing the order's timeline
        • Checkouts
          • Searching for checkouts
          • Filtering your checkouts
          • Viewing the checkout details
        • Prebuilt Checkout links
          • Generate Prebuilt Checkout links
          • View and work with Prebuilt Checkout link details
          • Add a customer during Prebuilt Checkout
          • Add a product during Prebuilt Checkout
      • Customers
        • Viewing customer details
        • Searching for customers
        • Filtering your customers
        • Editing account information
        • Adding a customer
        • Tax IDs and certificates
          • Adding a tax certificate
          • Adding a tax ID
          • Deleting a tax ID
        • Metadata
          • Adding metadata
          • Editing metadata
        • Manage subscriptions from the Customer Details page
        • Disabling a customer
        • Recording a customer's request to be forgotten
        • Deleting a customer
      • Catalog
        • SKUs
          • Viewing the SKU details
          • Searching for SKUs
          • Filtering your SKUs
          • Adding a SKU
          • Editing a SKU
          • Deleting a SKU
          • Adding a fee to a SKU
          • Editing a fee
          • Deleting a fee
          • Viewing product tariff codes
        • Managing customer subscriptions from Digital River Dashboard
      • Developers
        • API keys
          • Updating your API version
          • Getting your API keys
          • Changing the API version for your key
          • Creating a restricted key
          • Editing a restricted key
          • Deleting a restricted key
          • Rotating keys
        • Webhooks
          • Creating a webhook
          • Editing a webhook
          • Deleting a webhook
          • Rotating a webhook's secret
        • API logs
          • Filtering the API log
          • Viewing the API log details
        • Event logs
          • Filtering the events log
          • Viewing the event details
      • Settings
        • Users and roles
          • Roles
          • Searching for a user by name or email
          • Filtering your users and roles
          • Adding a user
          • Editing a user
          • Deleting a user
        • Prebuilt Checkout
        • Payment methods
          • Viewing your payment methods
          • Viewing payment method details
            • Enabling currencies
            • Managing countries
          • Enabling or disabling a payment method
  • General Resources
    • eCompass
    • eCompass documentation
    • Release notes
      • 2024
      • 2023
      • 2022
      • 2021
      • 2020
      • 2019
    • Standards and certifications
      • Certification process
      • Compliance requirements
      • Documentation requirements
      • Integration checklists
        • Admin portal
        • Products and SKUs
        • Customers and tax exemptions
        • Checkouts, payment sources, and orders
        • Disclosures, compliance statements, and emails
        • Fulfillments and cancellations
        • Customer portal
        • Order refund synchronization
        • Reversals
        • Error handling
      • Test and use cases
    • Commerce infrastructure
    • Versioning
    • Glossary
Powered by GitBook
On this page
  • Receiving the necessary events
  • Third-party coordinated fulfillments
  • Digital River coordinated fulfillments
  • Defining fulfillments
  • Fulfilled and cancelled items
  • Shipment identifiers
  • Tracking data
  • Submitting payment capture and cancellation requests
  • Handling fulfillment-related events
  • Fulfillment created event
  • Charge capture complete and failed events
  • The charge cancel success event
  • The order fulfilled event
  • The order complete event
  1. Order management

Capturing and cancelling charges

Learn how to inform Digital River that products are fulfilled or cancelled so that we can attempt to capture or cancel payment

PreviousFulfilling goods and servicesNextPayment reauthorizations

Last updated 2 months ago

Once you , and , you can use the to notify Digital River of fulfilled and/or cancelled items. Each time you and a request, you inform our payment services how many items in an are fulfilled and/or cancelled. We then use that information to or the appropriate amount of an order's payment .

Once you submit a POST /fulfillments, your integration should also be set up to .

Receiving the necessary events

Before you submit a request, you must first receive and handle the necessary events. The specific events you must process depend on the order's :

Upstream requirement
Digital River coordinated fulfillments (distributed model)
Digital River coordinated fulfillments (orchestrated model)
Third party coordinated fulfillments

✔

✔

✔

✔

Third-party coordinated fulfillments

In , you need to or receive an in an state.

In most integrations, you respond to this order state change by sending a fulfillment request to your logistics partner, and when the products are shipped, your partner sends you a shipment notification. You should respond to this notification by with the quantity of each shipped line item and then .

Similarly, when an item is successfully cancelled, your fulfiller typically sends you a cancelled shipment notification. Respond to this notification by with the cancelQuantity of each cancelled line item and then .

Digital River coordinated fulfillments

In , the specific events you must process depend on whether you use the distributed or orchestrated models.

Distributed model

In the , you need to handle an order by . You must then wait to receive a event before handling that by with the quantity of each shipped line item and then .

Orchestrated model

Defining fulfillments

Fulfilled and cancelled items

In the request's items array, you specify each line item's unique identifier and the quantity fulfilled and/or cancelled. The request doesn't need to specify both a quantity and cancelQuantity, but it must contain one or the other.

If you specify a quantity, thereby informing our payment services that these items are fulfilled, we attempt to capture the appropriate amount of the payment charge. Conversely, if you specify a cancelQuantity, we attempt to cancel the relevant charge amount.

Shipment identifiers

Tracking data

You can also include information on the name of the trackingCompany, the trackingNumber provided by the shipping carrier, and the trackingUrl that customers use to monitor the shipment.

Submitting payment capture and cancellation requests

curl --location --request POST 'https://api.digitalriver.com/fulfillments' \
...
--data-raw '{
  "orderId": "231388420336",
  "items":
    [
      {
        "itemId": "158140150336",
        "quantity": "2"
      }
    ]
}'
{
    "id": "ful_14776912-d0ff-4f11-974f-17b0f2830ea2",
    "createdTime": "2022-07-01T17:55:58Z",
    "items": [
        {
            "quantity": 2,
            "cancelQuantity": 0,
            "skuId": "b0fd7334-8f7d-424e-b535-308fae972461",
            "itemId": "158140150336"
        }
    ],
    "orderId": "231388420336",
    "liveMode": false
}

Handling fulfillment-related events

Fulfillment created event

{
    "id": "5203007c-c3e9-47f0-a5aa-51e512fbd3ea",
    "type": "fulfillment.created",
    "data": {
        "object": {
            "id": "ful_c34fd193-94a6-469f-89c2-fd09f50827be",
            ...
            "shipmentId": "100002369153",
            "trackingCompany": "Fedex",
            "trackingNumber": "Z10100002632653",
            "trackingUrl": "http://www.fedex.com/Tracking?tracknumbers=Z10100002632653",
            ...
        }
    },
    ...
}

In this case, you could use the event to trigger a shipped notification to the customer (typically an email) that contains this tracking information and/or add it to the customer's order management page.

Charge capture complete and failed events

Successful charge captures

{
    "id": "f275be0a-45fd-4160-8a31-b3274b6a4f8b",
    "type": "order.charge.capture.complete",
    "data": {
        "object": {
            "id": "b67136cc-0b2e-43f7-8d9a-362047aa975a",
            "createdTime": "2022-03-02T16:50:23Z",
            "currency": "USD",
            "amount": 37.81,
            "state": "capturable",
            "orderId": "218377480336",
            "captured": true,
            "captures": [
                {
                    "id": "b496b7b2-3bc7-49cd-ab48-f91b2f2e37cc",
                    "createdTime": "2022-03-02T16:50:37Z",
                    "amount": 25.21,
                    "state": "complete",
                    "fulfillmentId": "ful_a0246997-bdcf-480a-a066-2cfc564e6232"
                }
            ],
            "refunded": false,
            "sourceId": "52ca4456-5547-4f9c-8016-1a067fd0b125",
            "paymentSessionId": "7c121712-2ae8-4617-97a2-5d41fd79a5b8",
            "type": "customer_initiated",
            "liveMode": false
        }
    },
    "liveMode": false,
    "createdTime": "2022-03-02T16:52:01.180061Z",
    ...
    "digitalriverVersion": "2021-12-13"
}

You can handle this event by notifying customers of the amount captured, the payment method used to make the capture, relevant product details, and any shipment tracking information that may be available.

The event's captures[].amount and captures[].createdTime provides the data you need to inform customers how much and when they were charged.

In this example, the customer used a credit card, so from the 200 OK response you'd most likely retrieve creditCard.brand and creditCard.lastFourDigits.

{
    "id": "52ca4456-5547-4f9c-8016-1a067fd0b125",
    "createdTime": "2022-03-02T16:49:48Z",
    "type": "creditCard",
    "reusable": false,
    "state": "consumed",
    ...
    "clientSecret": "52ca4456-5547-4f9c-8016-1a067fd0b125_ae8fb67f-bcf4-49ac-9a6d-3427ce5d5f20",
    "creditCard": {
        "brand": "Visa",
        "expirationMonth": 7,
        "expirationYear": 2027,
        "lastFourDigits": "1111"
    },
    "liveMode": false
}
200 OK
{
    "id": "ful_e2713c40-1c9e-4c47-a047-7344a4ea34c4",
    "createdTime": "2022-07-01T18:30:59Z",
    "items": [
        {
            "quantity": 2,
            "cancelQuantity": 0,
            "skuId": "eecf60da-b082-47eb-9a3f-602820f22ed9",
            "itemId": "158140510336"
        }
    ],
    "orderId": "231388760336",
    "liveMode": false,
    "chargeOperationIds": [
        "9f1367e8-531c-4ca9-ac2d-8b940cf074f9"
    ],
    "orderDetails": {
        "id": "231388760336",
        "createdTime": "2022-07-01T18:30:44Z",
        "currency": "USD",
        "email": "chaseMarshall@digitalriver.com",
        "shipTo": {
            "address": {
                "line1": "1234 Any Road W",
                "city": "Minneapolis",
                "postalCode": "55401",
                "state": "MN",
                "country": "US"
            },
            "name": "Chase Marshall"
        },
        "shipFrom": {
            "address": {
                "country": "US"
            }
        },
        "billTo": {
            "address": {
                "line1": "Any other road W",
                "city": "Eagan",
                "postalCode": "55122",
                "state": "MN",
                "country": "US"
            },
            "name": "Chase Marshall",
            "email": "marshallsBillingEmail@digitalriver.com"
        },
        "totalAmount": 27.01,
        "subtotal": 25.0,
        "totalFees": 0.0,
        "totalTax": 2.01,
        "totalImporterTax": 0.0,
        "totalDuty": 0.0,
        "totalDiscount": 0.0,
        "totalShipping": 5.0,
        "items": [
            {
                "id": "158140510336",
                "skuId": "eecf60da-b082-47eb-9a3f-602820f22ed9",
                "productDetails": {
                    "id": "eecf60da-b082-47eb-9a3f-602820f22ed9",
                    "name": "Widget",
                    "description": "A small gadget or mechanical device",
                    "countryOfOrigin": "US",
                    "weight": 10,
                    "weightUnit": "g",
                    "partNumber": "eecf60da-b082-47eb-9a3f-602820f22ed9"
                },
                "amount": 20.0,
                "quantity": 2,
                "state": "fulfilled",
                "stateTransitions": {
                    "created": "2022-07-01T18:30:44Z",
                    "fulfilled": "2022-07-01T18:31:00Z"
                },
                "tax": {
                    "rate": 0.08025,
                    "amount": 1.61
                },
                "importerTax": {
                    "amount": 0.0
                },
                "duties": {
                    "amount": 0.0
                },
                "availableToRefundAmount": 27.01,
                "fees": {
                    "amount": 0.0,
                    "taxAmount": 0.0
                }
            }
        ],
        "shippingChoice": {
            "id": "123",
            "amount": 5.0,
            "description": "standard",
            "serviceLevel": "SG",
            "taxAmount": 0.4,
            "shippingTerms": "DDP"
        },
        "updatedTime": "2022-07-01T18:31:37Z",
        "locale": "en_US",
        "customerType": "individual",
        "sellingEntity": {
            "id": "C5_INC-ENTITY",
            "name": "DR globalTech Inc."
        },
        "liveMode": false,
        "state": "complete",
        "stateTransitions": {
            "fulfilled": "2022-07-01T18:31:00Z",
            "accepted": "2022-07-01T18:30:47Z",
            "complete": "2022-07-01T18:31:37Z"
        },
        "fraudStateTransitions": {
            "passed": "2022-07-01T18:30:47Z"
        },
        "requestToBeForgotten": false,
        "capturedAmount": 27.01,
        "cancelledAmount": 0.0,
        "availableToRefundAmount": 27.01,
        "checkoutId": "0f4d5515-c56c-450c-ad71-073e00276df4"
    }
}

You can use the event's orderId to look up the order in your system and provide some or all of this capture, payment, product, and shipping information on the customer's order details page. For example:

We billed your creditCard.brand ending in creditCard.lastFourDigits in the amount of captures[].amount on captures[].createdTime. This payment is for the following products:

  • name | description | image

Failed charge captures

To handle this event, we recommend that you:

  • Contact the customer to arrange a return or alternate payment.

Failed captures might also be due to fulfillment delays from your logistics partner.

{
    "id": "61b66e77-cc9a-4144-b048-f0bf06aff777",
    "type": "order.charge.capture.failed",
    "data": {
        "object": {
            "id": "3b4ef391-e8ae-412a-994b-df3e447aafa0",
            "createdTime": "2022-03-02T17:38:35Z",
            "currency": "USD",
            "amount": 37.81,
            "state": "capturable",
            "orderId": "218378950336",
            "captured": true,
            "captures": [
                {
                    "id": "7542f424-7615-4748-8af6-9c04001ce2e8",
                    "createdTime": "2022-03-02T17:38:51Z",
                    "amount": 37.81,
                    "state": "failed",
                    "failureCode": "failed-request",
                    "fulfillmentId": "ful_2bbb92e0-16fa-4a62-952e-4e2ca4df2870"
                }
            ],
            "refunded": false,
            "sourceId": "e13b2327-d94d-4a62-821c-f11693e64ede",
            "paymentSessionId": "d149962c-80fc-4f7b-b4fc-bc8a80482aef",
            "type": "customer_initiated",
            "liveMode": false
        }
    },
    "liveMode": false,
    "createdTime": "2022-03-02T17:38:54.966905Z",
    ...
    "digitalriverVersion": "2021-12-13"
}

The failed capture event contains a failureCode. We also provide a failureMessage that may help diagnose the issue. To access this message:

  1. Save the unique id of the event's capture.

  2. In the 200 OK response, use the saved capture identifier to search captures[] for the appropriate element and retrieve its failureMessage.

In nearly all cases, however, failureCode is failed-request and failureMessage is Failed to operate on charge. This indicates that Digital River could not determine a reason for the capture failure.

The charge cancel success event

{
    "id": "96640a35-40bc-4e44-8b33-34c623fd3713",
    "type": "order.charge.cancel.complete",
    "data": {
        "object": {
            "id": "66ebb961-c60e-49d8-9dce-32f6be1e770e",
            "createdTime": "2021-10-05T09:07:06Z",
            "currency": "USD",
            "amount": 54.1,
            "state": "capturable",
            "orderId": "201293880336",
            "captured": false,
            "refunded": false,
            "cancels": [
                {
                    "id": "9c755ce0-b52d-4a77-97d7-c7ed73931156",
                    "createdTime": "2021-10-05T09:07:15Z",
                    "amount": 10.82,
                    "state": "complete"
                }
            ],
            "sourceId": "a7e5633f-572c-4a7b-9991-e8ff2f3a2f7a",
            "paymentSessionId": "beaaa4cb-67fd-43fa-b57d-7b0b447afc60",
            "type": "customer_initiated",
            "liveMode": false
        }
    },
    "liveMode": false,
    "createdTime": "2021-10-05T09:07:17.160189Z",
    "webhookIds": [
        "bbac1929-580c-4629-b648-4c096b1a104a",
        "6d7055fc-b3b6-42fb-97a8-2443386199fb",
        "8044a862-e7c9-4a8f-a3bb-b6b987a2be9e"
    ],
    "digitalriverVersion": "2021-03-23"
}

Upon receipt of the charge cancellation event, inform customers of the cancelled payment.

In this example order, the customer used a credit card, so you'd retrieve creditCard.brand and creditCard.lastFourDigits from the response.

{
    "id": "a7e5633f-572c-4a7b-9991-e8ff2f3a2f7a",
    "createdTime": "2021-10-05T09:06:58Z",
    "type": "creditCard",
    "reusable": false,
    "state": "consumed",
    "owner": {
        "firstName": "Guy",
        "lastName": "Incognito",
        "email": "guy@example.org",
        "address": {
            "line1": "1234 St.",
            "city": "Minnetonka",
            "postalCode": "55341",
            "state": "MN",
            "country": "US"
        }
    },
    "clientSecret": "a7e5633f-572c-4a7b-9991-e8ff2f3a2f7a_caa2ec51-453b-4f29-971d-cb6ffc594e22",
    "creditCard": {
        "brand": "Visa",
        "expirationMonth": 10,
        "expirationYear": 2022,
        "lastFourDigits": "1111"
    },
    "liveMode": false
}

You can use the event's orderId to locate the order in your system and display the cancel payment information to customers on their order details page. For example:

On cancels[].createdTime we cancelled billing on your creditCard.brand ending in creditCard.lastFourDigits in the amount of cancels[].amount.

The order fulfilled event

{
    "type": "conflict",
    "errors": [
        {
            "code": "order_fulfilled",
            "parameter": "orderId",
            "message": "Resource '201454110336' is fulfilled."
        }
    ]
}

If your integration is set up to respond to shipment notifications from your fulfiller by synchronously submitting a POST /fulfillments, then you can use order.fulfilled as a trigger to send a notification to customers informing them that all of an order's goods have been shipped.

The order complete event

The order.complete event can also act as a trigger to populate the customer's order details page. The following lists some of the information you may decide to display on this page, along with the field in the event that contains the data. Most likely, you've already used prior API responses and events to store much of this data in your system.

Order details page
Event's data.object field

Order number

id

Date of order

createdTime

Shipping address

shipTo.address

Billing address

billTo.address

Order total

totalAmount

Total before tax

subtotal

Fees

totalFees

Taxes

totalTax

Duties

totalDuty

Shipping and handling

totalShipping

Product details

items[].productDetails

Product cost

items[].amount

Product quantity

items[].quantity

Payment method(s)

payment.sources[].type

Billing date(s)

payment.charges[].captures[].createdTime

Billing amount(s)

payment.charges[].captures[].amount

Billing cancellation date(s)

payment.charges[].cancels[].createdTime

Billing cancellation amount(s)

payment.charges[].cancels[].amount

An in an state

The event

The event​

Similarly, in this model, you must also wait to receive a event before handling that by with the cancelQuantity of each cancelled line item and then .

In the , you don't need to respond to these events. Our orchestration service monitors the key commerce and fulfillment events and then handles the payment capture and cancel process.

Once you , define a request.

You do this by providing an , information about , and any and provided by your fulfiller.

In that use the , a POST /fulfillments must include a single shipmentId and one or more items[].shipmentItemId(s).

To obtain these identifiers, to listen for the with a type of event and then pass them in the body of a POST /fulfillments.

In , you typically receive this tracking information from your fulfiller when they notify you of a shipment.

In that use the, you can retrieve this information from the event.

Each time you send a POST /fulfillments and receive a 201 Created, the payload contains a with a unique identifier. The request also triggers a event.

Depending on your integration, you might find subscribing to the fulfillment created event useful. We recommend, however, that all integrations handle , , , and events.

The data.object of an with a of contains a and orderDetails. The event's orderDetails has nearly all the same data as the associated . The primary exception is that orderDetails doesn't contain the order's payment.

You can also access orderDetails by .

Having orderDetails in fulfillment.created allows you to directly access the data needed to define and/or email notifications without having to retrieve orderId and make a .

In that use the , the fulfillment.created event can also be useful for accessing tracking data. The event provides a trackingCompany name, a trackingNumber, and a trackingUrl.

You can also obtain this data from the event.

Your integration should be set up to handle and events. The payload of both consists of a and contains a fulfillmentId that identifies the that triggered the event.

An order.charge.capture.complete event indicates that Digital River fully or partially captured one of an .

In the following example, the charge's remains capturable because the is only partially fulfilled.

To access data on the associated with the capture, pass the event's sourceId as a path parameter in a .

To access product and tracking data, use the event's captures[].fulfillmentId to that triggered the capture.

From the 200 OK response, you can use orderDetails.items[].productDetails to get each product's name, description, image, and other data. Depending on your integration, the may also contain .

In rare cases, a fails. If this happens, Digital River creates an order.charge.capture.failed event.

Send a shipment cancellation request to your fulfillment logistics partner. The event's captures[].fulfillmentId allows you to , access its shipmentId and items[].shipmentItemId and then use these identifiers to cancel the shipment. Verify with your fulfiller to determine whether they can cancel a shipment within a certain window of time. If using , refer to .

Failed captures are usually due to expired charge authorizations. This might happen when you're running a pre-order sale and there's a lengthy period between submission of a that and a ts that payment.

On the page, we provide that you can use to check how your integration handles failed charge captures.

Retrieve the event's data.object.id, which uniquely identifies the .

Send this charge identifier as a path parameter in a .

We recommend that your integration be set up to handle successful cancellations.

The order.charge.cancel.complete event typically originates with a customer requesting your site to cancel an entire (or a certain quantity of one or more in an order).

This request, in turn, should eventually trigger a that specifies a cancelQuantity for each line item that the customer wants to cancel.

In , make sure you send a shipment cancellation request to your fulfiller, and receive a successful response before sending the .

For , refer to .

To do this, retrieve the event's orderId, cancels[].createdTime and cancels[].amount. To access information about the , retrieve the event's sourceId and pass it as a path parameter in a .

Once you submit one or more POST/fulfillments that result in every state transitioning to fulfilled, then the state also becomes fulfilled and an order.fulfilled event is fired.

If you use a third-party service to generate customer notifications, refer to for details on how that service can use this event.

At this point, if you submit any additional POST /fulfillments on the , you receive the following error:

When the moves into a state, an order.complete event is fired. Upon receipt of this event, use the event's data.object.id or data.object.upstreamId to look up the order in your system and set its status to complete.

If you use a third-party service to generate customer notifications, refer to for details on how that service can use this event.

You can also use order.complete as a trigger to activate a request refund button on the customer's order details page. When handling the button's click event, use the to .

charge capture
charge cancel
order fulfilled
order complete
create an order
fulfillment model
handle the necessary events
define
submit
handle fulfillment-related events
defining a POST /fulfillments
submitting the payment capture request
defining a POST /fulfillments
submitting the payment cancel request
defining a POST /fulfillments
submitting the payment capture request
Digital River coordinated fulfillments
configure a webhook
Digital River coordinated fulfillments
payment source
Cancelling physical fulfillments
Testing scenarios
Cancelling physical fulfillments
source
process the request
defining a POST /fulfillments
submitting the payment cancel request
receive and handle the necessary events
each fulfilled and/or cancelled item
shipment identifiers
tracking data
fulfillment.created
order.charge.capture.complete
order.charge.capture.failed
shipment tracking data
charge cancellation request to Digital River
synchronously
asynchronously
line items
line item's
type
physical fulfillments
orchestrated model
third-party coordinated fulfillments
Digital River coordinated fulfillments
How Digital River returns product data
How Digital River returns product data
third-party coordinated fulfillments
Digital River coordinated fulfillments
distributed model
Digital River coordinated fulfillments
distributed model
Digital River's fulfillment service
POST /fulfillments
order identifier
fulfillment
retrieving the fulfillment
charge
fulfillment
order's
charges
state
order
GET /sources/{sourceId}
retrieve the fulfillment
fulfillment
capture
retrieve the fulfillment
POST /orders
authorizes the charge
POST /fulfillmen
captures
charge
GET /charges/{id}
charge
order
POST /fulfillments
GET /sources/{sourceId}
order's
order
order
complete
Refunds API
order
accepted
Fulfillments API
POST /fulfillments
order
capture
cancel
charges
POST /fulfillment
order
accepted
accepted
event
event
fulfillment
order
get order request
distributed model
orchestrated model
creating a fulfillment order
fulfillment_order.shipped
fulfillment_order.cancelled
fulfillment_order.shipped
fulfillment_order.shipped
fulfillment_order.shipped
fulfillment_order.shipped
fulfillment_order.cancelled
credit card information
shipment confirmation
cancellation confirmation
fulfillment.created