{
  "service": "aftership",
  "displayName": "AfterShip",
  "categories": [
    "Productivity",
    "Location"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "AFTERSHIP_API_KEY",
      "description": "AfterShip API key used with the as-api-key header. Create or manage API keys in AfterShip organization settings: https://admin.aftership.com/settings/api-keys."
    }
  ],
  "homepageUrl": "https://www.aftership.com/",
  "actions": [
    {
      "id": "aftership.create_tracking",
      "service": "aftership",
      "name": "create_tracking",
      "description": "Create an AfterShip tracking record for a shipment.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "A custom tracking ID. AfterShip generates one if omitted."
          },
          "tracking_number": {
            "type": "string",
            "minLength": 1,
            "description": "The carrier tracking number of the shipment."
          },
          "slug": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip courier slug, such as dhl, ups, or usps."
          },
          "slug_group": {
            "type": "string",
            "minLength": 1,
            "description": "A courier slug group such as fedex-group."
          },
          "shipment_tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "A shipment tag."
            },
            "description": "Shipment tag strings attached to the tracking."
          },
          "courier_connection_id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip courier connection ID."
          },
          "last_mile": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip courier slug, such as dhl, ups, or usps."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A user-facing tracking title, such as an order number."
          },
          "order_id": {
            "type": "string",
            "minLength": 1,
            "description": "A globally unique identifier for the order."
          },
          "custom_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "description": "One custom field value."
            },
            "description": "Custom tracking fields sent to AfterShip as string key-value pairs."
          },
          "order_id_path": {
            "type": "string",
            "minLength": 1,
            "description": "The URL for the order in your system or store."
          },
          "language": {
            "type": "string",
            "minLength": 1,
            "description": "The recipient's ISO 639-1 language code for notifications."
          },
          "order_promised_delivery_date": {
            "type": "object",
            "properties": {
              "promised_delivery_date": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promised_delivery_date_min": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The earliest promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promised_delivery_date_max": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The latest promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "The promised delivery date range in the shipment recipient's timezone."
          },
          "pickup_location": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment pickup location for the receiver."
          },
          "delivery_type": {
            "type": "string",
            "enum": [
              "pickup_at_store",
              "door_to_door",
              "pickup_at_courier"
            ],
            "description": "The shipment delivery type."
          },
          "pickup_note": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment pickup note for the receiver."
          },
          "tracking_account_number": {
            "type": "string",
            "minLength": 1,
            "description": "The shipper's carrier account number."
          },
          "tracking_key": {
            "type": "string",
            "minLength": 1,
            "description": "A carrier-specific tracking credential."
          },
          "tracking_ship_date": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment ship date."
          },
          "origin_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The origin country or region as an ISO Alpha-3 code."
          },
          "origin_state": {
            "type": "string",
            "minLength": 1,
            "description": "The origin state or province."
          },
          "origin_city": {
            "type": "string",
            "minLength": 1,
            "description": "The origin city."
          },
          "origin_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The origin postal code."
          },
          "origin_raw_location": {
            "type": "string",
            "minLength": 1,
            "description": "The origin address or raw location text."
          },
          "destination_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The destination country or region as an ISO Alpha-3 code."
          },
          "destination_state": {
            "type": "string",
            "minLength": 1,
            "description": "The destination state or province."
          },
          "destination_city": {
            "type": "string",
            "minLength": 1,
            "description": "The destination city."
          },
          "destination_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The destination postal code."
          },
          "destination_raw_location": {
            "type": "string",
            "minLength": 1,
            "description": "The destination address or raw location text."
          },
          "note": {
            "type": "string",
            "minLength": 1,
            "description": "A note attached to the tracking."
          },
          "order_date": {
            "type": "string",
            "minLength": 1,
            "description": "The order date."
          },
          "order_number": {
            "type": "string",
            "minLength": 1,
            "description": "The order number."
          },
          "shipment_type": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment type."
          },
          "location_id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip location ID."
          },
          "shipping_method": {
            "type": "string",
            "minLength": 1,
            "description": "The shipping method name."
          },
          "customers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The customer's display name."
                },
                "email": {
                  "type": "string",
                  "description": "The customer's email address.",
                  "format": "email"
                },
                "phone_number": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The customer's phone number."
                }
              },
              "additionalProperties": false,
              "description": "A shipment customer contact to attach to the tracking."
            },
            "description": "Customer contacts attached to the tracking."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking_number"
        ],
        "description": "The AfterShip tracking fields to create."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    },
    {
      "id": "aftership.delete_tracking",
      "service": "aftership",
      "name": "delete_tracking",
      "description": "Delete an AfterShip tracking record by tracking ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip tracking ID."
          }
        },
        "additionalProperties": false,
        "description": "The input for deleting one AfterShip tracking."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    },
    {
      "id": "aftership.detect_couriers",
      "service": "aftership",
      "name": "detect_couriers",
      "description": "Detect possible AfterShip couriers for a tracking number.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "tracking_number": {
            "type": "string",
            "minLength": 1,
            "description": "The carrier tracking number to inspect."
          },
          "slug": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "The AfterShip courier slug, such as dhl, ups, or usps."
            },
            "description": "Courier slugs to limit auto-detection to."
          },
          "destination_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The destination postal code."
          },
          "tracking_ship_date": {
            "type": "string",
            "minLength": 1,
            "description": "The shipping date in YYYYMMDD format."
          },
          "tracking_account_number": {
            "type": "string",
            "minLength": 1,
            "description": "The shipper's carrier account number."
          },
          "tracking_key": {
            "type": "string",
            "minLength": 1,
            "description": "A carrier-specific tracking credential."
          },
          "destination_state": {
            "type": "string",
            "minLength": 1,
            "description": "The destination state or province."
          },
          "slug_group": {
            "type": "string",
            "minLength": 1,
            "description": "A courier slug group such as fedex-group."
          },
          "origin_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The origin country or region as an ISO Alpha-3 code."
          },
          "destination_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The destination country or region as an ISO Alpha-3 code."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking_number"
        ],
        "description": "The shipment fields used to detect possible couriers."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "couriers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "A JSON object returned by AfterShip."
            },
            "description": "The matched AfterShip courier records."
          },
          "total": {
            "type": "integer",
            "description": "The total count returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "couriers",
          "total",
          "meta",
          "raw"
        ],
        "description": "The normalized response returned when detecting AfterShip couriers."
      }
    },
    {
      "id": "aftership.get_tracking",
      "service": "aftership",
      "name": "get_tracking",
      "description": "Retrieve one AfterShip tracking record by tracking ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip tracking ID."
          },
          "fields": {
            "type": "string",
            "minLength": 1,
            "description": "A comma-separated list of response fields to include."
          },
          "lang": {
            "type": "string",
            "minLength": 1,
            "description": "The language code used to translate checkpoint messages."
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "description": "The input for retrieving one AfterShip tracking."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    },
    {
      "id": "aftership.list_couriers",
      "service": "aftership",
      "name": "list_couriers",
      "description": "List AfterShip couriers, optionally limited to active couriers or slugs.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean",
            "description": "Whether to return only couriers activated for the account."
          },
          "slug": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "The AfterShip courier slug, such as dhl, ups, or usps."
            },
            "description": "Courier slugs to filter by.",
            "minItems": 1
          }
        },
        "additionalProperties": false,
        "description": "The filters for listing AfterShip couriers."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "couriers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "A JSON object returned by AfterShip."
            },
            "description": "The AfterShip courier records returned by the API."
          },
          "total": {
            "type": "integer",
            "description": "The total count returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "couriers",
          "total",
          "meta",
          "raw"
        ],
        "description": "The normalized response returned when listing AfterShip couriers."
      }
    },
    {
      "id": "aftership.list_trackings",
      "service": "aftership",
      "name": "list_trackings",
      "description": "List AfterShip trackings with cursor pagination and shipment filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": "string",
            "minLength": 1,
            "description": "The cursor value for the current page of results."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "The number of trackings to return on each page."
          },
          "keyword": {
            "type": "string",
            "minLength": 1,
            "description": "Search tracking numbers, titles, order IDs, customers, and custom fields."
          },
          "tracking_numbers": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One tracking number."
            },
            "description": "Tracking numbers to filter by. AfterShip supports up to 50 values.",
            "minItems": 1,
            "maxItems": 50
          },
          "slug": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "The AfterShip courier slug, such as dhl, ups, or usps."
            },
            "description": "Courier slugs to filter by.",
            "minItems": 1
          },
          "transit_time": {
            "type": "integer",
            "description": "Total delivery time in days."
          },
          "origin": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One origin code."
            },
            "description": "Origin ISO Alpha-3 country or region codes."
          },
          "destination": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One destination code."
            },
            "description": "Destination ISO Alpha-3 country or region codes."
          },
          "tag": {
            "type": "string",
            "enum": [
              "Pending",
              "InfoReceived",
              "InTransit",
              "OutForDelivery",
              "AttemptFail",
              "Delivered",
              "AvailableForPickup",
              "Exception",
              "Expired"
            ],
            "description": "The current shipment delivery status."
          },
          "created_at_min": {
            "type": "string",
            "minLength": 1,
            "description": "Only include trackings created at or after this timestamp."
          },
          "created_at_max": {
            "type": "string",
            "minLength": 1,
            "description": "Only include trackings created at or before this timestamp."
          },
          "updated_at_min": {
            "type": "string",
            "minLength": 1,
            "description": "Only include trackings updated at or after this timestamp."
          },
          "updated_at_max": {
            "type": "string",
            "minLength": 1,
            "description": "Only include trackings updated at or before this timestamp."
          },
          "fields": {
            "type": "string",
            "minLength": 1,
            "description": "A comma-separated list of response fields to include."
          },
          "return_to_sender": {
            "type": "boolean",
            "description": "Whether to filter return-to-sender shipments."
          },
          "courier_destination_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The courier destination country or region to filter by."
          },
          "shipment_tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One shipment tag."
            },
            "description": "Shipment tags to filter by."
          },
          "order_id": {
            "type": "string",
            "minLength": 1,
            "description": "The order ID to filter by."
          }
        },
        "additionalProperties": false,
        "description": "The filters and pagination parameters for listing AfterShip trackings."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "trackings": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "A JSON object returned by AfterShip."
            },
            "description": "The AfterShip tracking records returned for the page."
          },
          "pagination": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "trackings",
          "pagination",
          "meta",
          "raw"
        ],
        "description": "The normalized response returned when listing AfterShip trackings."
      }
    },
    {
      "id": "aftership.mark_tracking_completed",
      "service": "aftership",
      "name": "mark_tracking_completed",
      "description": "Mark an AfterShip tracking record as completed by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip tracking ID."
          },
          "reason": {
            "type": "string",
            "enum": [
              "DELIVERED",
              "LOST",
              "RETURNED_TO_SENDER"
            ],
            "description": "The reason for marking the tracking as completed."
          },
          "event_datetime": {
            "type": "string",
            "minLength": 1,
            "description": "The completion event timestamp."
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "reason"
        ],
        "description": "The input for marking an AfterShip tracking as completed."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    },
    {
      "id": "aftership.retrack_tracking",
      "service": "aftership",
      "name": "retrack_tracking",
      "description": "Ask AfterShip to retrack an expired tracking record by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip tracking ID."
          }
        },
        "additionalProperties": false,
        "description": "The input for retracking an expired AfterShip tracking."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    },
    {
      "id": "aftership.update_tracking",
      "service": "aftership",
      "name": "update_tracking",
      "description": "Update editable fields on an AfterShip tracking record.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip tracking ID."
          },
          "slug": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip courier slug, such as dhl, ups, or usps."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A user-facing tracking title, such as an order number."
          },
          "order_id": {
            "type": "string",
            "minLength": 1,
            "description": "A globally unique identifier for the order."
          },
          "custom_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "description": "One custom field value."
            },
            "description": "Custom tracking fields sent to AfterShip as string key-value pairs."
          },
          "order_id_path": {
            "type": "string",
            "minLength": 1,
            "description": "The URL for the order in your system or store."
          },
          "language": {
            "type": "string",
            "minLength": 1,
            "description": "The recipient's ISO 639-1 language code for notifications."
          },
          "order_promised_delivery_date": {
            "type": "object",
            "properties": {
              "promised_delivery_date": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promised_delivery_date_min": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The earliest promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "promised_delivery_date_max": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "The latest promised delivery date."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "description": "The promised delivery date range in the shipment recipient's timezone."
          },
          "pickup_location": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment pickup location for the receiver."
          },
          "delivery_type": {
            "type": "string",
            "enum": [
              "pickup_at_store",
              "door_to_door",
              "pickup_at_courier"
            ],
            "description": "The shipment delivery type."
          },
          "pickup_note": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment pickup note for the receiver."
          },
          "tracking_account_number": {
            "type": "string",
            "minLength": 1,
            "description": "The shipper's carrier account number."
          },
          "tracking_key": {
            "type": "string",
            "minLength": 1,
            "description": "A carrier-specific tracking credential."
          },
          "tracking_ship_date": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment ship date."
          },
          "origin_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The origin country or region as an ISO Alpha-3 code."
          },
          "origin_state": {
            "type": "string",
            "minLength": 1,
            "description": "The origin state or province."
          },
          "origin_city": {
            "type": "string",
            "minLength": 1,
            "description": "The origin city."
          },
          "origin_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The origin postal code."
          },
          "origin_raw_location": {
            "type": "string",
            "minLength": 1,
            "description": "The origin address or raw location text."
          },
          "destination_country_region": {
            "type": "string",
            "minLength": 1,
            "description": "The destination country or region as an ISO Alpha-3 code."
          },
          "destination_state": {
            "type": "string",
            "minLength": 1,
            "description": "The destination state or province."
          },
          "destination_city": {
            "type": "string",
            "minLength": 1,
            "description": "The destination city."
          },
          "destination_postal_code": {
            "type": "string",
            "minLength": 1,
            "description": "The destination postal code."
          },
          "destination_raw_location": {
            "type": "string",
            "minLength": 1,
            "description": "The destination address or raw location text."
          },
          "note": {
            "type": "string",
            "minLength": 1,
            "description": "A note attached to the tracking."
          },
          "order_date": {
            "type": "string",
            "minLength": 1,
            "description": "The order date."
          },
          "order_number": {
            "type": "string",
            "minLength": 1,
            "description": "The order number."
          },
          "shipment_type": {
            "type": "string",
            "minLength": 1,
            "description": "The shipment type."
          },
          "location_id": {
            "type": "string",
            "minLength": 1,
            "description": "The AfterShip location ID."
          },
          "shipping_method": {
            "type": "string",
            "minLength": 1,
            "description": "The shipping method name."
          },
          "customers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The customer's display name."
                },
                "email": {
                  "type": "string",
                  "description": "The customer's email address.",
                  "format": "email"
                },
                "phone_number": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The customer's phone number."
                }
              },
              "additionalProperties": false,
              "description": "A shipment customer contact to attach to the tracking."
            },
            "description": "Customer contacts attached to the tracking."
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "description": "The AfterShip tracking fields to update."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "tracking": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "A JSON object returned by AfterShip."
          }
        },
        "additionalProperties": false,
        "required": [
          "tracking",
          "meta",
          "raw"
        ],
        "description": "A normalized AfterShip tracking response."
      }
    }
  ]
}
