shipreal
SDK and CLI for the public ShipReal course API: search the curriculum, read a module, read pricing.
Zero dependencies, standard library only. No authentication: the API is public read-only reference data about one course, so there is no key to hold and no token to refresh. If something asks you for a ShipReal API key, it is not us.
pip install shipreal
Library
from shipreal import ShipReal
sr = ShipReal()
sr.search("caching") # one page of matches
list(sr.modules()) # every module, pagination followed
sr.module("observability") # by slug or partial title
sr.pricing(region="il") # flattened to one billing region
sr.course() # totals and subtitle languages
sr.ask("how do I size a database") # natural language, keyword search behind it
Errors carry RFC 9457 problem
details. Branch on type, not on status: the status says a request failed,
the type says which failure it was.
from shipreal import ShipReal, ShipRealError
try:
ShipReal().module("does-not-exist")
except ShipRealError as err:
print(err.status, err.type, err)
CLI
shipreal search caching
shipreal search --all --json
shipreal module observability
shipreal pricing --region il
shipreal ask "what should I learn before deploying"
Testing against the sandbox
Frozen fixture data over the same code path, so a test written against it stays green when the course changes:
sr = ShipReal(sandbox=True)
Fixture prices are 1 unit and fixture links point at example.invalid, so
sandbox data that leaks into real output is obvious on sight. Assert on shape,
pagination and error format, not on prices or titles. Details at
shipreal.dev/sandbox.
There is nothing to write
The API has no write path and no purchase endpoint in either environment. Enrollment runs through a hosted checkout that a person completes, so if a task needs a transaction the answer is a link for a human, not a call.
Other surfaces
REST is one of several. There is an OpenAPI 3.1 spec, an MCP server at /mcp, and a JavaScript client with the same surface. Full notes at shipreal.dev/developers.
MIT licensed. Source at github.com/mluggy/shipreal-dev.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shipreal-2.0.0.tar.gz.
File metadata
- Download URL: shipreal-2.0.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
684f4a41b0f344c608336e0e2a83a60d196f0a2b609ed82cfb55c68c57c44b8f
|
|
| MD5 |
12b87236dcabbf66ebe13b944e3d4b5e
|
|
| BLAKE2b-256 |
72bcd71d9cade06c1f59fe64033ee7afba12177b5a2bbc25d3be1310b1c6b015
|
File details
Details for the file shipreal-2.0.0-py3-none-any.whl.
File metadata
- Download URL: shipreal-2.0.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98457d1497d3719ca69dcb54944f51b1688b00f5591d847ad02a2907ef41bc16
|
|
| MD5 |
fc1870cee9a7491f38ac15a6b991d2d8
|
|
| BLAKE2b-256 |
623db9666733d6f7b6972ab2c4482c1c84de611cd5d368e078a9cf0808a77f8b
|