What is the ToolOrca API?
ToolOrca runs a small, free REST API for students and developers in Cambodia and everywhere else. Two parts serve real data: the Khmer dictionaries and the Khmer lunar calendar. The rest is fake but realistic data, like JSONPlaceholder or FakeStoreAPI, with Khmer names and Cambodian products, so you can build a shop, a social feed, a to-do app or a login screen before your own backend is ready.
Every page shows the endpoint, its parameters, code for curl, JavaScript, Flutter/Dart, Kotlin and Swift, an example response and a Try it button that calls the live API.
Quick start
fetch('https://toolorca.com/api/v1/products?limit=5')
.then((res) => res.json())
.then(({ data, meta }) => console.log(data, meta)); Conventions
Responses
All responses are UTF-8 JSON. Single items are returned as an object. Lists always look like this, so one model class fits every list:
{
"data": [
{
"id": 1,
"title": "…"
},
{
"id": 2,
"title": "…"
}
],
"meta": {
"total": 69,
"limit": 2,
"skip": 0,
"page": 1,
"pages": 35
}
} Pagination, search and sorting
Use ?limit= (default 30, max 100) with ?skip= or ?page=. Fake data lists also accept ?q= for search,
?sortBy= with ?order=asc|desc, and ?select=title,price to return only some fields. Add ?pretty to any
URL to get indented JSON in the browser.
Errors
Errors use the right HTTP status code and the same shape every time:
{
"error": {
"status": 404,
"code": "not_found",
"message": "No product with id 999."
}
}
Common codes: 400 bad parameter, 401 missing or invalid token, 404 not found, 405 method not allowed,
413 body over 100 KB, 422 missing required fields, 429 rate limit reached.
Write requests
POST, PUT, PATCH and DELETE on the fake data are accepted and answered like a real API (201 Created with a new id, the updated object, or the deleted object with
isDeleted: true), but nothing is saved. Send JSON with Content-Type: application/json; bodies are limited to 100 KB.
CORS
Every /api/v1 response includes Access-Control-Allow-Origin: *, and OPTIONS preflight requests are answered, so browser apps on any
domain (and localhost) can call the API directly. Native apps (Flutter, Android, iOS) are not affected by CORS.
Rate limits
| Endpoints | Per minute | Per day |
|---|---|---|
| Dictionaries | 90 | 3,000 |
| Calendar, fake data, auth, testing | 120 | 10,000 |
| Placeholder images | 600 | 30,000 |
Limits are per IP address. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset
(seconds until the minute window resets). Over the limit you get 429 with a Retry-After header. GET responses are cacheable; cache
them in your app to stay well inside the limits.
Terms of use
- Free for learning, teaching, personal projects, hackathons and prototypes. No key or account needed.
- No SLA and no guarantee: endpoints may change or be down. Do not build a business-critical product on it.
- The fake data is invented. People, phone numbers, emails (example.com), companies and brands are fictional.
- Do not try to download whole dictionaries, overload the server or get around the limits. Abusive IPs may be blocked.
- Fake auth tokens use a public key: never use them to protect real data.
- A link to ToolOrca in your tutorial or app credits is appreciated. Questions: contact us.
Frequently asked questions
Is the ToolOrca API really free?
Yes. There is no key, no sign-up and no payment. It is meant for learning, tutorials, hackathons and prototypes, with fair per-IP rate limits.
Can I use it in a production app?
Only at your own risk. There is no SLA, data can change between versions and limits may be adjusted. For the fake data APIs, move to your own backend before launch.
Do write requests change the data?
No. POST, PUT, PATCH and DELETE on the fake data return realistic responses, but nothing is stored, so every user always sees the same data.
Does it work from a browser (CORS)?
Yes. Every /api/v1 endpoint sends Access-Control-Allow-Origin: * and answers OPTIONS preflight requests, so it works from React, Vue, Angular or plain JavaScript on any domain.
Which languages can I use?
Any language that can make HTTP requests. Each endpoint page has ready-made examples for curl, JavaScript, Flutter/Dart, Kotlin and Swift.