PostgREST-like
RPC Search Engine.

Stop writing boiler-plate search controllers. GO-DUCK generates an high-performance, unified RPC layer for deep, transactional querying across your multi-silo empire.

Pure Full-Text Search

Native Elasticsearch engine for sub-millisecond fuzzy matching on millions of records.

Transactional RPC

Dynamic, server-side filtering with ?filter=eq.val directly on your GORM models.

Postgres Arrow Power

Query your JSONB fields using Postgres arrow operators (->, ->>) in your URI.

API Reference & Endpoint Map

Verb Endpoint Pattern Discovery Power
GET/api/search/{entity}?q=keywordElite Elasticsearch Fuzzy Search
GET/api/v1/{entity}List and Search with GORM Filter Logic
POST/api/v1/{entity}Atomic Primary Write + Saga Multi-Broadcast
PATCH/api/v1/{entity}/{id}Partial Update (Single Silo or Global)
DELETE/api/v1/{entity}/{id}Distributed Atomic Deletion
POST/api/v1/{entity}/bulkBulk Multi-Silo Transaction

Silo Precision: Transactional Isolation

While GO-DUCK defaults to global federation, sometimes you need surgical precision. Our Dual-Path Orchestrator is controlled by your headers.

Federal Broadcast (Default)

Headers: Empty

Writes synchronize to all silos. Reads aggregate data from the entire dealership empire into a single view.

Silo Narrowing (Precision)

X-Tenant-ID: {Opaque-Silo-ID}

Bypasses federation. Reads and writes are isolated to ONLY that specific silo. Perfect for site-specific audits or sensitive data entries.

Industrial Velocity: Bulk Operations

For high-velocity data ingestion, GO-DUCK generates transaction-aware Bulk Endpoints. A single request can mutate thousands of records across your silos.

Endpoint: POST /api/v1/{entity}/bulk

Payload: Array of Objects

[
  { "make": "Tesla", "model": "Model S" },
  { "make": "Lucid", "model": "Air" }
]

Atomic & Federated

Bulk operations are wrapped in a database transaction. If one record fails validation or insertion, the entire batch is rolled back across all Silos.

Relational Intelligence: Eager Loading

By default, GO-DUCK uses Lazy Loading to keep responses lightweight. However, you can toggle relational graph expansion using our intelligent URI flags.

Eager Expansion (?eager=true)

Recursively loads all 1:m and m:1 relationships defined in your GDL. Perfect for building complex dashboard views in a single call.

GET /api/v1/car/1?eager=true

Lazy Defaults

Returns only the primary entity fields. Relationships remain hydrated as IDs, reducing bandwidth and database overhead.

GET /api/v1/car/1

GORM Filter Reference

eq. (Equals) ne. (Not Equal) gt. (Greater) lt. (Lesser) like. (%) in. (A,B,C) is. (null)