Interact with the Noya AI agent for crypto trading, prediction markets, token analysis, and DCA strategies via curl. Use when the user wants to trade tokens, check portfolios, analyze markets, manage DCA strategies, or interact with Polymarket/Rain prediction markets.
Noya is a multi-agent AI system for crypto trading, prediction markets (Polymarket, Rain), token analysis, and DCA strategies. All transactions are gas-sponsored — users pay no gas fees.
https://safenet.oneNOYA_API_KEY is read from the environment.export NOYA_API_KEY="noya_your_key_here"
Configure in ~/.openclaw/openclaw.json:
{
"skills": {
"entries": {
"noya-agent": {
"enabled": true,
"apiKey": "noya_your_key_here",
"env": {
"NOYA_API_KEY": "noya_your_key_here"
}
}
}
}
}
Use Noya when users want to:
Don't use for: Non-crypto tasks, local file operations, or general knowledge questions.
Every interaction uses the Noya REST API via curl. The main endpoint is POST /api/messages/stream which streams responses. A helper script is provided for this.
curl -s -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/agents/summarize" | jq '.data'
Returns all available agent types (token analysis, prediction markets, DCA, etc.) and their tools. Call this once to understand what Noya can do.
Generate a UUID v4 for each new conversation topic:
python3 -c "import uuid; print(uuid.uuid4())"
Or on macOS/Linux:
uuidgen | tr '[:upper:]' '[:lower:]'
Each conversation needs a unique UUID. Generate one per topic and reuse it for follow-ups.
Use the provided script to send a message and receive the parsed response:
bash {baseDir}/noya-message.sh "What tokens do I have in my portfolio?" "THREAD_ID_HERE"
The script handles the streaming response, parses --breakpoint-- delimited JSON chunks, and outputs formatted text including messages, tool results, progress indicators, and interrupt prompts.
Reuse the same thread ID for follow-ups — Noya maintains context:
bash {baseDir}/noya-message.sh "Swap 0.1 ETH to USDC" "SAME_THREAD_ID"
When the agent needs confirmation (e.g., before executing a swap), the output includes [REQUIRES INPUT] with options. Send the user's answer as a follow-up in the same thread:
bash {baseDir}/noya-message.sh "Yes" "SAME_THREAD_ID"
All endpoints require the x-api-key header. Base URL: https://safenet.one
bash {baseDir}/noya-message.sh "<message>" "<threadId>"
If you need the raw stream for any reason:
curl -s -X POST "https://safenet.one/api/messages/stream" \
-H "Content-Type: application/json" \
-H "x-api-key: $NOYA_API_KEY" \
-H "x-timezone-name: America/New_York" \
-d '{"message": "What is the price of ETH?", "threadId": "YOUR_UUID"}'
The raw response is --breakpoint--\n delimited JSON chunks with keep-alive\n\n pings. Chunk types: message, tool, interrupt, progress, reasonForExecution, executionSteps, error.
curl -s -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/threads" | jq '.data.threads'
curl -s -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/threads/THREAD_ID/messages" | jq '.data.messages'
curl -s -X DELETE -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/threads/THREAD_ID"
curl -s -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/agents/summarize" | jq '.data'
curl -s -X POST "https://safenet.one/api/chat/completions" \
-H "Content-Type: application/json" \
-H "x-api-key: $NOYA_API_KEY" \
-d '{"sessionId": "SESSION_ID", "message": "Hello, what can you do?"}'
curl -s -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/chat/session/SESSION_ID" | jq '.messages'
curl -s -X DELETE -H "x-api-key: $NOYA_API_KEY" \
"https://safenet.one/api/chat/session/SESSION_ID"
User: "What's in my wallet?"
1. Generate a thread ID: uuidgen | tr '[:upper:]' '[:lower:]'
2. bash {baseDir}/noya-message.sh "What tokens do I have in my portfolio?" "$THREAD_ID"
→ Returns wallet address, token balances, and portfolio data
User: "Swap 0.5 ETH to USDC"
1. Generate a thread ID
2. bash {baseDir}/noya-message.sh "Swap 0.5 ETH to USDC" "$THREAD_ID"
→ Noya prepares the swap, asks for confirmation (interrupt), then executes.
All gas fees are sponsored. User must confirm before execution.
3. bash {baseDir}/noya-message.sh "Yes" "$THREAD_ID" # after user confirms
User: "Analyze SOL for me"
1. Generate a thread ID
2. bash {baseDir}/noya-message.sh "Give me a detailed analysis of SOL" "$THREAD_ID"
→ Returns price data, market trends, and analysis
User: "Set up a DCA for ETH"
1. Generate a thread ID
2. bash {baseDir}/noya-message.sh "Set up a weekly DCA strategy for ETH with $50" "$THREAD_ID"
→ Noya configures the DCA strategy and confirms details
User: "What are the top Polymarket events?"
1. Generate a thread ID
2. bash {baseDir}/noya-message.sh "Show me the top trending Polymarket events" "$THREAD_ID"
→ Returns current events, markets, and trading options
Noya always asks for user confirmation before executing on-chain transactions (swaps, bridges, transfers, orders). The response will include a [REQUIRES INPUT] section with details and options. Always relay this to the user and send their answer as a follow-up in the same thread. Never auto-confirm transactions.
If Noya responds with a delegation request, the user must complete this on the website:
"To delegate your wallet, visit https://agent.noya.ai and click
'Delegate Wallet' in the chat. This is a one-time action."
If Noya responds with a Safe deployment request, the user must complete this on the website:
"To deploy your Polymarket Safe, visit https://agent.noya.ai and click
'Deploy Safe Now'. This is free, takes ~30 seconds, and only needs to be done once."
| Error | Solution |
|---|---|
401 Unauthorized | API key is invalid, expired, or revoked. Generate a new one at agent.noya.ai |
400 Bad Request | Missing message or threadId in request body |
429 Rate limit | Wait a few minutes. Limit is 15 requests per 5-minute window |
This skill includes the following script in its directory:
| Script | Purpose |
|---|---|
noya-message.sh | Send a message to the Noya agent and parse the streamed response. Usage: bash {baseDir}/noya-message.sh "<message>" "<threadId>" |