Search code examples
apibatch-processingsquaresquare-connect

square connect api batch processing


I need assistance with batch processing, especially in adding tax codes to items.

I'm experimenting with the square batch processing feature and my sample cases are create 2 items and add the tax code to them. In all 4 requests - 2 for creating item, 2 to 'put' the tax code. I have tried the following orders: 1. create the two items; add the taxes 2. create one item; add tax code to that item; create second item, add code to the second item.

In both instances, the result is the same - the taxes are applied to only one item. For the second item, the response I get is:

{
    "status_code":404,
    "body":{
        "type":"not_found",
        "message":"NotFound"
    },
    "request_id":4
}

To help with the investigation, here's the sample json that I use in the cURL request.

{
"requests":[
    {
        "method":"POST",
        "relative_path":"\/v1\/me\/items",
        "access_token":"XXX-YYY",
        "body":
            {
                "id":126,
                "name":"TestItem",
                "description":"TestItemDescription",
                "category_id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
                "variations":[
                    {
                        "name":"var1",
                        "pricing_type":"FIXED_PRICING",
                        "price_money":
                            {
                                "currency_code":"CAD",
                                "amount":400
                            },
                        "sku":"123444:QWEFASDERRG"
                    }
                ]},
        "request_id":1
    },
    {
        "method":"PUT",
        "relative_path":"\/v1\/me\/items\/126\/fees\/7F2D50D8-43C1-4518-8B8D-881CBA06C7AB",
        "access_token":"XXX-YYY",
        "request_id":2
    },
    {
        "method":"POST",
        "relative_path":"\/v1\/me\/items",
        "access_token":"XXX-YYY",
        "body":
            {
                "id":127,
                "name":"TestItem1",
                "description":"TestItemDescription1",
                "category_id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
                "variations":[
                    {
                        "name":"var1",
                        "pricing_type":"FIXED_PRICING",
                        "price_money":
                            {
                                "currency_code":"CAD",
                                "amount":400
                            },
                        "sku":"123444:QWEFASDERRG1"
                    }
                ]
            },
        "request_id":3
    },
    {
        "method":"PUT",
        "relative_path":"\/v1\/me\/items\/127\/fees\/7F2D50D8-43C1-4518-8B8D-881CBA06C7AB",
        "access_token":"XXX-YYY",
        "request_id":4
    }
]
}

Below is the full response that I receive indicating successful creation of two items and only one successful tax push.

[
{
    "status_code":200,
    "body":
        {
            "visibility":"PUBLIC",
            "available_online":false,
            "available_for_pickup":false,
            "id":"126",
            "description":"TestItemDescription",
            "name":"TestItem",
            "category_id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
            "category":
                {
                    "id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
                    "name":"Writing Instruments"
                },
            "variations":[
                {
                    "pricing_type":"FIXED_PRICING",
                    "track_inventory":false,
                    "inventory_alert_type":"NONE",
                    "id":"4c70909b-90bd-4742-b772-e4fabe636557",
                    "name":"var1",
                    "price_money":
                        {
                            "currency_code":"CAD",
                            "amount":400
                        },
                    "sku":"123444:QWEFASDERRG",
                    "ordinal":1,
                    "item_id":"126"
                }
            ],
            "modifier_lists":[],
            "fees":[],
            "images":[]
        },
    "request_id":1
},
{
    "status_code":200,
    "body":{},
    "request_id":2
},
{
    "status_code":200,
    "body":
        {
            "visibility":"PUBLIC",
            "available_online":false,
            "available_for_pickup":false,
            "id":"127",
            "description":"TestItemDescription1",
            "name":"TestItem1",
            "category_id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
            "category":
                {
                    "id":"DF1F51FB-11D6-4232-B138-2ECE3D89D206",
                    "name":"Writing Instruments"
                },
            "variations":[
                {
                    "pricing_type":"FIXED_PRICING",
                    "track_inventory":false,
                    "inventory_alert_type":"NONE",
                    "id":"6de8932f-603e-4cd9-99ad-67f6c7777ffd",
                    "name":"var1",
                    "price_money":
                        {
                            "currency_code":"CAD",
                            "amount":400
                        },
                    "sku":"123444:QWEFASDERRG1",
                    "ordinal":1,
                    "item_id":"127"
                }
            ],
            "modifier_lists":[],
            "fees":[],
            "images":[]
        },
    "request_id":3
},
{
    "status_code":404,
    "body":
        {
            "type":"not_found",
            "message":"NotFound"
        },
    "request_id":4
}
]

I have checked through going for the list of items and both items with their item ID's are present in the inventory. So the questions I have are, Why the tax is applied to one item and not to the other? How to resolve it?


Solution

  • From the Square docs:

    Note the following when using the Submit Batch endpoint:

    You cannot include more than 30 requests in a single batch.

    Recursive requests to the Submit Batch endpoint are not allowed (i.e., none of the requests included in a batch can itself be a request to this endpoint).

    There is no guarantee of the order in which batched requests are performed.

    (emphasis mine).

    If you want to use the batch API, you will have to create parent entities like items first, then in a separate batch request apply any child entities like fees, discounts, etc... Alternately, you can just make separate requests. There may not be much benefit from using the batch API in this case.