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=trueblocks and returns the finished result inline, but the two-step flow the docs recommend for anything beyond a quick demo isPOST /submissions(nowait) — which returns HTTP 201 with just{"token":"..."}— followed byGET /submissions/{token}?base64_encoded=falseto 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 instderrand"message":"Exited with error status 1"— checkstatus.id(3 isAccepted), not the HTTP status code, to know whether a submission actually succeeded. - An invalid
language_idis the one case that does surface as a real HTTP error: a live POST withlanguage_id: 999999returned HTTP 422{"language_id":["language with id 999999 doesn't exist"]}.GET /languageslists exactly 71 valid ids/names live, including several compiler builds of the same language — 7 of the 71 are namedC (...): 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: *(withvary: Origin), but a liveOPTIONSpreflight instead echoes the request's exactOriginvalue back (access-control-allow-origin: https://example.comfor anOrigin: https://example.compreflight) 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, includingcpu_time_limit,memory_limit,wall_time_limit, andcreated_at/finished_attimestamps not present in the default response.