Solver as a Service
Sign Up Now →Sign Up Now

First hosted solve: a complete request

Preview

For a ready-to-run project, begin with the Python and Node.js starter download. It includes the project layout, a sample request, a Python HTTP client and a Node.js client using the built-in fetch API. Download and unpack it, or use the git clone command in its README. Request the API origin and bearer token for your account from your service operator, put those values in the ignored .env file, then run either implementation as described in its README. The hosted path uses the Solver API and does not ask you to download a license file or local solver binaries. Self-hosted and embedded execution are different distributions; follow their supplied installation and licensing instructions.

The starter uses the documented REST contract because a general external Python or Node.js Solver SDK is not currently published. Its two examples are small clients over that API, not SDK packages. Once the starter succeeds, use the request and API examples below to understand the same contract in detail.

Start with the packaged container_logistics type. This exercises a normal CPU solve without an inline manifest, pack installation or a GPU worker. The download contains one container and one shipment with explicit capacity, port and timing data. If discovery does not list this type, ask your operator for a deployment that includes it.

curl --fail-with-body -o solve-request.json \
  https://helixor.dev/static/solver/first-solve-request.json
curl --fail-with-body \
  -H "Authorization: Bearer ${SOLVER_TOKEN}" \
  "${SOLVER_URL}/api/v1/manifests/container_logistics" \
  -o container-logistics-manifest.json
curl --fail-with-body \
  -H "Authorization: Bearer ${SOLVER_TOKEN}" \
  -H 'Content-Type: application/json' \
  --data-binary @solve-request.json \
  "${SOLVER_URL}/api/v1/solve/container_logistics" \
  -o solve-result.json
jq . solve-result.json
jq -e '.solution.admission.is_feasible == true' solve-result.json

For this example, solution.container_details places shipment S1 on container C1; solution.admission reports the evaluated constraints and zero hard and eligibility penalties. Inspect the returned assignments and final feasibility evidence; HTTP success alone does not establish feasibility. Keep the request, downloaded manifest and result together when reporting a problem. This small example tests connectivity and the contract; it is not a performance benchmark.

Check the refusal path by submitting the same request with an empty problem. Expect HTTP 422 and a typed missing_problem_data diagnostic. A 401 means the credential was not accepted; a 403 means the authenticated caller lacks the required permission. Do not disable authentication to make either pass.

jq '.problem = {}' solve-request.json > invalid-request.json
curl --silent --show-error -w '\nHTTP %{http_code}\n' \
  -H "Authorization: Bearer ${SOLVER_TOKEN}" \
  -H 'Content-Type: application/json' \
  --data-binary @invalid-request.json \
  "${SOLVER_URL}/api/v1/solve/container_logistics"