Sample code for 30+ languages & platforms
Dart

Square API - Batch Upsert Catalog Objects

See more Square Examples

Creates or updates up to 10,000 target objects based on the provided list of objects. The target objects are grouped into batches and each batch is inserted/updated in an all-or-nothing manner.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example assumes the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final http = CkHttp();

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

  // The following JSON is sent in the request body.

  // {
  //   "idempotency_key": "789ff020-f723-43a9-b4b5-43b5dc1fa3dc",
  //   "batches": [
  //     {
  //       "objects": [
  //         {
  //           "type": "ITEM",
  //           "id": "#Tea",
  //           "present_at_all_locations": true,
  //           "item_data": {
  //             "name": "Tea",
  //             "description": "Hot Leaf Juice",
  //             "category_id": "#Beverages",
  //             "tax_ids": [
  //               "#SalesTax"
  //             ],
  //             "variations": [
  //               {
  //                 "type": "ITEM_VARIATION",
  //                 "id": "#Tea_Mug",
  //                 "present_at_all_locations": true,
  //                 "item_variation_data": {
  //                   "item_id": "#Tea",
  //                   "name": "Mug",
  //                   "pricing_type": "FIXED_PRICING",
  //                   "price_money": {
  //                     "amount": 150,
  //                     "currency": "USD"
  //                   }
  //                 }
  //               }
  //             ]
  //           }
  //         },
  //         {
  //           "type": "ITEM",
  //           "id": "#Coffee",
  //           "present_at_all_locations": true,
  //           "item_data": {
  //             "name": "Coffee",
  //             "description": "Hot Bean Juice",
  //             "category_id": "#Beverages",
  //             "tax_ids": [
  //               "#SalesTax"
  //             ],
  //             "variations": [
  //               {
  //                 "type": "ITEM_VARIATION",
  //                 "id": "#Coffee_Regular",
  //                 "present_at_all_locations": true,
  //                 "item_variation_data": {
  //                   "item_id": "#Coffee",
  //                   "name": "Regular",
  //                   "pricing_type": "FIXED_PRICING",
  //                   "price_money": {
  //                     "amount": 250,
  //                     "currency": "USD"
  //                   }
  //                 }
  //               },
  //               {
  //                 "type": "ITEM_VARIATION",
  //                 "id": "#Coffee_Large",
  //                 "present_at_all_locations": true,
  //                 "item_variation_data": {
  //                   "item_id": "#Coffee",
  //                   "name": "Large",
  //                   "pricing_type": "FIXED_PRICING",
  //                   "price_money": {
  //                     "amount": 350,
  //                     "currency": "USD"
  //                   }
  //                 }
  //               }
  //             ]
  //           }
  //         },
  //         {
  //           "type": "CATEGORY",
  //           "id": "#Beverages",
  //           "present_at_all_locations": true,
  //           "category_data": {
  //             "name": "Beverages"
  //           }
  //         },
  //         {
  //           "type": "TAX",
  //           "id": "#SalesTax",
  //           "present_at_all_locations": true,
  //           "tax_data": {
  //             "name": "Sales Tax",
  //             "calculation_phase": "TAX_SUBTOTAL_PHASE",
  //             "inclusion_type": "ADDITIVE",
  //             "percentage": "5.0",
  //             "applies_to_custom_amounts": true,
  //             "enabled": true
  //           }
  //         }
  //       ]
  //     }
  //   ]
  // }

  var i = 0;
  var j = 0;
  var k = 0;

  final json = CkJsonObject();
  json.updateString('idempotency_key', '789ff020-f723-43a9-b4b5-43b5dc1fa3dc');
  i = 0;
  json.i = i;
  j = 0;
  json.j = j;
  json.updateString('batches[i].objects[j].type', 'ITEM');
  json.updateString('batches[i].objects[j].id', '#Tea');
  json.updateBool('batches[i].objects[j].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].item_data.name', 'Tea');
  json.updateString('batches[i].objects[j].item_data.description', 'Hot Leaf Juice');
  json.updateString('batches[i].objects[j].item_data.category_id', '#Beverages');
  json.updateString('batches[i].objects[j].item_data.tax_ids[0]', '#SalesTax');
  json.updateString('batches[i].objects[j].item_data.variations[0].type', 'ITEM_VARIATION');
  json.updateString('batches[i].objects[j].item_data.variations[0].id', '#Tea_Mug');
  json.updateBool('batches[i].objects[j].item_data.variations[0].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].item_data.variations[0].item_variation_data.item_id', '#Tea');
  json.updateString('batches[i].objects[j].item_data.variations[0].item_variation_data.name', 'Mug');
  json.updateString('batches[i].objects[j].item_data.variations[0].item_variation_data.pricing_type', 'FIXED_PRICING');
  json.updateInt('batches[i].objects[j].item_data.variations[0].item_variation_data.price_money.amount', 150);
  json.updateString('batches[i].objects[j].item_data.variations[0].item_variation_data.price_money.currency', 'USD');
  j++;
  json.j = j;
  json.updateString('batches[i].objects[j].type', 'ITEM');
  json.updateString('batches[i].objects[j].id', '#Coffee');
  json.updateBool('batches[i].objects[j].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].item_data.name', 'Coffee');
  json.updateString('batches[i].objects[j].item_data.description', 'Hot Bean Juice');
  json.updateString('batches[i].objects[j].item_data.category_id', '#Beverages');
  json.updateString('batches[i].objects[j].item_data.tax_ids[0]', '#SalesTax');
  k = 0;
  json.k = k;
  json.updateString('batches[i].objects[j].item_data.variations[k].type', 'ITEM_VARIATION');
  json.updateString('batches[i].objects[j].item_data.variations[k].id', '#Coffee_Regular');
  json.updateBool('batches[i].objects[j].item_data.variations[k].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.item_id', '#Coffee');
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.name', 'Regular');
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.pricing_type', 'FIXED_PRICING');
  json.updateInt('batches[i].objects[j].item_data.variations[k].item_variation_data.price_money.amount', 250);
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.price_money.currency', 'USD');
  k++;
  json.k = k;
  json.updateString('batches[i].objects[j].item_data.variations[k].type', 'ITEM_VARIATION');
  json.updateString('batches[i].objects[j].item_data.variations[k].id', '#Coffee_Large');
  json.updateBool('batches[i].objects[j].item_data.variations[k].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.item_id', '#Coffee');
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.name', 'Large');
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.pricing_type', 'FIXED_PRICING');
  json.updateInt('batches[i].objects[j].item_data.variations[k].item_variation_data.price_money.amount', 350);
  json.updateString('batches[i].objects[j].item_data.variations[k].item_variation_data.price_money.currency', 'USD');
  j++;
  json.j = j;
  json.updateString('batches[i].objects[j].type', 'CATEGORY');
  json.updateString('batches[i].objects[j].id', '#Beverages');
  json.updateBool('batches[i].objects[j].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].category_data.name', 'Beverages');
  j++;
  json.j = j;
  json.updateString('batches[i].objects[j].type', 'TAX');
  json.updateString('batches[i].objects[j].id', '#SalesTax');
  json.updateBool('batches[i].objects[j].present_at_all_locations', true);
  json.updateString('batches[i].objects[j].tax_data.name', 'Sales Tax');
  json.updateString('batches[i].objects[j].tax_data.calculation_phase', 'TAX_SUBTOTAL_PHASE');
  json.updateString('batches[i].objects[j].tax_data.inclusion_type', 'ADDITIVE');
  json.updateString('batches[i].objects[j].tax_data.percentage', '5.0');
  json.updateBool('batches[i].objects[j].tax_data.applies_to_custom_amounts', true);
  json.updateBool('batches[i].objects[j].tax_data.enabled', true);

  // Adds the "Authorization: Bearer ACCESS_TOKEN" header.
  http.authToken = 'ACCESS_TOKEN';
  http.setRequestHeader('Square-Version', '2020-07-22');

  // This example uses the sandbox: connect.squareupsandbox.com
  // Production should use connect.squareup.com
  final resp = CkHttpResponse();
  try {
    http.httpJson('POST', 'https://connect.squareupsandbox.com/v2/catalog/batch-upsert', json, 'application/json', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final sbResponseBody = CkStringBuilder();
  resp.getBodySb(sbResponseBody);
  final jResp = CkJsonObject();
  jResp.loadSb(sbResponseBody);
  jResp.emitCompact = false;

  print('Response Body:');
  print(jResp.emit());

  final respStatusCode = resp.statusCode;
  print('Response Status Code = $respStatusCode');
  if (respStatusCode >= 400) {
    print('Response Header:');
    print(resp.header);
    print('Failed.');
    return;
  }

  // Sample JSON response:
  // (Sample code for parsing the JSON response is shown below)

  // {
  //   "objects": [
  //     {
  //       "type": "ITEM",
  //       "id": "ZSDZN34NAXDLC6D5ZQMNSOUM",
  //       "updated_at": "2017-05-10T18:48:39.798Z",
  //       "version": 1494442119798,
  //       "is_deleted": false,
  //       "present_at_all_locations": true,
  //       "item_data": {
  //         "name": "Tea",
  //         "description": "Hot Leaf Juice",
  //         "category_id": "LYT72K3WGJFFCIMB63XARP3I",
  //         "tax_ids": [
  //           "XHSHLHNWSI3HVI4BW5ZUZXI3"
  //         ],
  //         "variations": [
  //           {
  //             "type": "ITEM_VARIATION",
  //             "id": "NAYHET5R52MIYCEF34ZMAHFM",
  //             "updated_at": "2017-05-10T18:48:39.798Z",
  //             "version": 1494442119798,
  //             "is_deleted": false,
  //             "present_at_all_locations": true,
  //             "item_variation_data": {
  //               "item_id": "ZSDZN34NAXDLC6D5ZQMNSOUM",
  //               "name": "Mug",
  //               "ordinal": 0,
  //               "pricing_type": "FIXED_PRICING",
  //               "price_money": {
  //                 "amount": 150,
  //                 "currency": "USD"
  //               }
  //             }
  //           }
  //         ]
  //       }
  //     },
  //     {
  //       "type": "ITEM",
  //       "id": "PJMCEBHHUS3OKDB6PYUHLCPP",
  //       "updated_at": "2017-05-10T18:48:39.798Z",
  //       "version": 1494442119798,
  //       "is_deleted": false,
  //       "present_at_all_locations": true,
  //       "item_data": {
  //         "name": "Coffee",
  //         "description": "Hot Bean Juice",
  //         "category_id": "LYT72K3WGJFFCIMB63XARP3I",
  //         "tax_ids": [
  //           "XHSHLHNWSI3HVI4BW5ZUZXI3"
  //         ],
  //         "variations": [
  //           {
  //             "type": "ITEM_VARIATION",
  //             "id": "OTYDX45SPG7LJQUVCBZI4INH",
  //             "updated_at": "2017-05-10T18:48:39.798Z",
  //             "version": 1494442119798,
  //             "is_deleted": false,
  //             "present_at_all_locations": true,
  //             "item_variation_data": {
  //               "item_id": "PJMCEBHHUS3OKDB6PYUHLCPP",
  //               "name": "Regular",
  //               "ordinal": 0,
  //               "pricing_type": "FIXED_PRICING",
  //               "price_money": {
  //                 "amount": 250,
  //                 "currency": "USD"
  //               }
  //             }
  //           },
  //           {
  //             "type": "ITEM_VARIATION",
  //             "id": "GZDA3JB37FYVOPI4AOEBOITI",
  //             "updated_at": "2017-05-10T18:48:39.798Z",
  //             "version": 1494442119798,
  //             "is_deleted": false,
  //             "present_at_all_locations": true,
  //             "item_variation_data": {
  //               "item_id": "PJMCEBHHUS3OKDB6PYUHLCPP",
  //               "name": "Large",
  //               "ordinal": 1,
  //               "pricing_type": "FIXED_PRICING",
  //               "price_money": {
  //                 "amount": 350,
  //                 "currency": "USD"
  //               }
  //             }
  //           }
  //         ]
  //       }
  //     },
  //     {
  //       "type": "CATEGORY",
  //       "id": "LYT72K3WGJFFCIMB63XARP3I",
  //       "updated_at": "2017-05-10T18:48:39.798Z",
  //       "version": 1494442119798,
  //       "is_deleted": false,
  //       "present_at_all_locations": true,
  //       "category_data": {
  //         "name": "Beverages"
  //       }
  //     },
  //     {
  //       "type": "TAX",
  //       "id": "XHSHLHNWSI3HVI4BW5ZUZXI3",
  //       "updated_at": "2017-05-10T18:48:39.798Z",
  //       "version": 1494442119798,
  //       "is_deleted": false,
  //       "present_at_all_locations": true,
  //       "tax_data": {
  //         "name": "Sales Tax",
  //         "calculation_phase": "TAX_SUBTOTAL_PHASE",
  //         "inclusion_type": "ADDITIVE",
  //         "percentage": "5.0",
  //         "applies_to_custom_amounts": true,
  //         "enabled": true
  //       }
  //     }
  //   ],
  //   "id_mappings": [
  //     {
  //       "client_object_id": "#Tea",
  //       "object_id": "ZSDZN34NAXDLC6D5ZQMNSOUM"
  //     },
  //     {
  //       "client_object_id": "#Coffee",
  //       "object_id": "PJMCEBHHUS3OKDB6PYUHLCPP"
  //     },
  //     {
  //       "client_object_id": "#Beverages",
  //       "object_id": "LYT72K3WGJFFCIMB63XARP3I"
  //     },
  //     {
  //       "client_object_id": "#SalesTax",
  //       "object_id": "XHSHLHNWSI3HVI4BW5ZUZXI3"
  //     },
  //     {
  //       "client_object_id": "#Tea_Mug",
  //       "object_id": "NAYHET5R52MIYCEF34ZMAHFM"
  //     },
  //     {
  //       "client_object_id": "#Coffee_Regular",
  //       "object_id": "OTYDX45SPG7LJQUVCBZI4INH"
  //     },
  //     {
  //       "client_object_id": "#Coffee_Large",
  //       "object_id": "GZDA3JB37FYVOPI4AOEBOITI"
  //     }
  //   ]
  // }

  // Sample code for parsing the JSON response...
  // Use the following online tool to generate parsing code from sample JSON:
  // Generate Parsing Code from JSON

  var vType = '';
  var id = '';
  var updatedAt = '';
  var version = 0;
  var itemDataName = '';
  var itemDataDescription = '';
  var itemDataCategoryId = '';
  var categoryDataName = '';
  var taxDataName = '';
  var taxDataCalculationPhase = '';
  var taxDataInclusionType = '';
  var taxDataPercentage = '';
  var countJ = 0;
  var strVal = '';
  var itemVariationDataItemId = '';
  var itemVariationDataName = '';
  var itemVariationDataOrdinal = 0;
  var itemVariationDataPricingType = '';
  var itemVariationDataPriceMoneyAmount = 0;
  var itemVariationDataPriceMoneyCurrency = '';
  var clientObjectId = '';
  var objectId = '';

  i = 0;
  var countI = jResp.sizeOfArray('objects');
  while (i < countI) {
    jResp.i = i;
    vType = jResp.stringOf('objects[i].type');
    id = jResp.stringOf('objects[i].id');
    updatedAt = jResp.stringOf('objects[i].updated_at');
    version = jResp.intOf('objects[i].version');
    jResp.boolOf('objects[i].is_deleted');
    jResp.boolOf('objects[i].present_at_all_locations');
    itemDataName = jResp.stringOf('objects[i].item_data.name');
    itemDataDescription = jResp.stringOf('objects[i].item_data.description');
    itemDataCategoryId = jResp.stringOf('objects[i].item_data.category_id');
    categoryDataName = jResp.stringOf('objects[i].category_data.name');
    taxDataName = jResp.stringOf('objects[i].tax_data.name');
    taxDataCalculationPhase = jResp.stringOf('objects[i].tax_data.calculation_phase');
    taxDataInclusionType = jResp.stringOf('objects[i].tax_data.inclusion_type');
    taxDataPercentage = jResp.stringOf('objects[i].tax_data.percentage');
    jResp.boolOf('objects[i].tax_data.applies_to_custom_amounts');
    jResp.boolOf('objects[i].tax_data.enabled');
    j = 0;
    countJ = jResp.sizeOfArray('objects[i].item_data.tax_ids');
    while (j < countJ) {
      jResp.j = j;
      strVal = jResp.stringOf('objects[i].item_data.tax_ids[j]');
      j++;
    }

    j = 0;
    countJ = jResp.sizeOfArray('objects[i].item_data.variations');
    while (j < countJ) {
      jResp.j = j;
      vType = jResp.stringOf('objects[i].item_data.variations[j].type');
      id = jResp.stringOf('objects[i].item_data.variations[j].id');
      updatedAt = jResp.stringOf('objects[i].item_data.variations[j].updated_at');
      version = jResp.intOf('objects[i].item_data.variations[j].version');
      jResp.boolOf('objects[i].item_data.variations[j].is_deleted');
      jResp.boolOf('objects[i].item_data.variations[j].present_at_all_locations');
      itemVariationDataItemId = jResp.stringOf('objects[i].item_data.variations[j].item_variation_data.item_id');
      itemVariationDataName = jResp.stringOf('objects[i].item_data.variations[j].item_variation_data.name');
      itemVariationDataOrdinal = jResp.intOf('objects[i].item_data.variations[j].item_variation_data.ordinal');
      itemVariationDataPricingType = jResp.stringOf('objects[i].item_data.variations[j].item_variation_data.pricing_type');
      itemVariationDataPriceMoneyAmount = jResp.intOf('objects[i].item_data.variations[j].item_variation_data.price_money.amount');
      itemVariationDataPriceMoneyCurrency = jResp.stringOf('objects[i].item_data.variations[j].item_variation_data.price_money.currency');
      j++;
    }

    i++;
  }

  i = 0;
  countI = jResp.sizeOfArray('id_mappings');
  while (i < countI) {
    jResp.i = i;
    clientObjectId = jResp.stringOf('id_mappings[i].client_object_id');
    objectId = jResp.stringOf('id_mappings[i].object_id');
    i++;
  }
}