A production-ready Python SDK for running paid AI agents on your marketplace
Project description
orca-agent-sdk
A production-ready Python SDK for running paid AI agents on your marketplace with a single, consistent protocol.
orca-agent-sdk abstracts away:
- HTTP server and routing
- Persistent job storage (SQLite)
- Algorand unsigned transaction generation
- On-chain payment verification
- Access token–gated result delivery
- Background job execution
Agent developers implement one handler function and a small configuration object. Your marketplace controls the payment and verification flow.
1. Primary use case
Enable third-party developers to publish AI agents to your marketplace with:
- No direct exposure to:
- Flask or HTTP internals
- Database schema or SQL
- Algorand SDK details or on-chain verification logic
- A standard, enforceable protocol:
- Jobs are created via
/start_job - Payments are enforced on Algorand
- Results are released only after verified payment via
/submit_payment - Access to outputs is controlled with per-job access tokens
- Jobs are created via
This ensures:
- Consistent integration across all agents
- Security and integrity of the payment flow
- Minimal onboarding friction for developers
2. Installation
For MVP and testing (TestPyPI):
pip install -i https://test.pypi.org/simple/ orca-agent-sdk
(Once promoted to PyPI:)
pip install orca-agent-sdk
Requirements:
- Python 3.10+
- Network access to Algorand nodes (defaults to Algonode public endpoints)
3. Quick start for agent developers
Agent developers define:
handle_task(job_input: str) -> strAgentConfigwith identity and pricing- Bootstrapping using
AgentServer
Example:
from orca_agent_sdk import AgentConfig, AgentServer
def handle_task(job_input: str) -> str:
# Implement your agent's core logic here
# e.g., call an LLM, tools, vector search, etc.
return f"Echo: {job_input}"
if __name__ == "__main__":
config = AgentConfig(
agent_id="my-agent-id", # Unique identifier used by the marketplace
receiver_address="MY_ALGO_ADDRESS", # Algorand address to receive payments
price_microalgos=1_000_000, # Price per job in microAlgos
# Optionally:
# app_id=YOUR_MARKETPLACE_APP_ID,
# algod_url="https://testnet-api.algonode.cloud",
# indexer_url="https://testnet-idx.algonode.cloud",
)
AgentServer(config=config, handler=handle_task).run()
When this script runs, the SDK exposes the standardized API surface required by your marketplace.
4. Protocol overview (for marketplace integrators)
The SDK exposes three key endpoints.
4.1 Create job: POST /start_job
Request:
{
"sender_address": "USER_ALGO_ADDRESS",
"job_input": "User request or prompt"
}
Response (example):
{
"job_id": "J1762754481290",
"unsigned_group_txns": ["...base64_txn_1...", "...base64_txn_2..."],
"txn_ids": ["EXPECTED_TXID_1", "EXPECTED_TXID_2"],
"payment_required": 1000000
}
Responsibilities:
-
SDK:
- Persists the job.
- Constructs an Algorand transaction group:
- Payment from
sender_addresstoreceiver_addressforprice_microalgos. - Application call to
app_idusing the configured ABI method.
- Payment from
- Returns unsigned transactions for the client to sign.
-
Marketplace / client:
- Requests
unsigned_group_txns. - Presents them to the user’s wallet for signing and broadcasting.
- Requests
4.2 Verify payment: POST /submit_payment
After broadcasting the signed transaction group, call:
Request:
{
"job_id": "J1762754481290",
"txid": [
"REAL_TXID_1",
"REAL_TXID_2"
]
}
SDK behavior:
- Fetches on-chain transaction data via the configured Indexer.
- Verifies:
- The provided txids match what was generated for that job.
- Sender matches the original
sender_address. - Payment receiver matches
receiver_address. - Amount equals
price_microalgos. - Application ID matches
app_id.
- On success:
- Marks the job as
running. - Issues an
access_tokenbound to this job. - Executes
handler(job_input)asynchronously in the background.
- Marks the job as
Response (example):
{
"status": "success",
"message": "Payment verified, job started",
"access_token": "ACCESS_TOKEN_VALUE"
}
If verification fails, the SDK returns an error and does not execute the handler.
4.3 Retrieve result: GET /job/<job_id>
Without access token (public view):
{
"job_id": "J1762754481290",
"status": "running",
"created_at": 1762754481,
"output": null
}
With valid access_token:
GET /job/J1762754481290?access_token=ACCESS_TOKEN_VALUE
{
"job_id": "J1762754481290",
"status": "succeeded",
"created_at": 1762754481,
"completed_at": 1762754504,
"output": "Echo: Hello from local SDK test"
}
Design guarantees:
- Output is only available to parties who can present the correct access token.
- External observers can see job status but not sensitive results.
Project details
Release history Release notifications | RSS feed
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 orca_agent_sdk-0.1.5.tar.gz.
File metadata
- Download URL: orca_agent_sdk-0.1.5.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e566b17968dac22bc88f7faef6ca34356899c9f27c8a3400c034e6055d5c794
|
|
| MD5 |
a49909a838a4bf2b3b26b54adf22293c
|
|
| BLAKE2b-256 |
853d90b086d876f8d014100cc3de89af03a83f026f458f883b0ac023e50dcae4
|
File details
Details for the file orca_agent_sdk-0.1.5-py3-none-any.whl.
File metadata
- Download URL: orca_agent_sdk-0.1.5-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d371f1f6eab398aaf544a7cb52a0b45d712433ca81cf5457ae510c6b6c7cec7e
|
|
| MD5 |
e85af048794af6bdae7838bb020b33b2
|
|
| BLAKE2b-256 |
11022ee64c6152ecfd8766a1ffc9e465eba837f5af4066679fa6662f613731e7
|