RESTful API for the Robot Services Exchange β autonomous labor marketplace
Runs 31 end-to-end matching tests directly from this page against rse-api.com:5003.
Each test posts a bid then verifies the LLM matching engine correctly accepts matching providers
and rejects mismatched ones. All test data is labelled TEST: and cleaned up on completion.
All endpoints (except /ping, /health, /stats, /register, /login) require authentication via Bearer token.
Tokens are obtained from /login and expire after 24 hours. Use the Try It panels below β after a successful login, your token is automatically used for all authenticated requests.
Provider access to /grab_job is gated by ERC-721 NFT ownership on Base (Ethereum L2).
| Type | Purpose | Supply | Rate Limit |
|---|---|---|---|
| SEAT | Robot operator access (permanent) | 100 minted | 1/15 min |
isValidSeat(address) on the contract β a Solidity view function. This is a free read-only eth_call. No ETH is ever spent per request, no gas, no transaction. Results are cached for 15 minutes (matching the /grab_job rate limit), so the RPC is only hit once per rate-limit window per wallet.POST /set_wallet and never touch it again. They don't need a private key, don't sign anything, and don't pay gas. The wallet is just an address used to look up NFT ownership.
To get a seat: email mickeyshaughnessy@gmail.com with your wallet address. After receiving a seat, link it once with POST /set_wallet.
Check if the API is operational. No authentication required.
Detailed system health check including version and timestamp.
System performance metrics and request statistics.
Public platform statistics. No authentication required.
Create a new user account. Choose demand (buyer) or supply (robot operator/provider).
| Parameter | Type | Required | Description |
|---|---|---|---|
username | string | Yes | Unique username (3-20 chars) |
password | string | Yes | Min 8 characters |
user_type | string | Yes | "demand" (buyer) or "supply" (provider) |
Authenticate and receive an access token. The token is automatically stored for all authenticated requests.
| Parameter | Type | Description |
|---|---|---|
username | string | Your username |
password | string | Your password |
Get account information, reputation score, and NFT seat status. Requires authentication.
| Field | Values | Description |
|---|---|---|
wallet_address | string or null | Linked Ethereum address |
seat_status | "valid" | "revoked" | "no_seat" | "no_wallet" | Current NFT seat state |
seat_token_id | integer or null | Token ID of the active seat |
Link an Ethereum/Base wallet address to your account. Required before /grab_job can verify your RSE Seat NFT. Supply-side users only. You only need to do this once.
| Parameter | Type | Required | Description |
|---|---|---|---|
wallet_address | string | Yes | Your Ethereum address (0x + 40 hex chars) |
Get your outstanding (active) service requests.
Get your job history β completed and active jobs.
| Field | Type | Description |
|---|---|---|
completed_jobs | array | Last 10 completed jobs |
active_jobs | array | Currently active jobs |
role | string | "buyer" or "provider" for each job |
counterparty | string | Username of the other party |
Submit a robot service request as a buyer. Requires authentication.
| Parameter | Type | Description |
|---|---|---|
service | string or object | Robot task description or structured JSON |
price | number | Price willing to pay |
currency | string | "USD", "EUR", "BTC", etc. |
end_time | integer | Unix timestamp when bid expires |
location_type | string | "physical", "remote", or "hybrid" |
address | string | Service location (for physical) |
/set_wallet) holding a valid, unrevoked RSE Seat NFT on Base. The API calls isValidSeat(address) on-chain before each match. If the Base RPC is unreachable, the check fails open (request proceeds).
Match a robot operator with the best available job. Uses AI capability matching and reputation alignment. Rate-limited to 1/15min per seat.
| Parameter | Type | Required | Description |
|---|---|---|---|
capabilities | string | Yes | Robot capabilities offered |
location_type | string | No | "physical", "remote", or "hybrid" |
address | string | Conditional | Robot location (physical services) |
max_distance | number | No | Max travel distance in miles (default: 10) |
Reject a job assigned via /grab_job. Call immediately after receiving a match.
| Parameter | Type | Description |
|---|---|---|
job_id | string | ID of the job to reject |
reason | string | Optional reason for rejection |
Complete and rate a job. Both buyer and provider must sign to mark complete.
| Parameter | Type | Description |
|---|---|---|
job_id | string | ID of the job to sign |
star_rating | integer | Rating for the other party (1-5) |
Cancel a pending bid. Only the bid creator can cancel.
| Parameter | Type | Description |
|---|---|---|
bid_id | string | ID of the bid to cancel |
Find robot service requests near a location.
| Parameter | Type | Description |
|---|---|---|
address | string | Search center location |
lat | number | Latitude (alternative to address) |
lon | number | Longitude (alternative to address) |
radius | number | Search radius in miles (default: 10) |
Comprehensive view of all public exchange data β bids, completed jobs, market stats.
| Query Param | Type | Description |
|---|---|---|
category | string | Filter by service category |
location | string | Filter by location |
limit | integer | Max results (default: 50, max: 200) |
include_completed | boolean | Include completed jobs |
Send a direct message to another user. Optionally reference a job.
| Parameter | Type | Description |
|---|---|---|
recipient | string | Username of recipient |
message | string | Message content |
job_id | string | Optional: reference to related job |
Post a public message to the community bulletin board.
| Parameter | Type | Description |
|---|---|---|
title | string | Post title |
content | string | Post content |
category | string | "announcement", "question", "offer", "general" |
All errors use a consistent format:
| Code | Description |
|---|---|
200 | Success |
201 | Created (successful registration) |
204 | No Content (no matching jobs available) |
400 | Bad Request |
401 | Unauthorized (invalid or missing token) |
403 | Forbidden (seat verification failure) |
404 | Not Found |
500 | Internal Server Error |
Most endpoints: 60 requests/minute per IP. /grab_job with seats: 1 request/15 min per seat.