Background
ionq-core is the low-level client that higher-level SDKs (qiskit-ionq, cirq-ionq, pennylane-ionq) build on, through the extension API — a ClientExtension bundle plus the EventHook / AsyncEventHook protocols passed to IonQClient(extension=...). It's documented in ionq_core/extensions.py, but there's no runnable example and no examples/ directory.
What to build
A top-level examples/ directory with a sync and an async example that act as a downstream SDK wrapping ionq-core, run against the free simulator (sign up: https://identity.ionq.com/create-account).
downstream_integration.py (sync): build an IonQClient(extension=...) that sets a user_agent_token, default_headers, an EventHook (logging), and an error_mapper (wrap APIError / RateLimitError into an SDK-defined type); then submit a Bell state, wait_for_job, and print the probabilities.
downstream_integration_async.py: the same flow with an AsyncEventHook and the asyncio endpoint variants.
Definition of done
Notes
httpx-only; auth prefix is apiKey, not Bearer; no new runtime deps. References: extension API docs, ionq_core/extensions.py, ionq_core/ionq_client.py, and the Bell-state quickstart in README.md.
Background
ionq-coreis the low-level client that higher-level SDKs (qiskit-ionq,cirq-ionq,pennylane-ionq) build on, through the extension API — aClientExtensionbundle plus theEventHook/AsyncEventHookprotocols passed toIonQClient(extension=...). It's documented inionq_core/extensions.py, but there's no runnable example and noexamples/directory.What to build
A top-level
examples/directory with a sync and an async example that act as a downstream SDK wrappingionq-core, run against the freesimulator(sign up: https://identity.ionq.com/create-account).downstream_integration.py(sync): build anIonQClient(extension=...)that sets auser_agent_token,default_headers, anEventHook(logging), and anerror_mapper(wrapAPIError/RateLimitErrorinto an SDK-defined type); then submit a Bell state,wait_for_job, and print the probabilities.downstream_integration_async.py: the same flow with anAsyncEventHookand theasyncioendpoint variants.Definition of done
examples/with both scripts and aREADME.md(setup:pip install ionq-core,export IONQ_API_KEY=...), linked from the top-levelREADME.md.user_agent_token,default_headers, anEventHook, and theerror_mapper; async example usesAsyncEventHook+asynciovariants.ionq_core.__all__); SPDX header on each file (AGENTS.md).uv run ruff check,uv run ruff format --check, anduv run ty check examples/pass. (Needn't run in CI — no API key — but must lint and type-check.)Notes
httpx-only; auth prefix isapiKey, notBearer; no new runtime deps. References: extension API docs,ionq_core/extensions.py,ionq_core/ionq_client.py, and the Bell-state quickstart inREADME.md.