Go REST
Live · v2 stable · v1 deprecated (sunset 2 Jun 2027)

REST API for testing and prototyping.

Realistic data for users, posts, comments and todos. Bearer-token auth, customizable rate limits, JSON or XML. Spend your time on the app you are building, not on stubbing data.

HTTPS only 24/7 online Rate limited OpenAPI-friendly
curl -H "Authorization: Bearer ACCESS-TOKEN" \
     https://gorest.co.in/public/v2/users
const res = await fetch("https://gorest.co.in/public/v2/users", {
  headers: { Authorization: "Bearer ACCESS-TOKEN" }
});
const users = await res.json();
import requests

r = requests.get(
    "https://gorest.co.in/public/v2/users",
    headers={"Authorization": "Bearer ACCESS-TOKEN"}
)
users = r.json()
require "net/http"
require "json"

uri = URI("https://gorest.co.in/public/v2/users")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer ACCESS-TOKEN"

res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
users = JSON.parse(res.body)
req, _ := http.NewRequest("GET", "https://gorest.co.in/public/v2/users", nil)
req.Header.Set("Authorization", "Bearer ACCESS-TOKEN")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
Live response--
Click Run to see live data.
GET/public/v2/users
~120ms · JSONOpen in console
Users
2,966
available now
Posts
3,037
available now
Comments
3,018
available now
Todos
1,487
available now
Operational
last 1h22,872requestsStatus page
Why Go REST

Skip the backend. Ship the frontend.

Realistic users, posts, comments, and todos, wired up exactly like a real app. So you can build, test, and demo without waiting on an API team.

Free, no quota

Sign in with GitHub, Google, or Microsoft, generate a token, ship.

Realistic shape

Names, emails, posts, and comments seeded daily. Relations behave like a real app.

JSON or XML

Append the format, set the header, or stick with the default. Both response styles supported.

You set the limit

Rate limit per access token is yours to configure. Pagination headers do the heavy lifting.

Quickstart

From zero to first request in 60 seconds.

1

Sign in

Use GitHub, Google, or Microsoft. We do not store passwords; we never see them.

2

Create a token

Generate a personal access token. Set its rate limit and revoke it any time you want.

3

Make requests

Send your token in theAuthorizationheader. Try anything in the console first if you want to play.

Resources

Four resources, fully wired up.

Linked the way a real product is. Users own posts and todos; posts collect comments.

2,966 rows

Users

People profiles with name, email, gender and status.

3,037 rows

Posts

Articles linked to users, with title and body.

3,018 rows

Comments

Threaded comments belonging to posts.

1,487 rows

Todos

Tasks owned by users with due dates and status.

Endpoints

The API surface, at a glance.

Pick a version that matches how your client expects to receive data.

v2/public/v2/ default
v1/public/v1/ envelope

Users

GET/public/v2/usersList users with optional filters
GET/public/v2/users/8085961Fetch a single user
POST/public/v2/usersCreate a new user
PATCH/public/v2/users/8085961Update a user (partial)
PUT/public/v2/users/8085961Replace a user (full)
DELETE/public/v2/users/8085961Delete a user

Nested

GET/public/v2/users/8085961/postsPosts authored by a user
POST/public/v2/users/8085961/postsCreate a post for a user
GET/public/v2/posts/8085961/commentsComments on a post
POST/public/v2/posts/8085961/commentsAdd a comment to a post
GET/public/v2/users/8085961/todosTodos owned by a user
POST/public/v2/users/8085961/todosCreate a todo for a user
Use any field as a search filter, e.g./public/v2/users?name=kumar. Pagination is controlled withpageandper_page (max 100).
Sample response

What you get back.

Same data, two shapes. v2 hands you the resource directly; v1 wraps it with pagination metadata.

v1 is deprecated and will be retired on 2 June 2027. New integrations should use v2; existing v1 calls keep working until then and now carry Deprecation and Sunset response headers.

v2GET /public/v2/users
[
  {
    "id": 4521,
    "name": "Avani Iyer",
    "email": "avani.iyer@example.com",
    "gender": "female",
    "status": "active"
  },
  {
    "id": 4520,
    "name": "Pranav Kapoor",
    "email": "pranav.kapoor@example.com",
    "gender": "male",
    "status": "inactive"
  }
]
v1GET /public/v1/users
{
  "meta": {
    "pagination": {
      "total": 2884,
      "pages": 289,
      "page": 1,
      "limit": 10,
      "links": {
        "previous": null,
        "current": "https://gorest.co.in/public/v1/users?page=1",
        "next":     "https://gorest.co.in/public/v1/users?page=2"
      }
    }
  },
  "data": [
    {
      "id": 4521,
      "name": "Avani Iyer",
      "email": "avani.iyer@example.com",
      "gender": "female",
      "status": "active"
    }
  ]
}
Authentication

Bearer tokens, the boring kind.

RESTful APIs are stateless. Send a token with every request, over HTTPS. We support two transports:

  • Authorization header:Authorization: Bearer <token>
  • Query parameter:https://gorest.co.in/public/v2/users?access-token=%3Ctoken%3E
Do not put real personal data here. This is a public sandbox.
Versioning

v2 is direct. v1 wraps.

v2Direct response

Body is the resource ({} or [{}]). Pagination in headers. Status code carries response code.

v1Envelope response

Body is{ meta:, data: }.metacarries pagination,datacarries results.

Rate limit headers

Know your budget.

  • X-RateLimit-Limit
    Requests per minute allowed for this token.
  • X-RateLimit-Remaining
    Requests left in the current window.
  • X-RateLimit-Reset
    Seconds until the window resets.
Pagination headers

Page through anything.

  • X-Pagination-Total
    Total matching results.
  • X-Pagination-Pages
    Total pages.
  • X-Pagination-Page
    Current page.
  • X-Pagination-Limit
    Results per page.
Response codes

Standard HTTP, no surprises.

What each status code actually means, and the most common reason you'll see it.

200
OK

GET succeeded; the resource is in the response body.

201
Created

POST/PUT created a new resource; Location header points to it.

204
No Content

DELETE or empty-body update; we have nothing else to say.

304
Not Modified

Your cached copy is still fresh; do not refetch.

400
Bad Request

Body or query string is malformed; check syntax and required fields.

401
Unauthorized

Authorization header is missing or the token is invalid.

403
Forbidden

Authenticated, but this token cannot access this resource.

404
Not Found

No resource at this URL, or it is owned by another token.

405
Method Not Allowed

The URL exists but does not accept this HTTP verb.

415
Unsupported Media Type

Content-Type is not application/json or application/xml.

422
Unprocessable

JSON parsed but failed validation; body lists the bad fields.

429
Too Many Requests

Rate limit exhausted; retry after X-RateLimit-Reset seconds.

500
Server Error

Something broke on our side. Quote X-Request-Id when reporting.

503
Service Unavailable

Down for maintenance or briefly overloaded. Retry in a bit.

FAQ

Quick answers.

The questions we hear most. If yours is not here, ask in Q&A.

QIs it really free?
A

Yes. No credit card, no usage tier. The trade-off is that data resets daily, and you should not store anything sensitive.

QWhat gets reset?
A

All non-system records are wiped and reseeded every 24 hours, so the API always has fresh, realistic data.

QCan other people see my data?
A

No. Records you create or modify are only visible to your access token. Public seed data is shared.

QJSON or XML?
A

Either. Append .json or .xml to any endpoint, or set the Accept header. Both v1 and v2 support both formats.

QWhat is the rate limit?
A

Default is 90 requests per minute per access token. Customize per token from your account (allowed range 1 to 300).

QHow do I report a bug?
A

Open a question in the Q&A section or use the Contact form. We read everything.

QCan I test loading states and error handlers?
A

Yes. Add ?delay=1500 to any GET request to simulate up to 5 seconds of latency, or ?force_status=500 (also 400, 401, 403, 404, 405, 415, 422, 429, 503) to make the API return that error. Each comes with X-Simulated-Delay-Ms or X-Simulated-Status response headers.

QCan I call it from the browser?
A

Yes. CORS is open and preflight requests are answered. Just keep your access token off the client: use it from a server, a browser extension you control, or a sandbox where exposure is acceptable.