← Site Get API key

API Reference

A simple, read-only REST API for tools, categories, and your usage. All responses are JSON over HTTPS.

Overview & use cases

The goji.my API is a read-only REST API that puts our live marketplace catalog — tools, categories, verified ratings and pricing — straight into your apps, sites and workflows. Everything is JSON over HTTPS, authenticated with a personal key.

8Published tools
10Categories
JSONover HTTPS
REST v1read-only

Why use it

  • Always-fresh, curated data — the same vetted catalog we maintain, so you never scrape or hand-maintain a tool list.
  • Build once, stay current — new tools and price/rating changes flow through automatically.
  • Currency-aware — prices come with their currency, ready for a local audience.
  • Self-service & secure — create, disable or delete keys yourself; lock them to specific IPs; set a webhook URL.
  • Transparent limits — clear per-minute / day / month quotas you can check anytime via /me.

What you can build

Embeddable widgets

Show curated "best tools by category" on your blog, newsletter or landing pages.

Comparison & directories

Power a "Top CRM" or "Marketing software" listing with real ratings and prices.

AI assistants

Let a chatbot recommend SaaS tools from a trusted, structured catalog.

Content automation

Auto-generate "new this week" or "highest-rated" roundups and keep them in sync.

Internal dashboards

Pull tools and categories into your own admin, CRM, spreadsheet or Notion.

Price & rating monitoring

Poll periodically and alert when a tool's price or rating changes.

It's a read-only catalog API — ideal for displaying, comparing, recommending and syncing tool data. It doesn't place orders or modify listings (vendors manage those in the dashboard).

Jump to Quick start →  ·  Create an API key

Introduction

The base URL for all endpoints is:

Copyhttps://goji.my/api/v1

Create and manage keys from your dashboard. Each request must be authenticated and counts toward your plan's quota.

Authentication

Pass your key as a Bearer token in the Authorization header. For quick tests you can also use an ?api_key= query parameter.

Copycurl https://goji.my/api/v1/tools \ -H "Authorization: Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx"
Keep keys secret. You can disable or delete a key any time from the dashboard; disabled keys are rejected immediately.

Quick start

Fetch the latest tools in your language of choice. Replace the key with your own from the dashboard.

cURL

Copycurl "https://goji.my/api/v1/tools?limit=5" \ -H "Authorization: Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx"

JavaScript (fetch)

Copyconst res = await fetch("https://goji.my/api/v1/tools?limit=5", { headers: { Authorization: "Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx" } }); const { data, count } = await res.json(); console.log(count, data);

PHP

Copy$ch = curl_init("https://goji.my/api/v1/tools?limit=5"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx"], ]); $data = json_decode(curl_exec($ch), true); curl_close($ch);

IP whitelist

For extra security you can restrict API access to specific IP addresses. Set your allowed IPs under Dashboard → API Keys → API Security (one per line or comma-separated). When a whitelist is set, requests from any other IP are rejected with 403 ip_not_allowed. Leave it blank to allow any IP.

Copy203.0.113.10 198.51.100.0
Use * to explicitly allow all IPs. Admins can also set a user's whitelist from the admin panel.

Rate limits & quotas

Limits depend on the plan of the key's owner and are enforced per minute, per day, and per month. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Plan headers; exceeding a limit returns 429.

PlanAPI keysPer minutePer dayPer month
Goji Suite Starter2602,00020,000
Goji Suite Growth1512010,000100,000
Goji Suite Business4030050,000500,000
Goji Suite Enterprise200600UnlimitedUnlimited

These figures are pulled live from each plan — they always reflect current pricing.

Webhooks

Webhooks apply only to API-based tools (tools that expose an API/integration — shown as api_based: true). Of those, some push real-time events; for those you register a single Webhook URL (Dashboard → API Keys → API Security) and we POST JSON events to it. Not every API tool needs a webhook — it depends on the tool:

Tool typeWebhook?Why
Integrations, automation, monitoring, alerting, payment/commerce, CI/deployRequiredThey emit events (runs, alerts, status changes) that must be delivered to you in real time.
Catalog / reference tools (AI writers, design, productivity, SEO data, etc.)Not neededRead-only data you fetch on demand via GET — there's nothing to push back.

Each tool tells you whether it needs one: the /api/v1/tools response includes a webhook_required boolean (an admin sets this per tool). Only configure a webhook if you use a tool where it's true.

Event payload

CopyPOST {your webhook URL} Content-Type: application/json X-Goji-Event: ping { "event": "ping", "sent_at": "2025-02-01T10:00:00+00:00", "message": "Goji.my webhook test", "user_id": 42 }

Use the “Send test webhook” button on your dashboard to verify your endpoint receives and 2xx-acknowledges events. Respond with a 2xx status to confirm receipt.

List tools

GET /api/v1/tools

Returns published tools, newest first.

Query parameters

ParamTypeDefaultDescription
limitinteger25How many tools to return (1–100).

Example request

Copycurl "https://goji.my/api/v1/tools?limit=2" \ -H "Authorization: Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx"

Example response

Copy{ "data": [ { "name": "Goji Flow", "slug": "goji-flow", "tagline": "Automate the busywork — connect your apps and let workflows run themselves.", "category": "Productivity Tools", "pricing": "paid", "price_from": 18, "currency": "USD", "rating": 4.9, "reviews": 45200, "api_based": false, "webhook_required": false, "url": "https://goji.my/tools/goji-flow/" }, { "name": "Goji Insights", "slug": "goji-insights", "tagline": "Turn your business data into dashboards and decisions — no analyst required.", "category": "Finance & Business Tools", "pricing": "paid", "price_from": 19, "currency": "USD", "rating": 4.9, "reviews": 8300, "api_based": false, "webhook_required": false, "url": "https://goji.my/tools/goji-insights/" } ], "count": 8 }

Each tool includes api_based and webhook_required so you know whether it emits webhook events (see Webhooks).

Get a tool

GET /api/v1/tools/{slug}

Fetch one tool by its slug. Returns 404 with tool_not_found if it doesn't exist.

Example request

Copycurl "https://goji.my/api/v1/tools/goji-flow" \ -H "Authorization: Bearer gk_xxxxxxxx.xxxxxxxxxxxxxxxx"

Example response

Copy{ "data": { "name": "Goji Flow", "slug": "goji-flow", "tagline": "Automate the busywork — connect your apps and let workflows run themselves.", "category": "Productivity Tools", "pricing": "paid", "price_from": 18, "currency": "USD", "rating": 4.9, "reviews": 45200, "api_based": false, "webhook_required": false, "url": "https://goji.my/tools/goji-flow/" } }

List categories

GET /api/v1/categories

Top-level categories with live tool counts.

Example response

Copy{ "data": [ { "name": "AI Tools", "slug": "ai-tools", "tools": 0 }, { "name": "Marketing Tools", "slug": "marketing-tools", "tools": 1 }, { "name": "Social Media Tools", "slug": "social-media-tools", "tools": 0 } ], "count": 10 }

Account & usage

GET /api/v1/me

Your plan, limits, and this month's request count — handy for showing usage in your own app.

Example response

Copy{ "data": { "plan": "Goji Suite Starter", "limits": { "per_minute": 60, "per_day": 2000, "per_month": 20000 }, "this_month": 342 } }

Errors

StatusError codeMeaning
401missing_key · invalid_key · revoked_key · expired_keyAuthentication failed.
403api_disabledAPI access for the account is turned off.
429rate_limited · daily_limit_exceeded · monthly_quota_exceededSlow down, wait for reset, or upgrade.
404tool_not_found · unknown_endpointResource or route doesn't exist.
Copied to clipboard