Programming — entry 003 of 4
Judge0 CE
Judge0 CE is an open-source sandboxed code-execution engine, and ce.judge0.com is its free public demo instance covering 60-plus compiler/language versions via a REST API for creating and polling submissions. A live, fully unauthenticated request — no token, no key — both listed supported languages and executed a real Python submission end-to-end, confirming the public instance ships with authentication disabled by default. Judge0's own docs steer production users toward a paid RapidAPI-hosted plan or self-hosting instead, but the tracked ce.judge0.com endpoint itself remains free to call directly.
Judge0 CE is an open-source sandboxed code-execution engine, and `ce.judge0.com` is its free public demo instance. A live, fully unauthenticated `POST /submissions?wait=true` in this run really compiled and ran a Python one-liner and handed back real stdout, timing, and memory figures — no token, no key, no signup.
GreatAPIs Score
Auth quickstart
- No API key or signup required on this public demo instance — every probe in this run, including submission creation and result polling, went through with no auth header at all. Judge0's own docs steer production use toward a paid RapidAPI-hosted plan or self-hosting instead of leaning on this shared demo instance.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Execute Python and wait for the result
POSThttps://ce.judge0.com/submissions?base64_encoded=false&wait=true
Content-Type: application/json
{"language_id":71,"source_code":"print(1+1)"}{"stdout":"2\n","time":"0.025","memory":3212,"stderr":null,"token":"c53ff60f-96d2-4250-ba72-463ecffdb756","compile_output":null,"message":null,"status":{"id":3,"description":"Accepted"}}Developer reference
https://ce.judge0.comGotchas & limits
- `wait=true` blocks and returns the finished result inline, but the two-step flow the docs recommend for anything beyond a quick demo is `POST /submissions` (no `wait`) — which returns HTTP 201 with just `{"token":"..."}` — followed by `GET /submissions/{token}?base64_encoded=false` to poll for the result; both steps were confirmed live in this run, with the poll returning the same shape as the synchronous call once finished.
- A failed run is still HTTP 200, not an error status: a live submission of `print(1/0)` returned `"status":{"id":11,"description":"Runtime Error (NZEC)"}` with the real Python traceback in `stderr` and `"message":"Exited with error status 1"` — check `status.id` (3 is `Accepted`), not the HTTP status code, to know whether a submission actually succeeded.
- An invalid `language_id` is the one case that does surface as a real HTTP error: a live POST with `language_id: 999999` returned HTTP 422 `{"language_id":["language with id 999999 doesn't exist"]}`. `GET /languages` lists exactly 71 valid ids/names live, including several compiler builds of the same language — 7 of the 71 are named `C (...)`: three Clang builds (ids 75, 104, 110) and four GCC builds (ids 48, 49, 50, 103) — so "the C language" is not one id and picking the wrong build silently changes which compiler runs your code.
- CORS headers differ by request type: a live plain GET/POST response carries `access-control-allow-origin: *` (with `vary: Origin`), but a live `OPTIONS` preflight instead echoes the request's exact `Origin` value back (`access-control-allow-origin: https://example.com` for an `Origin: https://example.com` preflight) rather than returning `*` — both were confirmed on this run's own probes.
- The default `GET /submissions/{token}` response only returns a handful of fields (stdout/stderr/time/memory/status/etc.); adding `&fields=*` to the same live call returned the full internal record instead, including `cpu_time_limit`, `memory_limit`, `wall_time_limit`, and `created_at`/`finished_at` timestamps not present in the default response.