Ptero
Welcome
Pick a name to use the chat. It's saved on this device so your conversations are here next time.
Your chats stay in this browser. We do not keep your conversation history on our servers. Clearing browser data removes local chats.
We only use cloud for projects and their custom files. Your regular conversations are stored locally on your device.
Last updated: August 15, 2026
1. Welcome to Ptero.pro
Ptero.pro ("we," "us," "our," or the "Service") is a free, non-profit chat platform. By accessing or using the Service, you agree to be bound by these Terms of Service ("Terms"). If you do not agree, please do not use the Service.
2. Always Free — No Paid Plans
Ptero.pro is completely free to use and will always be free. We do not offer, and will not introduce, premium plans, subscriptions, paywalls, or any paid tier. Every model made available through the Service is provided to you at no cost. We reserve the right to change which specific models are offered, but not to charge for access to the Service itself.
3. Eligibility
You must be able to form a legally binding contract to use the Service. If you are under the age required by the laws of your country to consent to use of online services without parental approval, you should only use the Service with the involvement of a parent or guardian.
4. Accounts and Guest Access
You may use the Service as a logged-in WordPress user or as a guest identified by a randomly generated token stored in your browser. You are responsible for safeguarding any device or browser profile used to access the Service, and for all activity that occurs under your session.
5. Acceptable Use
You agree not to use the Service to:
- Violate any applicable law or regulation;
- Generate content that is unlawful, harassing, defamatory, hateful, or that exploits or endangers minors;
- Attempt to gain unauthorized access to the Service, other users' data, or the underlying AI providers;
- Interfere with or disrupt the integrity or performance of the Service;
- Use the Service to develop a competing product by scraping or systematically extracting outputs;
- Misrepresent the origin of content generated using the Service.
6. AI-Generated Content
Responses are generated by third-party models and may be inaccurate, incomplete, or inappropriate for your purposes. You are responsible for evaluating the accuracy and suitability of any output before relying on it. The Service is provided for informational and conversational purposes and does not constitute professional advice of any kind (legal, medical, financial, or otherwise).
7. Your Content
Messages you send are transmitted to the selected third-party provider to generate a response and, as described in our Privacy Policy, are not stored in our database. You retain any rights you already hold in content you submit. You represent that you have the necessary rights to submit any content you send through the Service.
8. Third-Party AI Providers
The Service routes your messages to independent, third-party providers to generate responses. Their own terms and acceptable-use policies may also apply to how your messages are processed on their end. We select providers we believe are reliable, but we do not control their infrastructure and are not responsible for their availability or the content of their outputs.
9. Intellectual Property
The Service's design, branding, and underlying software are owned by us or our licensors. These Terms do not grant you any rights to our trademarks or branding except as necessary to use the Service as intended.
10. Disclaimers
THE SERVICE IS PROVIDED "AS IS" AND "AS AVAILABLE," WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SERVICE WILL BE UNINTERRUPTED, ERROR-FREE, OR THAT AI OUTPUTS WILL BE ACCURATE.
11. Limitation of Liability
TO THE MAXIMUM EXTENT PERMITTED BY LAW, WE WILL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR ANY LOSS OF DATA, ARISING FROM YOUR USE OF THE SERVICE. BECAUSE THE SERVICE IS PROVIDED FREE OF CHARGE, OUR AGGREGATE LIABILITY FOR ANY CLAIM RELATING TO THE SERVICE IS LIMITED TO THE GREATEST EXTENT PERMITTED BY LAW.
12. Termination
We may suspend or disable access to the Service, in whole or for an individual account, model, or guest identity, at any time — including to enforce these Terms or to keep the Service healthy for everyone. You may stop using the Service at any time.
13. Changes to These Terms
We may update these Terms from time to time. If we make material changes, we will update the "Last updated" date above. Continued use of the Service after changes take effect constitutes acceptance of the revised Terms.
14. Governing Law
These Terms are governed by applicable law in the jurisdiction in which the Service operator is established, without regard to conflict-of-law principles, except where local law requires otherwise.
15. Contact
Questions about these Terms can be directed to the Service operator through pterocos.eu.org.
Last updated: August 15, 2026
1. Overview
This Privacy Policy explains what information Ptero.pro ("we," "us," "our") collects when you use our free chat service (the "Service"), how we use it, and the choices available to you.
2. Information We Collect
We collect as little as possible:
- Guest identity: a random token and the display name you choose, generated and stored in your browser's local storage, used to keep your conversations separate from other visitors.
- Chat content in transit: messages you send are transmitted to the selected provider to generate a reply. This content passes through our server momentarily to relay the request but is not written to our database.
- Anonymous usage counters: small, contentless statistics such as total request counts and first/last-seen timestamps per guest name, used only to operate the admin dashboard and to keep the Service reliable.
- Model feedback: thumbs up / thumbs down votes are tallied per model only — never per message and never with message content attached.
3. Where Your Conversations Live
Your conversations and messages are stored entirely in your own browser's local storage. We do not keep a copy of your conversation history on our servers. Clearing your browser data or switching devices will remove your local conversation history.
4. How We Use Information
We use the limited information described above to:
- Operate, maintain, and improve the Service;
- Route your messages to the AI provider you selected and return the response to you;
- Keep basic, anonymous usage statistics for administrators;
- Detect and prevent abuse of the Service.
We do not sell your information, and we do not use your chat content for advertising.
5. Third-Party AI Providers
To generate responses, your messages are sent to the third-party provider associated with the model you choose. Each provider processes this data under its own privacy practices, and we encourage you to review those where available. We choose providers we believe handle data responsibly, but we do not control their systems.
6. Cookies and Local Storage
We use your browser's local storage (not third-party advertising cookies) to remember your guest identity and conversation history on your device, and to remember that you have accepted these policies so you are not asked again on every visit.
7. Data Retention
Because conversations live in your browser rather than on our servers, retention of chat content is entirely in your control. Anonymous usage counters and per-model vote tallies are retained only in aggregate, contentless form for as long as needed to operate the admin dashboard.
8. Children's Privacy
The Service is not directed at children under the age required by local law to consent to use of online services without parental approval, and we do not knowingly collect personal information from such children.
9. Security
We use reasonable technical measures to protect information in transit to and from providers. No method of transmission or storage is completely secure, and we cannot guarantee absolute security.
10. Your Choices
You can clear your local browser storage at any time to remove your guest identity and conversation history. Because we don't hold a server-side copy of your conversations, deleting your local data effectively removes it from the Service.
11. Changes to This Policy
We may update this Privacy Policy from time to time. Material changes will be reflected in the "Last updated" date above. Continued use of the Service after changes take effect constitutes acceptance of the revised policy.
12. Contact
Questions about this Privacy Policy can be directed to the Service operator through pterocos.eu.org.
Terms of Service
Unlock star-gated models
Star the Ptero repository on GitHub to unlock this model. It's free — sign in with GitHub and we'll add the star for you.
Or open the repo on GitHubChoose a model
Pick a model from here.
News
Updates and announcements published by the site admin.
No news yet — check back later.
New project
Give your project a name to keep related chats together.
Usage
Your token usage for the current hour. This quota is tied to this guest identity and device.
–% remaining
Usage resets to 0 every 1 hour.
Star our GitHub repo and we'll bump your hourly quota — no strings attached.
Guest settings
Manage this guest profile and its local data.
Profile
Guest account — saved on this device
Clearing browser data or switching devices may remove access to these local chats.
Chat preferences
Data & privacy
Chats and projects stay in this browser. Messages are sent to the selected AI provider while generating a reply.
Backups include conversations, projects, and media metadata. Media files themselves stay on this device.
Help
Move to another device by exporting a backup here, then importing that JSON file on the new device.
Create a personal API key to use this chat from your own apps.
GitHub verification is required before a key can be created. Keys are shown only once, so copy the secret immediately.
Usage Policy
Requests Per Day: Depends
It depends on the maximum tokens allowed per hour for your selected API provider. Once you reach the hourly token limit, further requests will be throttled until the hour resets.
How to use the API
Send your key as a Bearer token to the chat endpoint. Never expose it in browser code or commit it to a public repository.
Available models
- Mercury 2 (Free)
mercury-2:free - Qwen3.8 27B (Free)
qwen3.8-27b:free - Mimo V2.5 (Free)
mimo-v2.5-kiraai:free - GLM-5.3 Flash (Free)
glm-5.3-flash:free - Claude Opus 5
claude-opus-5 - GPT OSS 20B (Free)
gpt-oss-20b:free - MiniMax M3 (Free)
minimax-m3 - Agnes 2.5 Flash (Free)
agnes-2.5-flash:free - Agnes 2.0 Flash (Free)
agnes-2.0-flash:free - DeepSeek V4 Pro (Free)
deepseek-v4-pro:free - DeepSeek V4 Flash (Free)
deepseek-v4-flash:free - Mistral Large 3 (Free)
mistral-large-3:free - DeepSeek V3.2 (Free)
deepseek-v3.2:free - DeepSeek V3.1 (Free)
deepseek-v3.1:free - Mistral Medium 3.5 (Free)
mistral-medium-3.5:free - Mistral Small 4 (Free)
mistral-small-4:free - Codestral (Free)
codestral:free - Devstral 2 (Free)
devstral-2:free - Ministral 3 14B (Free)
ministral-3-14b:free - Ministral 3 8B (Free)
ministral-3-8b:free - Ministral 3 3B (Free)
ministral-3-3b:free
Use the value in the code font as the model value. This list is generated from the models currently configured on this site.
Endpoint
https://ptero.pro/wp-json/mlp/v1/chat
Example with cURL
curl -X POST "https://ptero.pro/wp-json/mlp/v1/chat" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "laguna-s-2.1",
"messages": [
{"role": "user", "content": "Hello"}
]
}'
Example with JavaScript
const response = await fetch("https://ptero.pro/wp-json/mlp/v1/chat", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.MLP_API_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "laguna-s-2.1",
messages: [{ role: "user", content: "Hello" }]
})
});
const data = await response.json();
console.log(data.text);
The streaming endpoint is available at https://ptero.pro/wp-json/mlp/v1/chat-stream and returns Server-Sent Events. API requests use the same rate limits and token quotas as chat requests in the web app.
Full API Documentation
API Overview
The MLP Chat API provides OpenAI-compatible endpoints for AI-powered chat completions. You can integrate this API into your applications, websites, or services to provide intelligent chat capabilities. All endpoints support standard OpenAI API parameters and response formats.
Authentication
All API requests require authentication via API key
- Bearer Token: Authorization: Bearer YOUR_API_KEY
- Header: X-API-Key: YOUR_API_KEY
Example: curl -H "Authorization: Bearer sk-xxxxx" https://api.example.com/v1/chat/completions
Available Endpoints
Base Url: https://api.example.com/v1
- /chat/completions: Method: POST · Description: Send a message and get AI response · Rate Limit: Depends on hourly token limit
- /models: Method: GET · Description: List all available AI models · Rate Limit: No limit
- /usage: Method: GET · Description: Check your current token usage · Rate Limit: No limit
Available Models
- mercury-2: Provider: Inception Labs · Tokens Per Hour: 50000 · Description: Fast, lightweight model
- qwen3.8-27b: Provider: Nara Router · Tokens Per Hour: 60000 · Description: Balanced performance and quality
- mimo-v2.5: Provider: Kira AI · Tokens Per Hour: 40000 · Description: Optimized for conversations
- glm-5.3-flash: Provider: APINext · Tokens Per Hour: 80000 · Description: High performance, supports images
- claude-opus-5: Provider: TokenForge · Tokens Per Hour: 100000 · Description: Premium model, highest quality
Request Format
POST /v1/chat/completions
- Authorization: Bearer YOUR_API_KEY
- Content-Type: application/json
- model: (string) Model ID (e.g., "mercury-2")
- messages: (array) Array of message objects with role and content
- temperature: (number) 0-2, controls randomness (default: 1)
- max_tokens: (number) Maximum tokens in response (optional)
- top_p: (number) Nucleus sampling parameter (default: 1)
- frequency_penalty: (number) -2 to 2, penalizes repeated tokens (default: 0)
- presence_penalty: (number) -2 to 2, penalizes new topics (default: 0)
Request Example
Language: javascript
const response = await fetch('https://api.example.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'mercury-2',
messages: [
{
role: 'user',
content: 'Hello, how are you?'
}
],
temperature: 0.7,
max_tokens: 500
})
});
const data = await response.json();
console.log(data.choices[0].message.content);Response Format
Successful requests return a JSON object with the following structure:
- id: Unique identifier for this completion
- object: Always "text_completion"
- created: Unix timestamp of creation time
- model: The model that generated the response
- usage: Prompt Tokens: Tokens in your input message · Completion Tokens: Tokens in the AI response · Total Tokens: Sum of above
- choices: Finish Reason: Why generation stopped (stop, length, etc) · Index: Position in choices array
Response Example
Language: json
{
"id": "chatcmpl-8bXzVK5M9Rq2W7nP",
"object": "text_completion",
"created": 1694567890,
"model": "mercury-2",
"usage": {
"prompt_tokens": 12,
"completion_tokens": 45,
"total_tokens": 57
},
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello! I'm doing well, thank you for asking. How can I help you today?"
},
"finish_reason": "stop",
"index": 0
}
]
}Error Handling
Errors are returned with appropriate HTTP status codes:
- 400: Bad Request - Invalid parameters
- 401: Unauthorized - Invalid or missing API key
- 429: Rate Limited - Token limit exceeded, try again next hour
- 500: Server Error - Internal server error
- error: Message: Human-readable error description · Code: Error code for handling · Type: Error type (e.g., "invalid_request_error")
Error Example
Language: json
{
"error": {
"message": "Token limit exceeded for this hour. Please try again in 45 minutes.",
"code": "rate_limit_exceeded",
"type": "rate_limit_error"
}
}Rate Limits & Quotas
Daily Requests: Depends on hourly token limit
Hourly Tokens: Varies by model (40,000 - 100,000)
Concurrent Requests: Up to 10 simultaneous requests
Reset Interval: Hourly (resets at :00 of each hour)
Throttling: Enabled at 90% of token limit
Best Practices
- 1. Monitor Token Usage: Track your token consumption to stay within hourly limits
- 2. Implement Retry Logic: Use exponential backoff when receiving rate limit errors
- 3. Cache Responses: Store frequently requested responses to reduce API calls
- 4. Optimize Prompts: Keep prompts concise to minimize token usage
- 5. Handle Errors Gracefully: Provide user-friendly error messages for API failures
- 6. Use Appropriate Temperature: Lower temperature (0.1-0.7) for factual responses, higher (0.7-1.5) for creative content
- 7. Set max_tokens Wisely: Limit response length to prevent excessive token consumption
- 8. Batch Requests: Group multiple messages to improve efficiency
Code Examples
- language: python
- code: import requests import json API_KEY = "your_api_key_here" BASE_URL = "https://api.example.com/v1" def chat_completion(message, model="mercury-2"): headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } payload = { "model": model, "messages": [{"role": "user", "content": message}], "temperature": 0.7, "max_tokens": 500 } response = requests.post( f"{BASE_URL}/chat/completions", headers=headers, json=payload ) if response.status_code == 200: data = response.json() return data['choices'][0]['message']['content'] else: print(f"Error: {response.json()}") return None # Usage result = chat_completion("What is the capital of France?") print(result)
- language: php
- code: <?php $apiKey = "your_api_key_here"; $baseUrl = "https://api.example.com/v1"; function chatCompletion($message, $model = "mercury-2") { global $apiKey, $baseUrl; $headers = [ "Authorization: Bearer " . $apiKey, "Content-Type: application/json" ]; $payload = json_encode([ "model" => $model, "messages" => [["role" => "user", "content" => $message]], "temperature" => 0.7, "max_tokens" => 500 ]); $ch = curl_init($baseUrl . "/chat/completions"); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); return $data['choices'][0]['message']['content'] ?? null; } echo chatCompletion("What is the capital of France?"); ?>
- language: bash
- code: curl -X POST https://api.example.com/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mercury-2", "messages": [ {"role": "user", "content": "Hello, how are you?"} ], "temperature": 0.7, "max_tokens": 500 }'
Support & Resources
- Documentation: https://docs.example.com
- Status Page: https://status.example.com
- GitHub: https://github.com/example/api-sdk
- Discord Community: https://discord.gg/example
- Email Support: [email protected]
New project file
Choose a name, then edit the file in Monaco and save it to the cloud.
Ooops, Ptero a bit busy wait 3 minutes and try again.

will take few minutes for the platform to go back! Learn More














