{
  "openapi": "3.0.1",
  "info": {
    "title": "Container Load Planner: 3D Truck, Trailer & Pallet Loading",
    "description": "3D load plans for shipping containers (20ft, 40ft, 40ft HC), trailers, trucks and pallets: weights, payloads, stacking limits, this-side-up, floor-only, delivery stops, center of gravity. Loading steps, 3D viewer, PDF and CSV. Text, JSON or CSV input. For AI agents.",
    "version": "0.1",
    "x-build-id": "DuF9mK928BUBalgnk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jumblemog~load-planner/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jumblemog-load-planner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/jumblemog~load-planner/runs": {
      "post": {
        "operationId": "runs-sync-jumblemog-load-planner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/jumblemog~load-planner/run-sync": {
      "post": {
        "operationId": "run-sync-jumblemog-load-planner",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "cargo": {
            "title": "Cargo to load",
            "type": "array",
            "description": "One cargo line per entry, as text or an object. Text: \"Carton: 60 x 40 x 40 cm, 14 kg, qty 120, upright\": the name, length x width x height, the weight of one piece, the quantity, then any of: upright / any side / fixed (how it may turn), no stack (nothing on top), max load 100 kg (most weight on top), stack 3 high, floor only, stop 2 (delivery stop; stop 1 is unloaded first), priority or optional, group: PO-123, color: #2a78d6. Loaded pallets: \"EUR pallet, 150 cm tall, 450 kg, qty 20\". Objects: {\"name\": \"Carton\", \"length\": 60, \"width\": 40, \"height\": 40, \"unit\": \"cm\", \"weight\": 14, \"quantity\": 120, \"rotation\": \"upright\", \"stackable\": true, \"maxLoad\": 100, \"floorOnly\": false, \"stop\": 1}."
          },
          "containers": {
            "title": "Containers, trailers, trucks or pallets",
            "type": "array",
            "description": "What to load into, as text or objects. Named sizes: 20ft, 40ft, 40ft HC, 45ft HC, 20ft reefer, 40ft HC reefer, 53ft trailer, 48ft trailer, 13.6 m trailer, mega trailer, 26ft box truck, 16ft box truck, 7.5 t truck, EUR pallet, US pallet (48 x 40), UK pallet, half EUR pallet. Add a price, a quantity or limits: \"40ft HC, $3,200\", \"20ft x 2\", \"EUR pallet, max height 180 cm, max 800 kg\". Your own: \"Van: 330 x 170 x 180 cm, max 1,200 kg\" (inside sizes). Objects: {\"name\": \"Truck\", \"length\": 600, \"width\": 245, \"height\": 250, \"unit\": \"cm\", \"maxWeight\": 5000, \"price\": 800, \"quantity\": 2}. With several types, the plan picks the mix. Empty: 40ft high cube containers."
          },
          "cargoCsv": {
            "title": "Cargo as CSV or link",
            "type": "string",
            "description": "Cargo as CSV or TSV text with a header row such as name,length,width,height,quantity,weight,stackable,rotation,stop, or a link to a CSV, Excel or JSON file or a Google Sheet (shared to anyone with the link). Without a header the columns are name, length, width, height, quantity, weight. Added to Cargo to load."
          },
          "containersCsv": {
            "title": "Containers as CSV or link",
            "type": "string",
            "description": "Containers as CSV text with a header row such as name,length,width,height,maxWeight,price,quantity, or a link to a file or Google Sheet. Added to Containers."
          },
          "units": {
            "title": "Units",
            "enum": [
              "auto",
              "cm",
              "mm",
              "m",
              "in",
              "ft",
              "metric",
              "imperial"
            ],
            "type": "string",
            "description": "The unit of sizes written without one. Results come in centimeters and kilograms, or inches and pounds when the sizes are imperial. Automatic uses the unit written with the sizes, or guesses and says so in the notes.",
            "default": "auto"
          },
          "weightUnit": {
            "title": "Weight unit",
            "enum": [
              "auto",
              "kg",
              "lb",
              "t"
            ],
            "type": "string",
            "description": "The unit of weights written without one.",
            "default": "auto"
          },
          "rotation": {
            "title": "How cargo may turn",
            "enum": [
              "upright",
              "any",
              "fixed"
            ],
            "type": "string",
            "description": "For cargo lines that don't say. Upright keeps every piece's height up and lets it turn a quarter turn; any side tries all six ways; fixed keeps length along the container's length.",
            "default": "upright"
          },
          "minSupport": {
            "title": "Support under each piece (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How much of a piece's base must rest on the floor or on pieces below it. 100 means fully supported; lower values allow overhangs.",
            "default": 75
          },
          "goal": {
            "title": "Optimize for",
            "enum": [
              "fewest",
              "cheapest"
            ],
            "type": "string",
            "description": "What the plan makes as small as it can when several container types are given.",
            "default": "fewest"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "The currency of container prices, such as $, € or EUR. Empty: the one written with the prices, or $."
          },
          "title": {
            "title": "Title",
            "type": "string",
            "description": "A title for the plan and its files, such as Order 4512 to Rotterdam."
          },
          "timeLimitSeconds": {
            "title": "Time limit per plan (seconds)",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "How long to try other loading orders for a better plan. Most loads are done in a few seconds; large mixed loads (thousands of pieces) gain from 30 to 60 seconds. Searching past 30 seconds is billed per started 10 seconds.",
            "default": 10
          },
          "jobs": {
            "title": "Several jobs",
            "type": "array",
            "description": "Plan several loads in one run: a list of objects with their own cargo, containers or settings (any field above). Fields not given come from above: [{\"title\": \"Order 1\", \"cargo\": [...]}, {\"title\": \"Order 2\", \"cargo\": [...], \"containers\": [\"53ft trailer\"]}]."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}