Geopera SDK (Python)
The official Python client for the Geopera geospatial data platform — satellite tasking & archive ordering, catalog search, the data platform, billing, and more. Every capability is a typed operation; this SDK gives you a fully typed, sync and async client for all of them.
- Typed end-to-end — every operation has typed inputs, outputs, and errors (
py.typedshipped). - Sync & async — call any operation with
.sync()orawait .asyncio(). - Auth your way — a Geopera API key, or an OAuth bearer token from sign-in.
- Generated from the live OpenAPI, so it never drifts from the API.
Install
pip install geopera
Requires Python 3.11+.
Quickstart
from geopera import AuthenticatedClient
from geopera.api.operations import catalog_search
from geopera.models import CatalogSearchInput
client = AuthenticatedClient(
base_url="https://api.geopera.com",
token="gpra_...", # your Geopera API key
)
result = catalog_search.sync(
client=client,
body=CatalogSearchInput(
host_name="api.geopera.com",
collections=["sentinel-2-l2a"],
limit=10,
),
)
print(result) # -> CatalogSearchOutput (typed)
Every operation lives under geopera.api.operations.<operation_id> (dots become underscores —
e.g. orders.tasking.estimate → orders_tasking_estimate). Request/response models are in
geopera.models. Browse the full operation reference at https://docs.geopera.com/api-reference.
Authentication
Pass either credential as token; Geopera accepts both and runs every call as that principal
(with its scopes, audit, and provenance):
# 1) A Geopera API key (headless / server-to-server) — create one in the portal.
client = AuthenticatedClient(base_url="https://api.geopera.com", token="gpra_...")
# 2) An OAuth bearer token (e.g. from a signed-in user session).
client = AuthenticatedClient(base_url="https://api.geopera.com", token=user_access_token)
Async
import asyncio
from geopera import AuthenticatedClient
from geopera.api.operations import orders_tasking_estimate
from geopera.models import TaskingEstimateInput
async def main():
async with AuthenticatedClient(base_url="https://api.geopera.com", token="gpra_...") as client:
est = await orders_tasking_estimate.asyncio(
client=client,
body=TaskingEstimateInput(...),
)
print(est)
asyncio.run(main())
Error handling
Operations return either the typed success model or a typed error — Problem (RFC 9457
problem+json, what Geopera returns for business/permission errors) or HTTPValidationError
(422 input validation). Use the *_detailed variant when you need the HTTP status code:
from geopera.api.operations import catalog_search
from geopera.models import CatalogSearchInput, Problem
resp = catalog_search.sync_detailed(client=client, body=CatalogSearchInput(...))
if resp.status_code == 200:
data = resp.parsed # CatalogSearchOutput
elif isinstance(resp.parsed, Problem):
print("geopera error:", resp.parsed.title, resp.parsed.detail)
Configuration
AuthenticatedClient accepts the usual knobs (timeouts, retries via httpx, custom headers,
TLS verification):
client = AuthenticatedClient(
base_url="https://api.geopera.com",
token="gpra_...",
timeout=httpx.Timeout(30.0),
raise_on_unexpected_status=True,
headers={"X-Request-Source": "my-app"},
)
Versioning
The SDK version tracks the Geopera API contract. Breaking API changes bump the major version. See the changelog.
Links
- 📚 API reference: https://docs.geopera.com/api-reference
- 🌐 Geopera: https://geopera.com
- 🐍 PyPI: https://pypi.org/project/geopera/
License
MIT © Geopera
Release files for geopera 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| geopera-2.1.0.tar.gz | 119.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geopera-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:706.3 kB
Release files / geopera-2.1.0.tar.gz
| Download URL | geopera-2.1.0.tar.gz |
|---|---|
| Size | 119.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
27ba97c79789437af329b2b932193aeec5cf9e768a2e9d30fa625556956d3254
|
|
BLAKE2b-256 checksum How to use checksums |
a03550111039d3eec08d02ef7a54638292d7d36a540687847396e6f90d882e68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 20, 2026.
Transparency logRelease files / geopera-2.1.0-py3-none-any.whl
| Download URL | geopera-2.1.0-py3-none-any.whl |
|---|---|
| Size | 587.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ecd4755aa0aaa5707addfe7cda2c3d3ff53466fd48def4c70fbcf61ba43b09b2
|
|
BLAKE2b-256 checksum How to use checksums |
53be9220bd767f5a6f844f476ee3414b479910bd837153f0fc1753dee2da8f7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 20, 2026.
Transparency log