Packing slip parsing API

Warehouses and 3PLs drown in packing slips and shipping labels — each order arrives with a document that has to be reconciled against what was purchased and what physically shipped. The AIDataParser packing slip parsing API converts those documents into structured JSON: order number, ship date, carrier, tracking number, ship-to address, and an array of shipped items with SKUs and quantities. Define your schema and every slip, from any vendor, returns in the same shape.

This is what makes inbound receiving and shipment verification automatable. Each shipped line is a discrete object, so comparing the packing slip against the original purchase order — catching short-ships and wrong SKUs — becomes a programmatic diff instead of a clipboard task. Carrier and tracking fields feed straight into delivery-tracking logic without manual copy-paste.

For logistics platforms and fulfillment agents, POST the slip by photo or PDF, get structured data back for one credit, and use review_needed to flag smudged or partial scans on the dock. Because extraction is schema-first rather than per-vendor templated, onboarding a new supplier's slip format needs zero new parsing code.

Fields you can extract from a packing slip

order_numberstring

Associated order ID.

ship_datestring

Date shipped.

carrierstring

Shipping carrier.

tracking_numberstring

Carrier tracking ID.

ship_tostring

Destination address.

itemsarray

SKU and quantity shipped.

Example request

POST the packing slip by URL, upload, or base64, with a JSON Schema describing the output you want.

curl -X POST https://aidataparser.com/v1/parse/document \
  -H "Authorization: Bearer adp_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/packing-slip.pdf",
    "schema": {
      "type": "object",
      "properties": {
        "order_number": {
          "type": "string"
        },
        "ship_date": {
          "type": "string"
        },
        "carrier": {
          "type": "string"
        },
        "tracking_number": {
          "type": "string"
        },
        "ship_to": {
          "type": "string"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string"
              },
              "quantity": {
                "type": "number"
              }
            }
          }
        }
      }
    }
  }'

Example response

The data field is guaranteed to match your schema.

{
  "object": "parse.document",
  "data": {
    "order_number": "SO-77213",
    "ship_date": "2026-07-08",
    "carrier": "UPS",
    "tracking_number": "1Z999AA10123456784",
    "ship_to": "88 Market St, Austin, TX 78701",
    "items": [
      {
        "sku": "WIDGET-BLK",
        "quantity": 12
      },
      {
        "sku": "GADGET-02",
        "quantity": 3
      }
    ]
  },
  "confidence": "high",
  "review_needed": false,
  "credits_charged": 1,
  "credits_remaining": 49
}

FAQ

Can it read the tracking number and carrier off a shipping label?

Yes. Include carrier and tracking_number in your schema and both are extracted, ready to feed into delivery-tracking or notification logic.

Does it help catch short-ships?

Yes. Shipped items are returned as discrete SKU/quantity objects, so you can diff the packing slip against the purchase order programmatically to flag missing or wrong items.

What if a slip is smudged or partially scanned?

Confidence drops and review_needed is set so a person can verify it, and no credit is charged when extraction fails outright.

More document types