Python SDK
The official Python library for Connect with rNet and AI requests. The repository includes a Flask example.
PyPIrnet-oauth· Python 3.11 or later
Install
bash
pip install rnet-oauth
Create the clients
Use the Client ID and secret from your registered app. The model is chosen when you create the ModelClient.
python
import os
from rnet_oauth import RNetOAuthClient, ModelClient
auth = RNetOAuthClient(
client_id=os.environ["RNET_CLIENT_ID"],
client_secret=os.environ["RNET_CLIENT_SECRET"],
redirect_uri="https://yourapp.com/callback",
)
ai = ModelClient("gemini-2.5-flash-lite")Start Connect with rNet
python
import secrets
pkce = auth.generate_pkce()
state = secrets.token_urlsafe(16)
session["rnet"] = {"verifier": pkce["verifier"], "state": state}
return redirect(auth.get_authorization_url(pkce["challenge"], state=state))Exchange the code for tokens
python
# GET /callback?code=...&state=...
saved = session.pop("rnet")
if request.args.get("state") != saved["state"]:
abort(400)
tokens = auth.exchange_code_for_token(request.args["code"], saved["verifier"])
session["rnet"] = {
"access_token": tokens["access_token"],
"refresh_token": tokens.get("refresh_token"),
}Refresh the access token
python
tokens = auth.refresh_access_token(session["rnet"]["refresh_token"]) session["rnet"]["access_token"] = tokens["access_token"] session["rnet"]["refresh_token"] = tokens["refresh_token"] # keep the new one
Get the user profile
python
user = auth.get_user_info(access_token) print(user["email"], user["name"])
Call a model
python
response = ai.chat({
"contents": [{"role": "user", "parts": [{"text": "Write a haiku about credits."}]}]
}, access_token)
print(response)Stream a response
python
for chunk in ai.chat_stream(payload, access_token):
print(chunk, end="")Handle errors
python
import re
try:
response = ai.chat(payload, access_token)
except RuntimeError as err:
# SDK errors look like: "Request failed: 402 - Insufficient funds"
match = re.search(r"Request failed: (\d{3})", str(err))
status = int(match.group(1)) if match else None
if status == 401:
... # refresh the access token and retry once
elif status == 402:
... # out of credits: ask the user to top up at rnetai.org/user-home
elif status == 429:
... # too many requests: wait and retry
else:
raiseReference