Sample code for 30+ languages & platforms
Zig

Amazon SP-API Get Orders

See more Amazon SP-API Examples

Demonstrates Amazon SP-API Sellers API -- get orders. Returns orders created or updated during the time frame indicated by the specified parameters.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // IMPORTANT:
    // You'll need to make changes to use values specific to your own region and account.
    //
    // Here is a list of values you'll need to change or provide:
    //
    // 1) The access key. Change AWS_ACCESS_KEY to your actual access key.
    // 2) The secret key. Change AWS_SECRET_KEY to your actual access key.
    // 3) Your region.  Change "ew-west-1" to your region.
    // 4) The domain to which you connect.  Change sandbox.sellingpartnerapi-eu.amazon.com to non-sandbox by removing the "sandbox."
    //    and change the "-eu" part of the domain to your region. See https://developer-docs.amazon.com/sp-api/docs/sp-api-endpoints
    // 5) Use the restricted data token (RDT) obtained from your code that previously obtained the RDT.
    //     If you saved the RDT to a file, update the relative file path "qa_data/tokens/sp_api_rdt_token.json" to your actual file path.
    // 6) Update your Marketplace ID(s), such as ATVPDKIKX0DER
    // 7) If using the non-sandbox, change the CreatedAfter from "TEST_CASE_200" to an actual date, such as "2022-12-25"

    const auth_aws = try chilkat.AuthAws.init();
    defer auth_aws.deinit();
    auth_aws.setAccessKey("AWS_ACCESS_KEY");
    auth_aws.setSecretKey("AWS_SECRET_KEY");
    auth_aws.setServiceName("execute-api");
    // Use the region that is correct for your needs.
    auth_aws.setRegion("eu-west-1");

    const rest = try chilkat.Rest.init();
    defer rest.deinit();
    const b_tls = true;
    const port = 443;
    const b_auto_reconnect = true;
    // Make sure to use the correct domain.
    // This example is using the sandbox
    rest.connect("sandbox.sellingpartnerapi-eu.amazon.com", port, b_tls, b_auto_reconnect) catch {
        std.debug.print("{s}\n", .{try rest.getLastErrorText(alloc)});
        return;
    };

    try rest.setAuthAws(auth_aws);

    // Here's the example to get the RDT access token: Get SP-API Restricted Data Token

    // Load the previously obtained RDT access token.
    // See Fetch SP-API RDT Access Token
    const json_token = try chilkat.JsonObject.init();
    defer json_token.deinit();
    json_token.loadFile("qa_data/tokens/sp_api_rdt_token.json") catch {
        std.debug.print("Failed to load RDT access token.\n", .{});
        return;
    };

    // Add the x-amz-access-token request header.
    const rdt_token = try json_token.stringOf(alloc, "restrictedDataToken");
    rest.clearAllHeaders() catch {};
    rest.addHeader("x-amz-access-token", rdt_token) catch {};

    // Indicate the marketplace IDs.  Use the marketplace ID for your needs. See https://developer-docs.amazon.com/sp-api/docs/marketplace-ids
    rest.clearAllQueryParams() catch {};
    // When using the sandbox, use these params literally and exactly has shown here:
    rest.addQueryParam("MarketplaceIds", "ATVPDKIKX0DER") catch {};
    rest.addQueryParam("CreatedAfter", "TEST_CASE_200") catch {};

    const sb_response = try chilkat.StringBuilder.init();
    defer sb_response.deinit();
    const uri = "/orders/v0/orders";
    rest.fullRequestNoBodySb("GET", uri, sb_response) catch {
        std.debug.print("{s}\n", .{try rest.getLastErrorText(alloc)});
        return;
    };

    // Examine the response status.
    const status_code = rest.getResponseStatusCode();
    if (status_code != 200) {
        std.debug.print("Response status text: {s}\n", .{try rest.getResponseStatusText(alloc)});
        std.debug.print("Response body: \n", .{});
        std.debug.print("{s}\n", .{try sb_response.getAsString(alloc)});
        std.debug.print("Failed.\n", .{});
        return;
    }

    std.debug.print("{s}\n", .{try sb_response.getAsString(alloc)});

    // If successful, gets a JSON response such as the following:

    // {
    //   "payload": {
    //     "CreatedBefore": "1.569521782042E9",
    //     "Orders": [
    //       {
    //         "AmazonOrderId": "902-1845936-5435065",
    //         "PurchaseDate": "1970-01-19T03:58:30Z",
    //         "LastUpdateDate": "1970-01-19T03:58:32Z",
    //         "OrderStatus": "Unshipped",
    //         "FulfillmentChannel": "MFN",
    //         "SalesChannel": "Amazon.com",
    //         "ShipServiceLevel": "Std US D2D Dom",
    //         "OrderTotal": {
    //           "CurrencyCode": "USD",
    //           "Amount": "11.01"
    //         },
    //         "NumberOfItemsShipped": 0,
    //         "NumberOfItemsUnshipped": 1,
    //         "PaymentMethod": "Other",
    //         "PaymentMethodDetails": [
    //           "Standard"
    //         ],
    //         "IsReplacementOrder": false,
    //         "MarketplaceId": "ATVPDKIKX0DER",
    //         "ShipmentServiceLevelCategory": "Standard",
    //         "OrderType": "StandardOrder",
    //         "EarliestShipDate": "1970-01-19T03:59:27Z",
    //         "LatestShipDate": "1970-01-19T04:05:13Z",
    //         "EarliestDeliveryDate": "1970-01-19T04:06:39Z",
    //         "LatestDeliveryDate": "1970-01-19T04:15:17Z",
    //         "IsBusinessOrder": false,
    //         "IsPrime": false,
    //         "IsGlobalExpressEnabled": false,
    //         "IsPremiumOrder": false,
    //         "IsSoldByAB": false,
    //         "IsIBA": false,
    //         "DefaultShipFromLocationAddress": {
    //           "Name": "MFNIntegrationTestMerchant",
    //           "AddressLine1": "2201 WESTLAKE AVE",
    //           "City": "SEATTLE",
    //           "StateOrRegion": "WA",
    //           "PostalCode": "98121-2778",
    //           "CountryCode": "US",
    //           "Phone": "+1 480-386-0930 ext. 73824",
    //           "AddressType": "Commercial"
    //         },
    //         "FulfillmentInstruction": {
    //           "FulfillmentSupplySourceId": "sampleSupplySourceId"
    //         },
    //         "IsISPU": false,
    //         "IsAccessPointOrder": false,
    //         "AutomatedShippingSettings": {
    //           "HasAutomatedShippingSettings": false
    //         },
    //         "EasyShipShipmentStatus": "PendingPickUp",
    //         "ElectronicInvoiceStatus": "NotRequired"
    //       },
    //       {
    //         "AmazonOrderId": "902-8745147-1934268",
    //         "PurchaseDate": "1970-01-19T03:58:30Z",
    //         "LastUpdateDate": "1970-01-19T03:58:32Z",
    //         "OrderStatus": "Unshipped",
    //         "FulfillmentChannel": "MFN",
    //         "SalesChannel": "Amazon.com",
    //         "ShipServiceLevel": "Std US D2D Dom",
    //         "OrderTotal": {
    //           "CurrencyCode": "USD",
    //           "Amount": "11.01"
    //         },
    //         "NumberOfItemsShipped": 0,
    //         "NumberOfItemsUnshipped": 1,
    //         "PaymentMethod": "Other",
    //         "PaymentMethodDetails": [
    //           "Standard"
    //         ],
    //         "IsReplacementOrder": false,
    //         "MarketplaceId": "ATVPDKIKX0DER",
    //         "ShipmentServiceLevelCategory": "Standard",
    //         "OrderType": "StandardOrder",
    //         "EarliestShipDate": "1970-01-19T03:59:27Z",
    //         "LatestShipDate": "1970-01-19T04:05:13Z",
    //         "EarliestDeliveryDate": "1970-01-19T04:06:39Z",
    //         "LatestDeliveryDate": "1970-01-19T04:15:17Z",
    //         "IsBusinessOrder": false,
    //         "IsPrime": false,
    //         "IsAccessPointOrder": false,
    //         "IsGlobalExpressEnabled": false,
    //         "IsPremiumOrder": false,
    //         "IsSoldByAB": false,
    //         "IsIBA": false,
    //         "EasyShipShipmentStatus": "PendingPickUp",
    //         "ElectronicInvoiceStatus": "NotRequired"
    //       }
    //     ]
    //   }
    // }

    // Use this online tool to generate parsing code from sample JSON:
    // Generate Parsing Code from JSON

    const json = try chilkat.JsonObject.init();
    defer json.deinit();

    json.loadSb(sb_response) catch {};

    var amazon_order_id: [:0]const u8 = "";
    var purchase_date: [:0]const u8 = "";
    var last_update_date: [:0]const u8 = "";
    var order_status: [:0]const u8 = "";
    var fulfillment_channel: [:0]const u8 = "";
    var sales_channel: [:0]const u8 = "";
    var ship_service_level: [:0]const u8 = "";
    var currency_code: [:0]const u8 = "";
    var amount: [:0]const u8 = "";
    var number_of_items_shipped: i32 = 0;
    var number_of_items_unshipped: i32 = 0;
    var payment_method: [:0]const u8 = "";
    var is_replacement_order: bool = false;
    var marketplace_id: [:0]const u8 = "";
    var shipment_service_level_category: [:0]const u8 = "";
    var order_type: [:0]const u8 = "";
    var earliest_ship_date: [:0]const u8 = "";
    var latest_ship_date: [:0]const u8 = "";
    var earliest_delivery_date: [:0]const u8 = "";
    var latest_delivery_date: [:0]const u8 = "";
    var is_business_order: bool = false;
    var is_prime: bool = false;
    var is_global_express_enabled: bool = false;
    var is_premium_order: bool = false;
    var is_sold_by_ab: bool = false;
    var is_iba: bool = false;
    var name: [:0]const u8 = "";
    var address_line1: [:0]const u8 = "";
    var city: [:0]const u8 = "";
    var state_or_region: [:0]const u8 = "";
    var postal_code: [:0]const u8 = "";
    var country_code: [:0]const u8 = "";
    var phone: [:0]const u8 = "";
    var address_type: [:0]const u8 = "";
    var fulfillment_supply_source_id: [:0]const u8 = "";
    var is_ispu: bool = false;
    var is_access_point_order: bool = false;
    var has_automated_shipping_settings: bool = false;
    var easy_ship_shipment_status: [:0]const u8 = "";
    var electronic_invoice_status: [:0]const u8 = "";
    var j: i32 = 0;
    var count_j: i32 = 0;
    var str_val: [:0]const u8 = "";

    _ = try json.stringOf(alloc, "payload.CreatedBefore");
    var i: i32 = 0;
    const count_i = json.sizeOfArray("payload.Orders");
    while (i < count_i) {
        json.setI(i);
        amazon_order_id = try json.stringOf(alloc, "payload.Orders[i].AmazonOrderId");
        purchase_date = try json.stringOf(alloc, "payload.Orders[i].PurchaseDate");
        last_update_date = try json.stringOf(alloc, "payload.Orders[i].LastUpdateDate");
        order_status = try json.stringOf(alloc, "payload.Orders[i].OrderStatus");
        fulfillment_channel = try json.stringOf(alloc, "payload.Orders[i].FulfillmentChannel");
        sales_channel = try json.stringOf(alloc, "payload.Orders[i].SalesChannel");
        ship_service_level = try json.stringOf(alloc, "payload.Orders[i].ShipServiceLevel");
        currency_code = try json.stringOf(alloc, "payload.Orders[i].OrderTotal.CurrencyCode");
        amount = try json.stringOf(alloc, "payload.Orders[i].OrderTotal.Amount");
        number_of_items_shipped = json.intOf("payload.Orders[i].NumberOfItemsShipped");
        number_of_items_unshipped = json.intOf("payload.Orders[i].NumberOfItemsUnshipped");
        payment_method = try json.stringOf(alloc, "payload.Orders[i].PaymentMethod");
        is_replacement_order = json.boolOf("payload.Orders[i].IsReplacementOrder");
        marketplace_id = try json.stringOf(alloc, "payload.Orders[i].MarketplaceId");
        shipment_service_level_category = try json.stringOf(alloc, "payload.Orders[i].ShipmentServiceLevelCategory");
        order_type = try json.stringOf(alloc, "payload.Orders[i].OrderType");
        earliest_ship_date = try json.stringOf(alloc, "payload.Orders[i].EarliestShipDate");
        latest_ship_date = try json.stringOf(alloc, "payload.Orders[i].LatestShipDate");
        earliest_delivery_date = try json.stringOf(alloc, "payload.Orders[i].EarliestDeliveryDate");
        latest_delivery_date = try json.stringOf(alloc, "payload.Orders[i].LatestDeliveryDate");
        is_business_order = json.boolOf("payload.Orders[i].IsBusinessOrder");
        is_prime = json.boolOf("payload.Orders[i].IsPrime");
        is_global_express_enabled = json.boolOf("payload.Orders[i].IsGlobalExpressEnabled");
        is_premium_order = json.boolOf("payload.Orders[i].IsPremiumOrder");
        is_sold_by_ab = json.boolOf("payload.Orders[i].IsSoldByAB");
        is_iba = json.boolOf("payload.Orders[i].IsIBA");
        name = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.Name");
        address_line1 = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.AddressLine1");
        city = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.City");
        state_or_region = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.StateOrRegion");
        postal_code = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.PostalCode");
        country_code = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.CountryCode");
        phone = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.Phone");
        address_type = try json.stringOf(alloc, "payload.Orders[i].DefaultShipFromLocationAddress.AddressType");
        fulfillment_supply_source_id = try json.stringOf(alloc, "payload.Orders[i].FulfillmentInstruction.FulfillmentSupplySourceId");
        is_ispu = json.boolOf("payload.Orders[i].IsISPU");
        is_access_point_order = json.boolOf("payload.Orders[i].IsAccessPointOrder");
        has_automated_shipping_settings = json.boolOf("payload.Orders[i].AutomatedShippingSettings.HasAutomatedShippingSettings");
        easy_ship_shipment_status = try json.stringOf(alloc, "payload.Orders[i].EasyShipShipmentStatus");
        electronic_invoice_status = try json.stringOf(alloc, "payload.Orders[i].ElectronicInvoiceStatus");
        j = 0;
        count_j = json.sizeOfArray("payload.Orders[i].PaymentMethodDetails");
        while (j < count_j) {
            json.setJ(j);
            str_val = try json.stringOf(alloc, "payload.Orders[i].PaymentMethodDetails[j]");
            j = j + 1;
        }

        i = i + 1;
    }

    std.debug.print("Success!\n", .{});
}