Retrieving orders using the Magento 2 API

Magento 2, Quick Tip

Recently i had to fetch order information using the Magento 2 API, and to be more specific: The latest orders with a specific status. This turned out to be a bit harder than i initially expected. Magento has some pretty good documentation on this subject, but i still needed a little bit tinkering to get the right result.

Authentication

First: You can't access orders directly, you need to authenticate yourself before you can retrieve them. There are different kinds of authentication methods available, depending on your needs. To retrieve the orders you need the integration or the admin token type. For development the admin type is the easiest. You can retrieve a token by executing this request:

POST https://<URL>/rest/all/V1/integration/admin/token
{
        username=*USERNAME*
        password=*PASSWORD*
}

This will return a token in json format, which means it's encapsulated in ". This token needs to be sent with every next request as an Bearer Token:

Authorization: Bearer hzefhgfmus0sj5djivajqac8ocdm8rq4
MageTested.com (ad)

Do you want your Magento store to be more reliable? Tired of things that suddenly break the checkout process without anyone noticing? You can hire my services to kickstart End-2-End testing for your Magento store. This way you know for sure that your store is behaving as expected before releasing that new feature or that update.

View MageTested.com for more information.

Retrieving orders

Next is retrieving the latest orders:

GET https://<URL>/rest/all/V1/orders?searchCriteria[sortOrders][0][field]=created_at

This will give you an array with something like this:

{
    "entity_id": 133,
    "base_grand_total": 107.43,
    "state": "processing",
    "items": [
        {
            "base_price": 45,
            "name": "Erika Running Short-32-Red",
            // ...
        }
    ],
    "billing_address": {
        "email": "[email protected]",
        "firstname": "Veronica",
        "lastname": "Costello",
        // ...
    },
    "payment": {
        // ...
    },
    "status_histories": [
        {
            "status": "pending",
            // ...
        }
    ],
    "extension_attributes": {
        // ...
    }
}

Need to filter on the status of the order? Add this variable:

searchCriteria[filter_groups][0][filters][0][value]

If you combine that with the sort order you'll get something like this:

GET https://<URL>/rest/all/V1/orders?searchCriteria[sortOrders][0][field]=created_at&searchCriteria[filter_groups][0][filters][0][value]


Want to respond?