Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Shippo Create Shipment Object

See more Shippo Examples

Create a Shipment object to retrieve rates. It represents a request to ship a given package from the sender to the recipient address.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.StringBuilder,
  Chilkat.HttpResponse,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  json: TJsonObject;
  resp: THttpResponse;
  sbResponseBody: TStringBuilder;
  jResp: TJsonObject;
  respStatusCode: Integer;
  object_state: string;
  template: string;
  length: string;
  width: string;
  height: string;
  distance_unit: string;
  weight: string;
  mass_unit: string;
  value_amount: string;
  value_currency: string;
  j: Integer;
  count_j: Integer;
  shipment: string;
  amount: string;
  currency: string;
  amount_local: string;
  currency_local: string;
  provider: string;
  provider_image_75: string;
  provider_image_200: string;
  servicelevelName: string;
  servicelevelToken: string;
  servicelevelTerms: string;
  estimated_days: Integer;
  arrives_by: string;
  duration_terms: string;
  carrier_account: string;
  zone: string;
  strVal: string;
  source: string;
  code: string;
  text: string;
  object_created: string;
  object_updated: string;
  object_id: string;
  object_owner: string;
  status: string;
  address_fromObject_id: string;
  address_fromIs_complete: Boolean;
  address_fromName: string;
  address_fromCompany: string;
  address_fromStreet_no: string;
  address_fromStreet1: string;
  address_fromStreet2: string;
  address_fromStreet3: string;
  address_fromCity: string;
  address_fromState: string;
  address_fromZip: string;
  address_fromCountry: string;
  address_fromPhone: string;
  address_fromEmail: string;
  address_fromIs_residential: string;
  address_fromTest: Boolean;
  address_toObject_id: string;
  address_toIs_complete: Boolean;
  address_toName: string;
  address_toCompany: string;
  address_toStreet_no: string;
  address_toStreet1: string;
  address_toStreet2: string;
  address_toStreet3: string;
  address_toCity: string;
  address_toState: string;
  address_toZip: string;
  address_toCountry: string;
  address_toPhone: string;
  address_toEmail: string;
  address_toIs_residential: string;
  address_toTest: Boolean;
  shipment_date: string;
  address_returnObject_id: string;
  address_returnIs_complete: Boolean;
  address_returnName: string;
  address_returnCompany: string;
  address_returnStreet_no: string;
  address_returnStreet1: string;
  address_returnStreet2: string;
  address_returnStreet3: string;
  address_returnCity: string;
  address_returnState: string;
  address_returnZip: string;
  address_returnCountry: string;
  address_returnPhone: string;
  address_returnEmail: string;
  address_returnIs_residential: string;
  address_returnTest: Boolean;
  alternate_address_to: string;
  customs_declaration: string;
  metadata: string;
  test: Boolean;
  order: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

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

  http := THttp.Create;

  //  Implements the following CURL command:

  //  curl https://api.goshippo.com/shipments/  \
  //      -H "Authorization: ShippoToken <API_TOKEN>" \
  //      -H "Content-Type: application/json"  \
  //      -d '{
  //         "address_from":{
  //            "name":"Mr. Hippo",
  //            "street1":"215 Clayton St.",
  //            "city":"San Francisco",
  //            "state":"CA",
  //            "zip":"94117",
  //            "country":"US"
  //         },
  //         "address_to":{
  //            "name":"Mrs. Hippo",
  //            "street1":"965 Mission St.",
  //            "city":"San Francisco",
  //            "state":"CA",
  //            "zip":"94105",
  //            "country":"US"
  //         },
  //         "parcels":[{
  //            "length":"5",
  //            "width":"5",
  //            "height":"5",
  //            "distance_unit":"in",
  //            "weight":"2",
  //            "mass_unit":"lb"
  //         }],
  //         "async": false
  //      }'

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

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

  //  {
  //    "address_from": {
  //      "name": "Mr. Hippo",
  //      "street1": "215 Clayton St.",
  //      "city": "San Francisco",
  //      "state": "CA",
  //      "zip": "94117",
  //      "country": "US"
  //    },
  //    "address_to": {
  //      "name": "Mrs. Hippo",
  //      "street1": "965 Mission St.",
  //      "city": "San Francisco",
  //      "state": "CA",
  //      "zip": "94105",
  //      "country": "US"
  //    },
  //    "parcels": [
  //      {
  //        "length": "5",
  //        "width": "5",
  //        "height": "5",
  //        "distance_unit": "in",
  //        "weight": "2",
  //        "mass_unit": "lb"
  //      }
  //    ],
  //    "async": false
  //  }

  json := TJsonObject.Create;
  json.UpdateString('address_from.name','Mr. Hippo');
  json.UpdateString('address_from.street1','215 Clayton St.');
  json.UpdateString('address_from.city','San Francisco');
  json.UpdateString('address_from.state','CA');
  json.UpdateString('address_from.zip','94117');
  json.UpdateString('address_from.country','US');
  json.UpdateString('address_to.name','Mrs. Hippo');
  json.UpdateString('address_to.street1','965 Mission St.');
  json.UpdateString('address_to.city','San Francisco');
  json.UpdateString('address_to.state','CA');
  json.UpdateString('address_to.zip','94105');
  json.UpdateString('address_to.country','US');
  json.UpdateString('parcels[0].length','5');
  json.UpdateString('parcels[0].width','5');
  json.UpdateString('parcels[0].height','5');
  json.UpdateString('parcels[0].distance_unit','in');
  json.UpdateString('parcels[0].weight','2');
  json.UpdateString('parcels[0].mass_unit','lb');
  json.UpdateBool('async',False);

  http.SetRequestHeader('Authorization','ShippoToken <API_TOKEN>');
  http.SetRequestHeader('Content-Type','application/json');

  resp := THttpResponse.Create;
  success := http.HttpJson('POST','https://api.goshippo.com/shipments/',json,'application/json',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  sbResponseBody := TStringBuilder.Create;
  resp.GetBodySb(sbResponseBody);
  jResp := TJsonObject.Create;
  jResp.LoadSb(sbResponseBody);
  jResp.EmitCompact := False;

  WriteLn('Response Body:');
  WriteLn(jResp.Emit());

  respStatusCode := resp.StatusCode;
  WriteLn('Response Status Code = ' + respStatusCode);
  if (respStatusCode >= 400) then
    begin
      WriteLn('Response Header:');
      WriteLn(resp.Header);
      WriteLn('Failed.');
      Exit;
    end;

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

  //  {
  //    "carrier_accounts": [
  //    ],
  //    "object_created": "2019-06-28T17:45:20.441Z",
  //    "object_updated": "2019-06-28T17:45:20.511Z",
  //    "object_id": "17b01795a4884d8a9002ccc17c9d09d1",
  //    "object_owner": "admin@chilkatsoft.com",
  //    "status": "SUCCESS",
  //    "address_from": {
  //      "object_id": "427489906b604f498f7bd2429ab7d9a1",
  //      "is_complete": true,
  //      "name": "Mr. Hippo",
  //      "company": "",
  //      "street_no": "",
  //      "street1": "215 Clayton St.",
  //      "validation_results": {},
  //      "street2": "",
  //      "street3": "",
  //      "city": "San Francisco",
  //      "state": "CA",
  //      "zip": "94117",
  //      "country": "US",
  //      "phone": "",
  //      "email": "",
  //      "is_residential": null,
  //      "test": true
  //    },
  //    "address_to": {
  //      "object_id": "3d7166269a2844b7842ef9ace942ec7c",
  //      "is_complete": true,
  //      "name": "Mrs. Hippo",
  //      "company": "",
  //      "street_no": "",
  //      "street1": "965 Mission St.",
  //      "validation_results": {},
  //      "street2": "",
  //      "street3": "",
  //      "city": "San Francisco",
  //      "state": "CA",
  //      "zip": "94105",
  //      "country": "US",
  //      "phone": "",
  //      "email": "",
  //      "is_residential": null,
  //      "test": true
  //    },
  //    "parcels": [
  //      {
  //        "object_state": "VALID",
  //        "object_created": "2019-06-28T17:45:20.411Z",
  //        "object_updated": "2019-06-28T17:45:20.455Z",
  //        "object_id": "5af766ff15684a4186b0e3c833348fac",
  //        "object_owner": "admin@chilkatsoft.com",
  //        "template": null,
  //        "extra": {},
  //        "length": "5.0000",
  //        "width": "5.0000",
  //        "height": "5.0000",
  //        "distance_unit": "in",
  //        "weight": "2.0000",
  //        "mass_unit": "lb",
  //        "value_amount": null,
  //        "value_currency": null,
  //        "metadata": "",
  //        "line_items": [
  //        ],
  //        "test": true
  //      }
  //    ],
  //    "shipment_date": "2019-06-28T17:45:20.511Z",
  //    "address_return": {
  //      "object_id": "427489906b604f498f7bd2429ab7d9a1",
  //      "is_complete": true,
  //      "name": "Mr. Hippo",
  //      "company": "",
  //      "street_no": "",
  //      "street1": "215 Clayton St.",
  //      "validation_results": {},
  //      "street2": "",
  //      "street3": "",
  //      "city": "San Francisco",
  //      "state": "CA",
  //      "zip": "94117",
  //      "country": "US",
  //      "phone": "",
  //      "email": "",
  //      "is_residential": null,
  //      "test": true
  //    },
  //    "alternate_address_to": null,
  //    "customs_declaration": null,
  //    "extra": {},
  //    "rates": [
  //      {
  //        "object_created": "2019-06-28T17:45:20.789Z",
  //        "object_id": "dd7556c284e8444294d2ab7099e662d2",
  //        "object_owner": "admin@chilkatsoft.com",
  //        "shipment": "17b01795a4884d8a9002ccc17c9d09d1",
  //        "attributes": [
  //          "FASTEST"
  //        ],
  //        "amount": "22.78",
  //        "currency": "USD",
  //        "amount_local": "22.78",
  //        "currency_local": "USD",
  //        "provider": "USPS",
  //        "provider_image_75": "https://shippo-static.s3.amazonaws.com/providers/75/USPS.png",
  //        "provider_image_200": "https://shippo-static.s3.amazonaws.com/providers/200/USPS.png",
  //        "servicelevel": {
  //          "name": "Priority Mail Express",
  //          "token": "usps_priority_express",
  //          "terms": ""
  //        },
  //        "estimated_days": 2,
  //        "arrives_by": null,
  //        "duration_terms": "Overnight delivery to most U.S. locations.",
  //        "messages": [
  //        ],
  //        "carrier_account": "1f3dc340ad6c4991ad61f14fa3e4b82e",
  //        "test": true,
  //        "zone": "1"
  //      },
  //      {
  //        "object_created": "2019-06-28T17:45:20.786Z",
  //        "object_id": "ec11cc297e2f4583986097f6d409e5c6",
  //        "object_owner": "admin@chilkatsoft.com",
  //        "shipment": "17b01795a4884d8a9002ccc17c9d09d1",
  //        "attributes": [
  //          "BESTVALUE",
  //          "CHEAPEST",
  //          "FASTEST"
  //        ],
  //        "amount": "6.95",
  //        "currency": "USD",
  //        "amount_local": "6.95",
  //        "currency_local": "USD",
  //        "provider": "USPS",
  //        "provider_image_75": "https://shippo-static.s3.amazonaws.com/providers/75/USPS.png",
  //        "provider_image_200": "https://shippo-static.s3.amazonaws.com/providers/200/USPS.png",
  //        "servicelevel": {
  //          "name": "Priority Mail",
  //          "token": "usps_priority",
  //          "terms": ""
  //        },
  //        "estimated_days": 2,
  //        "arrives_by": null,
  //        "duration_terms": "Delivery within 1, 2, or 3 days based on where your package started and where it’s being sent.",
  //        "messages": [
  //        ],
  //        "carrier_account": "1f3dc340ad6c4991ad61f14fa3e4b82e",
  //        "test": true,
  //        "zone": "1"
  //      },
  //      {
  //        "object_created": "2019-06-28T17:45:20.785Z",
  //        "object_id": "d256586f539f4c93a2f02cc11f4942ac",
  //        "object_owner": "admin@chilkatsoft.com",
  //        "shipment": "17b01795a4884d8a9002ccc17c9d09d1",
  //        "attributes": [
  //        ],
  //        "amount": "7.32",
  //        "currency": "USD",
  //        "amount_local": "7.32",
  //        "currency_local": "USD",
  //        "provider": "USPS",
  //        "provider_image_75": "https://shippo-static.s3.amazonaws.com/providers/75/USPS.png",
  //        "provider_image_200": "https://shippo-static.s3.amazonaws.com/providers/200/USPS.png",
  //        "servicelevel": {
  //          "name": "Parcel Select",
  //          "token": "usps_parcel_select",
  //          "terms": ""
  //        },
  //        "estimated_days": 7,
  //        "arrives_by": null,
  //        "duration_terms": "Delivery in 2 to 8 days.",
  //        "messages": [
  //        ],
  //        "carrier_account": "1f3dc340ad6c4991ad61f14fa3e4b82e",
  //        "test": true,
  //        "zone": "1"
  //      }
  //    ],
  //    "messages": [
  //      {
  //        "source": "DHLExpress",
  //        "code": "",
  //        "text": "Shippo's DHL Express master account doesn't support shipments to inside of the US"
  //      }
  //    ],
  //    "metadata": "",
  //    "test": true,
  //    "order": null
  //  }

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

  object_created := jResp.StringOf('object_created');
  object_updated := jResp.StringOf('object_updated');
  object_id := jResp.StringOf('object_id');
  object_owner := jResp.StringOf('object_owner');
  status := jResp.StringOf('status');
  address_fromObject_id := jResp.StringOf('address_from.object_id');
  address_fromIs_complete := jResp.BoolOf('address_from.is_complete');
  address_fromName := jResp.StringOf('address_from.name');
  address_fromCompany := jResp.StringOf('address_from.company');
  address_fromStreet_no := jResp.StringOf('address_from.street_no');
  address_fromStreet1 := jResp.StringOf('address_from.street1');
  address_fromStreet2 := jResp.StringOf('address_from.street2');
  address_fromStreet3 := jResp.StringOf('address_from.street3');
  address_fromCity := jResp.StringOf('address_from.city');
  address_fromState := jResp.StringOf('address_from.state');
  address_fromZip := jResp.StringOf('address_from.zip');
  address_fromCountry := jResp.StringOf('address_from.country');
  address_fromPhone := jResp.StringOf('address_from.phone');
  address_fromEmail := jResp.StringOf('address_from.email');
  address_fromIs_residential := jResp.StringOf('address_from.is_residential');
  address_fromTest := jResp.BoolOf('address_from.test');
  address_toObject_id := jResp.StringOf('address_to.object_id');
  address_toIs_complete := jResp.BoolOf('address_to.is_complete');
  address_toName := jResp.StringOf('address_to.name');
  address_toCompany := jResp.StringOf('address_to.company');
  address_toStreet_no := jResp.StringOf('address_to.street_no');
  address_toStreet1 := jResp.StringOf('address_to.street1');
  address_toStreet2 := jResp.StringOf('address_to.street2');
  address_toStreet3 := jResp.StringOf('address_to.street3');
  address_toCity := jResp.StringOf('address_to.city');
  address_toState := jResp.StringOf('address_to.state');
  address_toZip := jResp.StringOf('address_to.zip');
  address_toCountry := jResp.StringOf('address_to.country');
  address_toPhone := jResp.StringOf('address_to.phone');
  address_toEmail := jResp.StringOf('address_to.email');
  address_toIs_residential := jResp.StringOf('address_to.is_residential');
  address_toTest := jResp.BoolOf('address_to.test');
  shipment_date := jResp.StringOf('shipment_date');
  address_returnObject_id := jResp.StringOf('address_return.object_id');
  address_returnIs_complete := jResp.BoolOf('address_return.is_complete');
  address_returnName := jResp.StringOf('address_return.name');
  address_returnCompany := jResp.StringOf('address_return.company');
  address_returnStreet_no := jResp.StringOf('address_return.street_no');
  address_returnStreet1 := jResp.StringOf('address_return.street1');
  address_returnStreet2 := jResp.StringOf('address_return.street2');
  address_returnStreet3 := jResp.StringOf('address_return.street3');
  address_returnCity := jResp.StringOf('address_return.city');
  address_returnState := jResp.StringOf('address_return.state');
  address_returnZip := jResp.StringOf('address_return.zip');
  address_returnCountry := jResp.StringOf('address_return.country');
  address_returnPhone := jResp.StringOf('address_return.phone');
  address_returnEmail := jResp.StringOf('address_return.email');
  address_returnIs_residential := jResp.StringOf('address_return.is_residential');
  address_returnTest := jResp.BoolOf('address_return.test');
  alternate_address_to := jResp.StringOf('alternate_address_to');
  customs_declaration := jResp.StringOf('customs_declaration');
  metadata := jResp.StringOf('metadata');
  test := jResp.BoolOf('test');
  order := jResp.StringOf('order');
  i := 0;
  count_i := jResp.SizeOfArray('carrier_accounts');
  while i < count_i do
    begin
      jResp.I := i;
      i := i + 1;
    end;

  i := 0;
  count_i := jResp.SizeOfArray('parcels');
  while i < count_i do
    begin
      jResp.I := i;
      object_state := jResp.StringOf('parcels[i].object_state');
      object_created := jResp.StringOf('parcels[i].object_created');
      object_updated := jResp.StringOf('parcels[i].object_updated');
      object_id := jResp.StringOf('parcels[i].object_id');
      object_owner := jResp.StringOf('parcels[i].object_owner');
      template := jResp.StringOf('parcels[i].template');
      length := jResp.StringOf('parcels[i].length');
      width := jResp.StringOf('parcels[i].width');
      height := jResp.StringOf('parcels[i].height');
      distance_unit := jResp.StringOf('parcels[i].distance_unit');
      weight := jResp.StringOf('parcels[i].weight');
      mass_unit := jResp.StringOf('parcels[i].mass_unit');
      value_amount := jResp.StringOf('parcels[i].value_amount');
      value_currency := jResp.StringOf('parcels[i].value_currency');
      metadata := jResp.StringOf('parcels[i].metadata');
      test := jResp.BoolOf('parcels[i].test');
      j := 0;
      count_j := jResp.SizeOfArray('parcels[i].line_items');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      i := i + 1;
    end;

  i := 0;
  count_i := jResp.SizeOfArray('rates');
  while i < count_i do
    begin
      jResp.I := i;
      object_created := jResp.StringOf('rates[i].object_created');
      object_id := jResp.StringOf('rates[i].object_id');
      object_owner := jResp.StringOf('rates[i].object_owner');
      shipment := jResp.StringOf('rates[i].shipment');
      amount := jResp.StringOf('rates[i].amount');
      currency := jResp.StringOf('rates[i].currency');
      amount_local := jResp.StringOf('rates[i].amount_local');
      currency_local := jResp.StringOf('rates[i].currency_local');
      provider := jResp.StringOf('rates[i].provider');
      provider_image_75 := jResp.StringOf('rates[i].provider_image_75');
      provider_image_200 := jResp.StringOf('rates[i].provider_image_200');
      servicelevelName := jResp.StringOf('rates[i].servicelevel.name');
      servicelevelToken := jResp.StringOf('rates[i].servicelevel.token');
      servicelevelTerms := jResp.StringOf('rates[i].servicelevel.terms');
      estimated_days := jResp.IntOf('rates[i].estimated_days');
      arrives_by := jResp.StringOf('rates[i].arrives_by');
      duration_terms := jResp.StringOf('rates[i].duration_terms');
      carrier_account := jResp.StringOf('rates[i].carrier_account');
      test := jResp.BoolOf('rates[i].test');
      zone := jResp.StringOf('rates[i].zone');
      j := 0;
      count_j := jResp.SizeOfArray('rates[i].attributes');
      while j < count_j do
        begin
          jResp.J := j;
          strVal := jResp.StringOf('rates[i].attributes[j]');
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('rates[i].messages');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      i := i + 1;
    end;

  i := 0;
  count_i := jResp.SizeOfArray('messages');
  while i < count_i do
    begin
      jResp.I := i;
      source := jResp.StringOf('messages[i].source');
      code := jResp.StringOf('messages[i].code');
      text := jResp.StringOf('messages[i].text');
      i := i + 1;
    end;



  http.Free;
  json.Free;
  resp.Free;
  sbResponseBody.Free;
  jResp.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.