Schema-less JSON API in Minutes

Create dynamic collections, store any JSON structure, and query with MongoDB-like syntax. No setup, no migrations, just pure productivity.

See It In Action

From zero to API in 30 seconds

1. Start the server

$ docker run --rm -p 8080:8080 \
  -v "$(pwd)":/data \
  -e DB_PATH=/data/data.db \
  ghcr.io/fernandezvara/microapi:latest
{"time":"2025-08-15T13:57:18.58338142Z","level":"INFO","msg":"opened database","path":"/data/data.db"}
{"time":"2025-08-15T13:57:18.588581213Z","level":"INFO","msg":"microapi starting server","port":"8080"}
{"time":"2025-08-15T13:57:18.588636839Z","level":"INFO","msg":"microapi version","version":"v0.1.6"}
            

2. Create your first document

POST /users/customers
{
  "name": "John Doe",
  "email": "john@example.com",
  "preferences": {
    "theme": "dark",
    "notifications": true
  }
}

No Schema Definition

Store any JSON structure without pre-defining schemas

Dynamic Collections

Collections are created automatically on first document

MongoDB-like Queries

Familiar query syntax with powerful operators

Built-in Web Dashboard

Visual interface for managing your data

Everything You Need

Built for developers who value simplicity and speed

Lightning Fast Setup

Single binary deployment. No external dependencies. Just run and go.

SQLite Powered

Reliable, fast, and zero-config database with JSON support built-in.

RESTful API

Clean, predictable REST endpoints with consistent JSON responses.

Advanced Querying

MongoDB-like operators for filtering, sorting, and pagination.

Web Dashboard

Built-in visual interface for managing collections and testing queries.

MCP Support (Future)

Model Context Protocol endpoint for AI assistant integrations.

API Documentation

Simple, powerful, and well-documented

URL Structure

Base URL: http://localhost:8080

Pattern: /:set/:collection[/:id]

Examples:
/users/customers          # Collection operations
/users/customers/abc123   # Document operations
/blog/posts              # Different set

Authentication

✅ No authentication required by default

Perfect for prototyping and internal tools

Content Type

Content-Type: application/json
Accept: application/json

HTTP Methods

GET Retrieve data
POST Create documents
PUT Replace documents
PATCH Update documents
DELETE Remove documents

Create Document

POST /users/customers

{
  "name": "Alice Johnson",
  "email": "alice@example.com",
  "age": 28,
  "preferences": {
    "theme": "dark",
    "language": "en"
  }
}

Get Document by ID

GET /users/customers/d2fjps30h2ipb32i2hg0

Update Document (Full)

PUT /users/customers/d2fjps30h2ipb32i2hg0

{
  "name": "Alice Johnson",
  "email": "alice@example.com",
  "age": 29,
  "preferences": {
    "theme": "light",
    "language": "en"
  }
}

Update Document (Partial)

PATCH /users/customers/d2fjps30h2ipb32i2hg0

{
  "age": 29,
  "preferences.theme": "light"
}

Delete Document

DELETE /users/customers/d2fjps30h2ipb32i2hg0

Basic Query

GET /users/customers

Filter with WHERE

GET /users/customers?where={"age":{"$gte":25}}

Text Pattern Examples

GET /users/customers?where={"user.name":{"$contains":"Ada"}}
GET /users/customers?where={"user.name":{"$icontains":"ada"}}
GET /users/customers?where={"user.name":{"$startsWith":"An"}}
GET /users/customers?where={"user.email":{"$iendsWith":"@EXAMPLE.COM"}}

Sets, Range, and Null Checks

GET /orders/purchases?where={"status":{"$in":["new","processing"]}}
GET /orders/purchases?where={"status":{"$nin":["cancelled"]}}
GET /catalog/products?where={"price":{"$between":[10,20]}}
GET /users/customers?where={"archivedAt":{"$isNull":true}}
GET /users/customers?where={"archivedAt":{"$notNull":true}}

JSONPath Keys & Sorting

GET /users/customers?where={"$.user.age":{"$gte":25}}
GET /users/customers?order_by=$.user.age&limit=10

You can use dot paths like user.age or JSONPath like $.user.age in where and order_by.

Available Operators

Comparison

  • $eq - Equal
  • $ne - Not equal
  • $gt - Greater than
  • $gte - Greater than or equal
  • $lt - Less than
  • $lte - Less than or equal

Text Pattern

  • $like - SQL LIKE (supports % and _)
  • $ilike - Case-insensitive LIKE
  • $startsWith, $istartsWith
  • $endsWith, $iendsWith
  • $contains, $icontains

Sets, Range & Null

  • $in - In array
  • $nin - Not in array
  • $between - Between min and max
  • $isNull - Field is NULL
  • $notNull - Field is NOT NULL

Success Response

{
  "success": true,
  "data": {
    "_id": "d2fjps30h2ipb32i2hg0",
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "age": 28
  },
  "error": null
}

Error Response

{
  "success": false,
  "data": null,
  "error": "Document not found"
}

Collection Query Response

{
  "success": true,
  "data": [
    {
      "_id": "d2fjps30h2ipb32i2hg0",
      "name": "Alice Johnson",
      "age": 28
    },
    {
      "_id": "d2fjps30h2ipb32i2hg1",
      "name": "Bob Smith",
      "age": 32
    }
  ],
  "error": null
}

Empty Result Response

{
  "success": true,
  "data": [],
  "error": null
}

HTTP Status Codes

200 Success
201 Created
400 Bad Request
404 Not Found
413 Payload Too Large
500 Server Error

n8n Integration

Plug and play to automate everything, add data operations to your workflows with our custom n8n node

No-Code Data Operations

Visual Workflow Builder

Drag and drop Micro API operations into your workflows

Full CRUD Support

Create, read, update, delete, and query operations

Easy Installation

Simple npm install and configuration

Installation

# Install the community node
Just search for n8n-nodes-microapi in the n8n node marketplace

# Or install locally (if you prefer to build it yourself)
cd ~/.n8n/custom
npm install n8n-nodes-microapi

# Restart n8n (if you installed locally)
n8n start

Configuration

1. Add Micro API credentials

2. Set your API base URL

3. Start building workflows!

n8n

Common Use Cases

🔄 Data Sync

Sync data between Micro API and other services like Airtable, Google Sheets, or CRM systems.

📊 Form Processing

Capture form submissions and store them with custom processing and validation rules.

🤖 AI Workflows

Use AI to process data from Micro API and trigger actions based on analysis results.

Built-in Web Dashboard

Manage your data visually - no code required

Everything You Need

Browse Collections

See all your sets and collections with document counts and creation dates

JSON Editor

Create and edit documents with syntax highlighting and validation

Query Builder

Test queries interactively with a visual interface

API Examples

See curl examples for every operation to learn the API

Dashboard Preview

📁 users 2 collections
customers 156 docs
admins 3 docs
📁 blog 1 collection
posts 42 docs

Get Started in Minutes

From download to your first API call

1

Download & Run

Single binary, no dependencies

2

Send JSON

POST your first document

3

Query & Scale

Build your application

Quick Start Guide

1. Installation

# Download a binary
Go to: https://github.com/fernandezvara/microapi/releases/

Or download on console. Example:
curl -L https://github.com/fernandezvara/microapi/releases/download/v0.1.6/microapi_Linux_x86_64.tar.gz | tar xz
./microapi
# Run using docker
docker run --rm -p 8080:8080 \
  -v "$(pwd)":/data \
  -e DB_PATH=/data/data.db \
  ghcr.io/fernandezvara/microapi:latest

✓ Server started on port 8080
✓ Dashboard: http://localhost:8080

2. Configuration (Optional)

# Create .env file
PORT=8080
DB_PATH=./data.db
CORS=*
ALLOW_DELETE_SETS=false

3. First API Call

curl -X POST http://localhost:8080/app/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Alice",
    "email": "alice@example.com",
    "role": "admin"
  }'

# Response:
{
  "success": true,
  "data": {
    "_id": "d2fjps30h2ipb32i2hg0",
    "name": "Alice",
    "email": "alice@example.com",
    "role": "admin"
  },
  "error": null
}

4. Query Your Data

# Get all users
curl http://localhost:8080/app/users

# Filter by role
curl "http://localhost:8080/app/users?where={\"role\":{\"$eq\":\"admin\"}}"