Orders by resource error code and message
How to use the Metrics API to check the errors associated with the orders of your organization (if any) .
The problem
You want to get the total number of orders over a selected date and time range, grouped by the associated resource error code. For each code, you also want to group the results by the related error message.
The solution
Query
You need to perform a breakdown query setting the required query keys as follows and adding the optional ones based on your needs:
by
resource_errors.code
field
order.id
operator
value_count
You also need to add a nested breakdown setting the related query keys as follows:
by
resource_errors.message
field
order.id
operator
value_count
Filter
Make sure to set the desired date and time range using the date_from and date_to keys in the filter.
As shown in the example below, use created_at as the date_field in the date filter if you want the results to count all the orders that were created in the selected date and time range (read more about this).
Example
The following request uses the Metrics API to get the total number of orders, grouped by the associated resource error code and message:
curl -g -X POST \
'https://{{your_domain}}.commercelayer.io/metrics/orders/breakdown' \
-H 'Accept: application/vnd.api.v1+json' \
-H 'Content-Type: application/vnd.api+json' \
-H 'Authorization: Bearer {{your_access_token}}' \
-d '{
"breakdown": {
"by": "resource_errors.code",
"field": "order.id",
"operator": "value_count",
"limit": 100,
"breakdown": {
"by": "resource_errors.message",
"field": "order.id",
"operator": "value_count",
"limit": 10
}
},
"filter": {
"order": {
"date_from": "2021-01-01T00:00:00Z",
"date_to": "2022-11-31T23:59:00Z",
"date_field": "created_at"
}
}
}'On success, the API responds with a 200 OK status code, returning the aggregated, nested values in the data object and extra information in the meta object:
{
"data": {
"resource_errors.code": [
{
"label": "INVALID_GIFT_CARD",
"value": 1969,
"resource_errors.message": [
{
"label": "doesn't match any active gift card",
"value": 1969
}
]
},
{
"label": "ADYEN_ERROR",
"value": 218,
"resource_errors.message": [
{
"label": "Invalid card number",
"value": 161
},
{
"label": "Refused",
"value": 36
},
{
"label": "Request already processed or in progress",
"value": 10
},
{
"label": "Required field cvc is not provided",
"value": 7
},
{
"label": "Missing payment method details: issuer",
"value": 3
},
{
"label": "Required field colorDepth missing for device channel browser",
"value": 1
}
]
},
{
"label": "STRIPE_ERROR",
"value": 102,
"resource_errors.message": [
{
"label": "Your card was declined",
"value": 71
},
{
"label": "Payment source changed on order",
"value": 15
},
{
"label": "The provided payment method has failed authentication. You can provide payment method data or a new payment method to attempt to fulfill this payment intent again.",
"value": 11
},
{
"label": "This payment intent could not be captured because it has a status of canceled. Only a payment intent with one of the following statuses may be captured: requires_capture.",
"value": 5
}
]
},
{
"label": "ORDER_NO_MORE_EDITABLE",
"value": 21,
"resource_errors.message": [
{
"label": "Order is no more editable",
"value": 21
}
]
},
{
"label": "CUSTOMER_TOKEN_CAN'T_BE_BLANK",
"value": 16,
"resource_errors.message": [
{
"label": "Customer token can't be blank",
"value": 16
}
]
},
{
"label": "PAYMENT_SOURCE_TOKEN_CAN'T_BE_BLANK",
"value": 9,
"resource_errors.message": [
{
"label": "Payment source token can't be blank",
"value": 9
}
]
}
{
"label": "PAYMENT_INTENT_INVALID_STATUS",
"value": 7,
"resource_errors.message": [
{
"label": "Payment intent invalid status: requires_payment_method",
"value": 7
}
]
},
{
"label": "MANUAL_ERROR",
"value": 4,
"resource_errors.message": [
{
"label": "You cannot call create unless the parent is saved",
"value": 4
}
]
},
{
"label": "MISSING_SHIPPING_METHODS",
"value": 3,
"resource_errors.message": [
{
"label": "Some shipments are missing the shipping method",
"value": 3
}
]
},
{
"label": "ORDER_AUTHORIZED",
"value": 2,
"resource_errors.message": [
{
"label": "Cannot be changed for an authorized order",
"value": 2
}
]
},
{
"label": "PAYPAL_ERROR",
"value": 1,
"resource_errors.message": [
{
"label": "ORDER_NOT_APPROVED",
"value": 1
}
]
}
]
},
"meta": {
"type": "breakdown",
"trace_id": "fe571ea2-8a4f-4a5e-bd26-ac54651bb2e4",
"mode": "test",
"organization_id": "xYZkjABcde",
"market_ids": [ "yzXKjYzaCx", "..." ]
}
}Filtering specific error codes
The following request uses the Metrics API to get the total number of orders, grouped by the associated resource error code and message, filtering the ones related to some specific payment gateways only:
curl -g -X POST \
'https://{{your_domain}}.commercelayer.io/metrics/orders/breakdown' \
-H 'Accept: application/vnd.api.v1+json' \
-H 'Content-Type: application/vnd.api+json' \
-H 'Authorization: Bearer {{your_access_token}}' \
-d '{
"breakdown": {
"by": "resource_errors.code",
"field": "order.id",
"operator": "value_count",
"limit": 100,
"breakdown": {
"by": "resource_errors.message",
"field": "order.id",
"operator": "value_count",
"limit": 10
}
},
"filter": {
"order": {
"date_from": "2021-01-01T00:00:00Z",
"date_to": "2022-11-31T23:59:00Z",
"date_field": "created_at"
},
"resource_errors": {
"codes": {
"in": [
"ADYEN_ERROR",
"STRIPE_ERROR",
"PAYPAL_ERROR"
]
}
}
}
}'On success, the API responds with a 200 OK status code, returning the aggregated, nested, and filtered values in the data object and extra information in the meta object:
{
"data": {
"resource_errors.code": [
{
"label": "INVALID_GIFT_CARD",
"value": 1969,
"resource_errors.message": [
{
"label": "doesn't match any active gift card",
"value": 1969
}
]
},
{
"label": "ADYEN_ERROR",
"value": 218,
"resource_errors.message": [
{
"label": "Invalid card number",
"value": 161
},
{
"label": "Refused",
"value": 36
},
{
"label": "Request already processed or in progress",
"value": 10
},
{
"label": "Required field cvc is not provided",
"value": 7
},
{
"label": "Missing payment method details: issuer",
"value": 3
},
{
"label": "Required field colorDepth missing for device channel browser",
"value": 1
}
]
},
{
"label": "STRIPE_ERROR",
"value": 102,
"resource_errors.message": [
{
"label": "Your card was declined",
"value": 71
},
{
"label": "Payment source changed on order",
"value": 15
},
{
"label": "The provided payment method has failed authentication. You can provide payment method data or a new payment method to attempt to fulfill this payment intent again.",
"value": 11
},
{
"label": "This payment intent could not be captured because it has a status of canceled. Only a payment intent with one of the following statuses may be captured: requires_capture.",
"value": 5
}
]
},
{
"label": "PAYPAL_ERROR",
"value": 1,
"resource_errors.message": [
{
"label": "ORDER_NOT_APPROVED",
"value": 1
}
]
}
]
},
"meta": {
"type": "breakdown",
"trace_id": "fe571ea2-8a4f-4a5e-bd26-ac54651bb2e4",
"mode": "test",
"organization_id": "xYZkjABcde",
"market_ids": [ "yzXKjYzaCx", "..." ]
}
}Similar cases
Just changing a couple of query keys and/or filter parameters you can address lots of very similar use cases, such as:
Last updated

