Ideone API alternative

Replacing the Ideone API with one REST call

Ideone's API page now leads to Sphere Engine, whose docs say the old Ideone API is no longer in development and will be maintained only until Sphere's next API version. If your Python code calls create_submission and then polls submission_details, it becomes a single call to OnlineCompiler.io's REST API, free for 100,000 runs a month across 46 languages.

By the OnlineCompiler.io team. Updated . We make OnlineCompiler.io, so we're one of the options here. Every competitor figure links to the vendor's own page, and we say where our API falls short.

What happened to the Ideone API

The Ideone API was a SOAP service with an ideone package for Python. Its page on ideone.com now redirects to Sphere Engine, which Ideone describes as the technology behind it, sold by Sphere Research Labs with a remote-execution API. Sphere Engine's API documentation says the Ideone API is no longer under development and will be maintained only until Sphere's next API version, after which only its REST API is supported. The old API was still available when we checked (both pages, 4 November 2026).

So there are two routes: move to Sphere Engine's new API, which needs an account and a quote or trial, or move to another hosted API. Our Sphere Engine comparison covers the first; this page covers the second. Both Ideone and Sphere Engine are the products of a company we have no connection with.

The usual Ideone pattern

Open-source projects that used Ideone, such as the learnpython.org tutorials code, follow one shape: create a submission, take its link, poll until the status is no longer 1 (compiling) or 3 (running), then read output, stderr and cmpinfo.

Before: Ideone (Python)
from ideone import Ideone
import time

client = Ideone(
    "USER", "PASSWORD",
    api_url="http://CUSTOMER.compilers.sphere-engine.com/api/1/service.wsdl",
)

link = client.create_submission(
    "name = input()\nprint(f'Hello, {name}!')",
    language_id=116,   # Python 3 on Ideone
    std_input="World",
)["link"]

details = client.submission_details(link)
while details["status"] in (1, 3):   # compiling or running
    time.sleep(1)
    details = client.submission_details(link)

print(details["output"])
print(details["stderr"], details["cmpinfo"])

After: one synchronous call

The sync endpoint runs the program and answers in the same request, so the polling loop and the SOAP client go. Keep the API key in your backend code.

After: OnlineCompiler.io REST API (Python)
import requests

response = requests.post(
    "https://api.onlinecompiler.io/api/run-code-sync/",
    headers={"Authorization": "YOUR_API_KEY"},
    json={
        "compiler": "python-3.14",
        "code": "name = input()\nprint(f'Hello, {name}!')",
        "input": "World",
    },
    timeout=60,
)

result = response.json()
print(result["output"])      # Hello, World!
print(result["error"])       # stderr, and compiler messages for compiled languages
print(result["status"])      # "success" or "error"
print(result["exit_code"])   # 0

More fields (signal, truncated, time, memory) and input files are in the run-code docs. Sign-up is free, and the key is in your dashboard (how).

Or the Jobe API

If you want an interface that is already used by Moodle's CodeRunner, the same key works on the Jobe API. Requests keep Jobe's run_spec shape.

After: Jobe API (Python)
import requests

response = requests.post(
    "https://api.onlinecompiler.io/api/jobe/index.php/restapi/runs",
    headers={"X-API-KEY": "YOUR_API_KEY"},
    json={
        "run_spec": {
            "language_id": "python3",
            "sourcecode": "name = input()\nprint(f'Hello, {name}!')",
            "input": "World\n",
        }
    },
    timeout=60,
)

result = response.json()
print(result["stdout"])    # Hello, World!
print(result["stderr"])
print(result["cmpinfo"])   # compiler messages
print(result["outcome"])   # 15 means it ran and exited cleanly

Field mapping

IdeoneREST API (/api/run-code-sync/)Jobe API
language_id (number)compiler, such as python-3.14run_spec.language_id, such as python3
source codecoderun_spec.sourcecode
std_inputinputrun_spec.input
outputoutputstdout
stderrerrorstderr
cmpinfoCompiler messages arrive in errorcmpinfo
status (1 compiling, 3 running, 0 done)Not needed: the response is the finished runNot needed
result (e.g. 15 ok, 11 compile error, 12 runtime error, 13 time limit)status "success" or "error", plus exit_code; a timeout is exit_code 124outcome, with the same numbers for these (15, 11, 12, 13)
time, memorytime (seconds) and memory (KB), as stringsNot returned

Ideone's numeric language_id becomes a name. Each run is limited to 30 seconds, 512 MB and no network; output is capped at 64 KB per stream, with truncated: true when cut.

What is different

  • No polling: the call returns the result. For long-running or fire-and-forget work, the async endpoint posts the result to a callback URL.
  • JSON, not SOAP: any HTTP client works, with an Authorization header instead of a username and password.
  • No stored submission links: the result comes back once and is not kept as a public page. Your code can store it.
  • 46 languages: check the list against what you ran on Ideone.
  • Free tier: 100,000 runs a month on the Free plan; see pricing.

Judging against tests

If you used Ideone to check submissions against expected output, run-tests judges code against a list of tests in one request, and can also run asynchronously and post the outcome to your URL in signed webhooks. Each submission can return a signed receipt that anyone can verify with our public key.

For a wider comparison of hosted execution APIs, see Judge0 alternatives, and for the same kind of move from another API, migrate from Judge0 and the Piston API alternative.

Frequently asked questions

Is the Ideone API still available?

Sphere Research Labs, which runs Ideone, lists an API under Sphere Engine on ideone.com/sphere-engine. Sphere Engine's documentation says the old Ideone API is no longer under development and will be maintained only until Sphere's next API version, after which only its REST API is supported. The old API was still available when we checked on 4 November 2026.

Is there a free Ideone API alternative?

Yes. OnlineCompiler.io gives a free API key with 100,000 runs a month for 46 languages, with no credit card. Paid plans raise the allowance.

How do I replace create_submission and submission_details?

With one request. The sync endpoint runs the program and returns the result in the same HTTP response, so there is no link to poll and no status 1 or 3 to wait out. Send compiler, code and input; read output, error, status and exit_code.

What replaces the Ideone language_id?

A compiler id such as python-3.14, gcc-15 or openjdk-25. The 46 ids are listed in the compilers docs. There is no numeric table to translate: you pick the id by name.

Where do compiler errors go?

Ideone returns them in cmpinfo. On the sync endpoint they arrive in error, with status "error" and a non-zero exit_code. On the Jobe API they arrive in cmpinfo with outcome 11, as on Jobe.

Does it use SOAP?

No. It is a JSON REST API: one POST with an Authorization header. Any HTTP client works, so you no longer need the ideone package or a SOAP library.

Which should I use: the REST API or the Jobe API?

Use the REST API for new code. Use the Jobe API when your code already speaks Jobe, as Moodle CodeRunner does; it keeps Jobe's run_spec request and its outcome, cmpinfo, stdout and stderr response.

Is this an official Ideone or Sphere Engine product?

No. OnlineCompiler.io is independent and unaffiliated with Ideone or Sphere Research Labs.