Blog Fake API for Testing CRUD Operations
A simple and developer-friendly Blog API for practicing REST API workflows like GET, POST, PUT, PATCH, and DELETE. Use it to learn API basics, test apps, build demos, or practice frontend integration with realistic blog post data.
Best for
Students, frontend developers, API beginners, and app prototyping.
Supports
cURL, Fetch, Axios, Python, Ruby on Rails, and Next.js.
Base URL
https://shrimo.com/fake-api/blogBase URL
https://shrimo.com/fake-api/blogWhat is this API for?
Quick Test
https://shrimo.com/fake-api/blog to retrieve a list of blog posts and test your API flow.Quick start example
Start with a simple GET request to fetch all blog posts. This is the easiest way to confirm the API is working in your app or test environment.
fetch("https://shrimo.com/fake-api/blog")
.then((res) => res.json())
.then((data) => console.log(data));Blog object schema
Each blog post includes fields such as title, content, category, status, author, tags, and publish date. This structure makes it useful for CMS demos, blog dashboards, admin panels, editor forms, and frontend integration.
{
"id": "672f0eaa814c297b16f90096",
"title": "How to Learn JavaScript",
"content": "This is a comprehensive guide to learning JavaScript from scratch.",
"category": "Programming",
"status": "Published",
"author": "John Doe",
"tags": ["JavaScript", "Tutorial", "Learning"],
"publishDate": "2026-04-20T00:00:00.000Z",
"createdAt": "2026-04-15T10:00:00.000Z",
"updatedAt": "2026-04-15T10:00:00.000Z"
}API reference
/blogGet all blog posts. Use this for blog list pages, dashboards, and content feeds.
/blog/:idGet one blog post by ID. Use this for a detail page or edit form.
/blogCreate a new blog post. Useful for editor forms and content creation flows.
/blog/:idReplace an existing blog post with a full updated version.
/blog/:idUpdate one or more fields on an existing blog post.
/blog/:idDelete a blog post by ID.
/blogGet all blog posts
What it does: Use GET when you want to read or fetch data.
When to use it: Use this when you want to display all blog posts in a list, feed, or dashboard.
Request Body
No request body needed for this method.
Example Response
{
"success": true,
"count": 2,
"data": [
{
"id": "672f0eaa814c297b16f90096",
"title": "How to Learn JavaScript",
"content": "This is a comprehensive guide to learning JavaScript from scratch.",
"category": "Programming",
"status": "Published",
"author": "John Doe",
"tags": ["JavaScript", "Tutorial", "Learning"],
"publishDate": "2026-04-20T00:00:00.000Z"
},
{
"id": "672f0eaa814c297b16f90097",
"title": "Getting Started with React",
"content": "Learn the basics of building UI with React.",
"category": "Frontend",
"status": "Draft",
"author": "Jane Smith",
"tags": ["React", "Frontend"],
"publishDate": "2026-04-22T00:00:00.000Z"
}
]
}GET /blog examples by language
cURL
curl -X GET "https://shrimo.com/fake-api/blog"JavaScript (Fetch)
const getBlogs = async () => {
const response = await fetch("https://shrimo.com/fake-api/blog");
const data = await response.json();
console.log(data);
};
getBlogs();JavaScript (Axios)
import axios from "axios";
const getBlogs = async () => {
try {
const response = await axios.get("https://shrimo.com/fake-api/blog");
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
getBlogs();Python
import requests
response = requests.get("https://shrimo.com/fake-api/blog")
data = response.json()
print(data)Ruby on Rails
require "net/http"
require "uri"
require "json"
uri = URI.parse("https://shrimo.com/fake-api/blog")
response = Net::HTTP.get_response(uri)
if response.is_a?(Net::HTTPSuccess)
puts JSON.parse(response.body)
else
puts "Error: #{response.code}"
endNext.js
export default async function BlogPage() {
const res = await fetch("https://shrimo.com/fake-api/blog", {
cache: "no-store",
});
const result = await res.json();
return (
<div>
<h1>All Blog Posts</h1>
{result.data.map((blog) => (
<div key={blog.id}>
<h2>{blog.title}</h2>
<p>{blog.content}</p>
</div>
))}
</div>
);
}/blog/:idGet one blog post by ID
What it does: Use GET with an ID when you want only one blog post.
When to use it: Use this when you want to open one blog post and show its details.
Request Body
No request body needed for this method.
Example Response
{
"success": true,
"count": 1,
"data": {
"id": "672f0eaa814c297b16f90096",
"title": "How to Learn JavaScript",
"content": "This is a comprehensive guide to learning JavaScript from scratch.",
"category": "Programming",
"status": "Published",
"author": "John Doe",
"tags": ["JavaScript", "Tutorial", "Learning"],
"publishDate": "2026-04-20T00:00:00.000Z"
}
}GET /blog/:id examples by language
cURL
curl -X GET "https://shrimo.com/fake-api/blog/672f0eaa814c297b16f90096"JavaScript (Fetch)
const getBlogById = async (id) => {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`);
const data = await response.json();
console.log(data);
};
getBlogById("672f0eaa814c297b16f90096");JavaScript (Axios)
import axios from "axios";
const getBlogById = async (id) => {
try {
const response = await axios.get(`https://shrimo.com/fake-api/blog/${id}`);
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
getBlogById("672f0eaa814c297b16f90096");Python
import requests
blog_id = "672f0eaa814c297b16f90096"
response = requests.get(f"https://shrimo.com/fake-api/blog/{blog_id}")
print(response.json())Ruby on Rails
require "net/http"
require "uri"
require "json"
blog_id = "672f0eaa814c297b16f90096"
uri = URI.parse("https://shrimo.com/fake-api/blog/#{blog_id}")
response = Net::HTTP.get_response(uri)
if response.is_a?(Net::HTTPSuccess)
puts JSON.parse(response.body)
else
puts "Error: #{response.code}"
endNext.js
export default async function BlogDetailsPage() {
const res = await fetch("https://shrimo.com/fake-api/blog/672f0eaa814c297b16f90096", {
cache: "no-store",
});
const result = await res.json();
const blog = result.data;
return (
<div>
<h1>{blog.title}</h1>
<p>{blog.content}</p>
<p>Status: {blog.status}</p>
</div>
);
}/blogCreate a new blog post
What it does: Use POST when you want to create new data.
When to use it: Use this when a user submits a blog editor form or creates a new post.
Request Body
{
"title": "How to Build a REST API",
"content": "This post explains how to build a REST API from scratch.",
"category": "Backend",
"status": "Draft",
"author": "John Doe",
"tags": ["API", "Backend", "Node.js"],
"publishDate": "2026-04-20"
}Example Response
{
"success": true,
"message": "Blog post created successfully.",
"data": {
"id": "672f0eaa814c297b16f90096",
"title": "How to Build a REST API",
"content": "This post explains how to build a REST API from scratch.",
"category": "Backend",
"status": "Draft",
"author": "John Doe",
"tags": ["API", "Backend", "Node.js"],
"publishDate": "2026-04-20T00:00:00.000Z"
}
}POST /blog examples by language
cURL
curl -X POST "https://shrimo.com/fake-api/blog" \
-H "Content-Type: application/json" \
-d '{
"title": "How to Build a REST API",
"content": "This post explains how to build a REST API from scratch.",
"category": "Backend",
"status": "Draft",
"author": "John Doe",
"tags": ["API", "Backend", "Node.js"],
"publishDate": "2026-04-20"
}'JavaScript (Fetch)
const createBlog = async () => {
const response = await fetch("https://shrimo.com/fake-api/blog", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "How to Build a REST API",
content: "This post explains how to build a REST API from scratch.",
category: "Backend",
status: "Draft",
author: "John Doe",
tags: ["API", "Backend", "Node.js"],
publishDate: "2026-04-20",
}),
});
const data = await response.json();
console.log(data);
};
createBlog();JavaScript (Axios)
import axios from "axios";
const createBlog = async () => {
try {
const response = await axios.post("https://shrimo.com/fake-api/blog", {
title: "How to Build a REST API",
content: "This post explains how to build a REST API from scratch.",
category: "Backend",
status: "Draft",
author: "John Doe",
tags: ["API", "Backend", "Node.js"],
publishDate: "2026-04-20",
});
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
createBlog();Python
import requests
payload = {
"title": "How to Build a REST API",
"content": "This post explains how to build a REST API from scratch.",
"category": "Backend",
"status": "Draft",
"author": "John Doe",
"tags": ["API", "Backend", "Node.js"],
"publishDate": "2026-04-20"
}
response = requests.post("https://shrimo.com/fake-api/blog", json=payload)
print(response.json())Ruby on Rails
require "net/http"
require "uri"
require "json"
uri = URI.parse("https://shrimo.com/fake-api/blog")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri, {
"Content-Type" => "application/json"
})
request.body = {
title: "How to Build a REST API",
content: "This post explains how to build a REST API from scratch.",
category: "Backend",
status: "Draft",
author: "John Doe",
tags: ["API", "Backend", "Node.js"],
publishDate: "2026-04-20"
}.to_json
response = http.request(request)
puts JSON.parse(response.body)Next.js
async function createBlog() {
const response = await fetch("https://shrimo.com/fake-api/blog", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "How to Build a REST API",
content: "This post explains how to build a REST API from scratch.",
category: "Backend",
status: "Draft",
author: "John Doe",
tags: ["API", "Backend", "Node.js"],
publishDate: "2026-04-20",
}),
});
return response.json();
}/blog/:idReplace a blog post with PUT
What it does: Use PUT when you want to update an existing item with a full new version.
When to use it: Use this when you want to replace most or all values of an existing blog post.
Request Body
{
"title": "How to Build a REST API - Updated",
"content": "This updated post explains REST API design, routing, and testing.",
"category": "Backend",
"status": "Published",
"author": "John Doe",
"tags": ["API", "Backend", "REST"],
"publishDate": "2026-04-25"
}Example Response
{
"success": true,
"message": "Blog post updated successfully.",
"data": {
"id": "672f0eaa814c297b16f90096",
"title": "How to Build a REST API - Updated",
"content": "This updated post explains REST API design, routing, and testing.",
"category": "Backend",
"status": "Published",
"author": "John Doe",
"tags": ["API", "Backend", "REST"],
"publishDate": "2026-04-25T00:00:00.000Z"
}
}PUT /blog/:id examples by language
cURL
curl -X PUT "https://shrimo.com/fake-api/blog/672f0eaa814c297b16f90096" \
-H "Content-Type: application/json" \
-d '{
"title": "How to Build a REST API - Updated",
"content": "This updated post explains REST API design, routing, and testing.",
"category": "Backend",
"status": "Published",
"author": "John Doe",
"tags": ["API", "Backend", "REST"],
"publishDate": "2026-04-25"
}'JavaScript (Fetch)
const updateBlog = async (id) => {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "How to Build a REST API - Updated",
content: "This updated post explains REST API design, routing, and testing.",
category: "Backend",
status: "Published",
author: "John Doe",
tags: ["API", "Backend", "REST"],
publishDate: "2026-04-25",
}),
});
const data = await response.json();
console.log(data);
};
updateBlog("672f0eaa814c297b16f90096");JavaScript (Axios)
import axios from "axios";
const updateBlog = async (id) => {
try {
const response = await axios.put(`https://shrimo.com/fake-api/blog/${id}`, {
title: "How to Build a REST API - Updated",
content: "This updated post explains REST API design, routing, and testing.",
category: "Backend",
status: "Published",
author: "John Doe",
tags: ["API", "Backend", "REST"],
publishDate: "2026-04-25",
});
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
updateBlog("672f0eaa814c297b16f90096");Python
import requests
blog_id = "672f0eaa814c297b16f90096"
payload = {
"title": "How to Build a REST API - Updated",
"content": "This updated post explains REST API design, routing, and testing.",
"category": "Backend",
"status": "Published",
"author": "John Doe",
"tags": ["API", "Backend", "REST"],
"publishDate": "2026-04-25"
}
response = requests.put(f"https://shrimo.com/fake-api/blog/{blog_id}", json=payload)
print(response.json())Ruby on Rails
require "net/http"
require "uri"
require "json"
blog_id = "672f0eaa814c297b16f90096"
uri = URI.parse("https://shrimo.com/fake-api/blog/#{blog_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Put.new(uri.request_uri, {
"Content-Type" => "application/json"
})
request.body = {
title: "How to Build a REST API - Updated",
content: "This updated post explains REST API design, routing, and testing.",
category: "Backend",
status: "Published",
author: "John Doe",
tags: ["API", "Backend", "REST"],
publishDate: "2026-04-25"
}.to_json
response = http.request(request)
puts JSON.parse(response.body)Next.js
async function updateBlog(id) {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "How to Build a REST API - Updated",
content: "This updated post explains REST API design, routing, and testing.",
category: "Backend",
status: "Published",
author: "John Doe",
tags: ["API", "Backend", "REST"],
publishDate: "2026-04-25",
}),
});
return response.json();
}/blog/:idPartially update a blog post
What it does: Use PATCH when you want to change only one or two fields.
When to use it: Use this when you only want to update status, title, tags, or another small part of the blog post.
Request Body
{
"status": "Published"
}Example Response
{
"success": true,
"message": "Blog post patched successfully.",
"data": {
"id": "672f0eaa814c297b16f90096",
"title": "How to Learn JavaScript",
"content": "This is a comprehensive guide to learning JavaScript from scratch.",
"category": "Programming",
"status": "Published",
"author": "John Doe",
"tags": ["JavaScript", "Tutorial", "Learning"],
"publishDate": "2026-04-20T00:00:00.000Z"
}
}PATCH /blog/:id examples by language
cURL
curl -X PATCH "https://shrimo.com/fake-api/blog/672f0eaa814c297b16f90096" \
-H "Content-Type: application/json" \
-d '{
"status": "Published"
}'JavaScript (Fetch)
const patchBlog = async (id) => {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "Published",
}),
});
const data = await response.json();
console.log(data);
};
patchBlog("672f0eaa814c297b16f90096");JavaScript (Axios)
import axios from "axios";
const patchBlog = async (id) => {
try {
const response = await axios.patch(`https://shrimo.com/fake-api/blog/${id}`, {
status: "Published",
});
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
patchBlog("672f0eaa814c297b16f90096");Python
import requests
blog_id = "672f0eaa814c297b16f90096"
payload = {
"status": "Published"
}
response = requests.patch(f"https://shrimo.com/fake-api/blog/{blog_id}", json=payload)
print(response.json())Ruby on Rails
require "net/http"
require "uri"
require "json"
blog_id = "672f0eaa814c297b16f90096"
uri = URI.parse("https://shrimo.com/fake-api/blog/#{blog_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(uri.request_uri, {
"Content-Type" => "application/json"
})
request.body = {
status: "Published"
}.to_json
response = http.request(request)
puts JSON.parse(response.body)Next.js
async function patchBlog(id) {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "Published",
}),
});
return response.json();
}/blog/:idDelete a blog post
What it does: Use DELETE when you want to remove data.
When to use it: Use this when a user clicks a delete button and you want to remove the blog post permanently.
Request Body
No request body needed for this method.
Example Response
{
"success": true,
"message": "Blog post deleted successfully."
}DELETE /blog/:id examples by language
cURL
curl -X DELETE "https://shrimo.com/fake-api/blog/672f0eaa814c297b16f90096"JavaScript (Fetch)
const deleteBlog = async (id) => {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "DELETE",
});
const data = await response.json();
console.log(data);
};
deleteBlog("672f0eaa814c297b16f90096");JavaScript (Axios)
import axios from "axios";
const deleteBlog = async (id) => {
try {
const response = await axios.delete(`https://shrimo.com/fake-api/blog/${id}`);
console.log(response.data);
} catch (error) {
console.error("Error:", error.message);
}
};
deleteBlog("672f0eaa814c297b16f90096");Python
import requests
blog_id = "672f0eaa814c297b16f90096"
response = requests.delete(f"https://shrimo.com/fake-api/blog/{blog_id}")
print(response.json())Ruby on Rails
require "net/http"
require "uri"
require "json"
blog_id = "672f0eaa814c297b16f90096"
uri = URI.parse("https://shrimo.com/fake-api/blog/#{blog_id}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(uri.request_uri)
response = http.request(request)
puts JSON.parse(response.body)Next.js
async function deleteBlog(id) {
const response = await fetch(`https://shrimo.com/fake-api/blog/${id}`, {
method: "DELETE",
});
return response.json();
}Status codes made simple
200 OK
201 Created
400 Bad Request
404 Not Found
Best learning order
1. Start with GET /blog
2. Then try POST /blog
3. Then use GET /blog/:id
4. Then learn PUT and PATCH
5. Finally test DELETE /blog/:id
Frequently asked questions
What is a fake Blog API?
A fake Blog API is a sample or mock API used for testing, learning, prototyping, and frontend integration without depending on a live production backend.
Is this Blog API free to use?
Yes. This Blog API is designed for learning, testing, and developer practice.
Can I use this API with React or Next.js?
Yes. You can use this API with React, Next.js, JavaScript Fetch, Axios, Python requests, and other HTTP libraries.
What is the difference between PUT and PATCH?
PUT is generally used to replace the full resource with updated data, while PATCH is used to update only part of a resource, such as just the status field.
Related links
Need this for a real project?
We can help you turn this workflow into a production-ready system.
Tools are useful for quick work, learning, and testing. If you need the same idea inside a real website, dashboard, CRM, portal, API, or business workflow, our team can plan, design, and build it with proper user roles, validation, performance, and long-term support.
Want to learn this properly?
Learn practical web development with guided training.
If you are a student, fresher, or developer building your skills, explore training and internship options instead of only using the tool once.
Related tools
