Loopy

Connect

Wire a tool to Loopy. Items in, approved items out, feedback loops back.

How Loopy works

  1. 1Step 1
    Your tool sends an item
    A generator (Claude, n8n, a script — anything that can POST JSON) submits a draft to the Loopy API.
  2. 2Step 2
    You review it here
    The item shows up in the Review feed. Approve, reject, or send it back for changes with structured feedback chips.
  3. 3Step 3
    Loopy dispatches
    Approved items get POSTed to a destination. Iteration feedback gets POSTed back to the generator's callback URL.

Hand off to your AI assistant

Paste the block below into Claude Code, Cowork, or any AI assistant. It carries everything the AI needs to wire your generator — except the bearer token, which goes in a separate follow-up message so credentials don't end up in chat history.

Step 1 — Paste this promptNo credentials
I'm wiring a content generator to Loopy — a human-in-the-loop approval queue for AI-generated content. Help me POST items into it so they show up in my Review feed.

Loopy endpoint: https://loopy.freedaiy.com/api/items
Method: POST
Auth: Authorization: Bearer <I'll paste my token in my next message>

Payload shape:
{
  "source_id": "<unique-id-from-your-side>",   // required
  "title": "<short title>",                    // optional
  "content_type": "<one of: social_post | blog_draft | carousel>",  // required
  "content": { ... },                          // required — shape depends on content_type
  "generator_handle": "@my-generator",         // optional
  "callback_url": "https://...",               // optional — iteration feedback POSTs back here
  "destination_url": "https://...",            // optional — approved items POST here
  "metadata": { ... }                          // optional, freeform
}

Supported content_type shapes:

1. social_post
   content: { text: string, background_image_url?: string, hashtags?: string[] }
   - background_image_url renders full-bleed. Must be a public direct image URL.

2. blog_draft
   content: {
     sections: [{ heading?: string, body: string }, ...]
     OR text: string
   }

3. carousel
   content: {
     slides: [{ image_url: string, caption?: string, alt?: string }, ...]
   }
   - image_url must be publicly fetchable. Google Drive share links DO NOT work
     (they return HTML viewer pages, not bytes).
   - Recommended: upload each slide to a Supabase Storage public bucket from
     the generator, then send the public CDN URL.

What I want to build:
[REPLACE THIS LINE with your use case — e.g. "An n8n workflow that generates a
5-slide carousel from a Google Sheet row and POSTs it to Loopy with image_urls
pointing at my Supabase Storage bucket."]

Please:
1. Ask me anything you need to know about my generator (platform, where images
   live, what data triggers it).
2. Write the integration code or workflow.
3. Show me how to test one item end-to-end before going live.

I'll send the bearer token in my next message.
Step 2 — Send your bearer token as the next message
••••••••••••••••••••••••••••••••••••••••••••

No auth gate on this page yet — anyone with the URL can see this token. Rotate the LOOPY_API_TOKEN env var on Netlify if it leaks.

Or set it up yourself
1Step 1
Pick a content_type

Loopy ships with three built-in renderers:

  • social_post { text, background_image_url?, hashtags? }
  • blog_draft { sections: [{ heading?, body }] } or { text }
  • carousel { slides: [{ image_url, caption?, alt? }] }

Anything else falls back to a raw JSON view.

2Step 2
Host your images publicly

Image URLs must be directly fetchable. Google Drive share links do not work — they return HTML viewer pages, not image bytes.

Easiest: upload to a Supabase Storage public bucket from your generator and pass the public CDN URL. Any CDN that serves the raw file works too.

3Step 3
POST to the endpoint
Endpoint
POST https://loopy.freedaiy.com/api/items

Auth is a bearer token in the Authorizationheader. Get yours from the “Step 2” box above.

curl -X POST https://loopy.freedaiy.com/api/items \
  -H "Authorization: Bearer nMp0CfE7GalRKt6JpQW8fKNLdZElQOp1EBE4Ldpq/40=" \
  -H "Content-Type: application/json" \
  -d '{
    "source_id": "my-generator-2026-01-01",
    "title": "First draft from my generator",
    "content_type": "social_post",
    "content": { "text": "Hello Loopy." },
    "generator_handle": "@my-generator",
    "callback_url": "https://my-generator.example.com/loopy/feedback"
  }'
4Step 4
Watch the Review feed

The item lands in your Review feed in real time (Supabase Realtime — no refresh). Approve, reject, or send it back for changes from there.

Where approved items go

Destinations are the webhooks Loopy POSTs to when you tap Post on an approved item. One destination per place — Postiz, an n8n webhook, your CMS, anything.

No destinations yet.
Approved items have nowhere to go until you add one.
Add your first destination