{
 "info": {
  "name": "Giggles API (as observed)",
  "description": "Unofficial. Generated from /gigglesapi/ by tools/gen_api_specs.py. Set the collection variables (token = your own Giggles access token; sb_url = the app's Supabase project URL; publishable_key). Requests named '(unverified)' were never confirmed by a live call.",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 },
 "item": [
  {
   "name": "feed",
   "item": [
    {
     "name": "GET /api/v3/feed",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/feed",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "feed"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "Page size. Clients use 50; larger values are unverified.",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "Value of a previous nextCursor. Does not enumerate a stable list (see feed embargo).",
         "disabled": true
        },
        {
         "key": "sort",
         "value": "",
         "description": "top is sent by the earlybird wrapper for its top-videos ranking. Effect on ordering is inferred.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "One page of the ranked recommendation feed: ~50 posts with flat market fields and engagement counts.\n\nAuth: user. Standard headers.\n\nreference: /gigglesapi/#ep-feed",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "posts",
   "item": [
    {
     "name": "GET /api/v3/posts/{postId}/market",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/posts/:postId/market",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "posts",
        ":postId",
        "market"
       ],
       "query": [],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "Current market state of one post. The reference read before any buy.\n\nAuth: user. No body.\n\nreference: /gigglesapi/#ep-post-market",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/posts/{postId}/market/trades",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/posts/:postId/market/trades",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "posts",
        ":postId",
        "market",
        "trades"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "Rows requested. Values above 100 clamp to 100.",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "Accepted and ignored. There is no paging.",
         "disabled": true
        },
        {
         "key": "page",
         "value": "",
         "description": "Accepted and ignored. There is no paging.",
         "disabled": true
        },
        {
         "key": "before",
         "value": "",
         "description": "Accepted and ignored. There is no paging.",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "Accepted and ignored. There is no paging.",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "The most recent trades on a post, newest first. Incomplete by design.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-post-trades",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /api/v3/posts/{postId}/invest",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/posts/:postId/invest",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "posts",
        ":postId",
        "invest"
       ],
       "query": [],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "Buy into a post. Adds points to the pot and mints shares to the caller.\n\nAuth: owner. Body: JSON.\n\nreference: /gigglesapi/#ep-post-invest",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"points\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /api/v3/posts/{postId}/redeem",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/posts/:postId/redeem",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "posts",
        ":postId",
        "redeem"
       ],
       "query": [],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "Sell the caller's entire position in a post.\n\nAuth: owner. Body: JSON.\n\nreference: /gigglesapi/#ep-post-redeem",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"amount\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "users",
   "item": [
    {
     "name": "GET /api/v3/users/search",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/search",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        "search"
       ],
       "query": [
        {
         "key": "q",
         "value": "",
         "description": "Name prefix or fragment. URL-encode.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Username search. Returns up to 20 users.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-users-search",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/profile",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/profile",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "profile"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "Public profile of any user, including balances.\n\nAuth: user. Works for any id, including the caller's own.\n\nreference: /gigglesapi/#ep-users-profile",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/stats",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/stats",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "stats"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "Trading statistics for any user.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-users-stats",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/posts",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/posts",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "posts"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "A creator's live posts with flat market fields, newest first.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-users-posts",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/transactions",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/transactions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "transactions"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "Clients use 100.",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "Paging cursor. inferred from the owner form below.",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "A user's trade ledger, newest first. Readable for any user.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-users-transactions",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/transactions",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/transactions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "transactions"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "Clients use 100.",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "Empty for the first page.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "The caller's own full trade ledger. Same rows as the user-scoped route.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-transactions",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/portfolio",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/portfolio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "portfolio"
       ],
       "query": [
        {
         "key": "offset",
         "value": "",
         "description": "From a previous nextOffset. Omit for page one.",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "Open and closed positions of any user, 50 per page.\n\nAuth: user. Public for any id.\n\nreference: /gigglesapi/#ep-users-portfolio",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/portfolio",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/portfolio",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "portfolio"
       ],
       "query": [
        {
         "key": "offset",
         "value": "",
         "description": "From nextOffset.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "The caller's own portfolio. Same shape and paging as the user-scoped route.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-portfolio",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/users/{userId}/cards",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/users/:userId/cards",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "users",
        ":userId",
        "cards"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "Any user's card collection.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-users-cards",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "PUT /api/user/profile",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/user/profile",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "user",
        "profile"
       ],
       "query": [],
       "variable": []
      },
      "description": "Update the caller's profile. Full replacement: send every field.\n\nAuth: owner. Body: JSON. Not under /api/v3.\n\nreference: /gigglesapi/#ep-user-profile-put",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"username\": \"\",\n  \"display_name\": \"\",\n  \"bio\": \"\",\n  \"college\": \"\",\n  \"social_links\": [],\n  \"profile_photo\": \"\",\n  \"email\": \"\",\n  \"phone_number\": \"\",\n  \"graduation_year\": \"\",\n  \"profile_color\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "leaderboard",
   "item": [
    {
     "name": "GET /api/v3/leaderboard",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/leaderboard",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "leaderboard"
       ],
       "query": [
        {
         "key": "period",
         "value": "",
         "description": "24h is verified. 7d, 30d, all are forwarded by the wrapper; acceptance upstream is inferred. Default is the all-time ranking.",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "From nextCursor. Walks stop at about page 120 (6,000 rows).",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Net-worth ranking, 50 per page, with the caller's own row.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-leaderboard",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "chat",
   "item": [
    {
     "name": "GET /api/v3/chat",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/chat",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "chat"
       ],
       "query": [
        {
         "key": "cursor",
         "value": "",
         "description": "From nextCursor. inferred",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "The global chat room.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-chat-get",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /api/v3/chat",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/chat",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "chat"
       ],
       "query": [],
       "variable": []
      },
      "description": "Post a message to the global chat.\n\nAuth: owner. Body: JSON.\n\nreference: /gigglesapi/#ep-chat-post",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"text\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /rest/v1/chat_participants",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/rest/v1/chat_participants",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "rest",
        "v1",
        "chat_participants"
       ],
       "query": [
        {
         "key": "user_id",
         "value": "",
         "description": "eq.<user-uuid> — the caller's own id (RLS returns nothing else).",
         "disabled": true
        },
        {
         "key": "is_hidden",
         "value": "",
         "description": "eq.false to exclude hidden chats.",
         "disabled": true
        },
        {
         "key": "select",
         "value": "",
         "description": "Column list, e.g. chat_id,unread_count,last_read_at.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "The caller's conversation list: one row per chat the caller belongs to.\n\nAuth: user JWT + apikey.\n\nreference: /gigglesapi/#ep-dm-participants",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /rest/v1/chats",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/rest/v1/chats",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "rest",
        "v1",
        "chats"
       ],
       "query": [
        {
         "key": "id",
         "value": "",
         "description": "in.(a,b,c); clients batch 40 ids per call.",
         "disabled": true
        },
        {
         "key": "select",
         "value": "",
         "description": "e.g. id,last_message,last_message_time,last_message_by.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Chat headers: last message preview and timestamps.\n\nAuth: user JWT + apikey.\n\nreference: /gigglesapi/#ep-dm-chats",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /rest/v1/chat_messages",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/rest/v1/chat_messages",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "rest",
        "v1",
        "chat_messages"
       ],
       "query": [
        {
         "key": "chat_id",
         "value": "",
         "description": "eq.<chat-uuid> or in.(…).",
         "disabled": true
        },
        {
         "key": "user_id",
         "value": "",
         "description": "neq.<user-uuid> to find the other party.",
         "disabled": true
        },
        {
         "key": "order",
         "value": "",
         "description": "created_at.desc.",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Messages in a chat.\n\nAuth: user JWT + apikey.\n\nreference: /gigglesapi/#ep-dm-messages",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /rest/v1/chat_messages",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       },
       {
        "key": "Prefer",
        "value": "return=representation",
        "description": "PostgREST response preference"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/rest/v1/chat_messages",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "rest",
        "v1",
        "chat_messages"
       ],
       "query": [],
       "variable": []
      },
      "description": "Send a direct message.\n\nAuth: user JWT + apikey. Headers: Content-Type: application/json, Prefer: return=representation to receive the inserted row.\n\nreference: /gigglesapi/#ep-dm-send",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"chat_id\": \"\",\n  \"user_id\": \"{{userId}}\",\n  \"text\": \"\",\n  \"message_type\": \"\",\n  \"client_id\": \"\",\n  \"meta\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "PATCH /rest/v1/chat_participants",
     "request": {
      "method": "PATCH",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       },
       {
        "key": "Prefer",
        "value": "return=minimal",
        "description": "PostgREST response preference"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/rest/v1/chat_participants",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "rest",
        "v1",
        "chat_participants"
       ],
       "query": [
        {
         "key": "chat_id",
         "value": "",
         "description": "eq. both, or chat_id=in.(…) for bulk.",
         "disabled": true
        },
        {
         "key": "user_id",
         "value": "",
         "description": "eq. both, or chat_id=in.(…) for bulk.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Mark a chat read, or hide it. Only the caller's own row is writable.\n\nAuth: user JWT + apikey. Prefer: return=minimal.\n\nreference: /gigglesapi/#ep-dm-participant-patch",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"last_read_at\": \"\",\n  \"is_hidden\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "cards",
   "item": [
    {
     "name": "GET /api/v3/cards/trade-with/{userId}",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/trade-with/:userId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "trade-with",
        ":userId"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "Everything needed to compose an offer to one user: both inventories, spendable aura, limits.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-cards-trade-with",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /api/v3/cards/trades",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/trades",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "trades"
       ],
       "query": [],
       "variable": []
      },
      "description": "Create a trade offer.\n\nAuth: owner. Body: JSON.\n\nreference: /gigglesapi/#ep-cards-trades-create",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"receiverId\": \"\",\n  \"offeredItems\": [],\n  \"requestedItems\": [],\n  \"offeredAura\": 0,\n  \"requestedAura\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "POST /api/v3/cards/trades/{offerId}/{action}",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/trades/:offerId/:action",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "trades",
        ":offerId",
        ":action"
       ],
       "query": [],
       "variable": [
        {
         "key": "offerId",
         "value": "{{offerId}}"
        },
        {
         "key": "action",
         "value": "{{action}}"
        }
       ]
      },
      "description": "Resolve an offer. accept and decline by the receiver; cancel by the sender.\n\nAuth: owner. No body.\n\nreference: /gigglesapi/#ep-cards-trades-respond",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/trades",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/trades",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "trades"
       ],
       "query": [
        {
         "key": "status",
         "value": "",
         "description": "pending, accepted, incoming.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "The caller's offers by status.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-cards-trades-list",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/inventory  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/inventory",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "inventory"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] The caller's own cards.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-cards-inventory",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/catalog  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/catalog",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "catalog"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] The card catalog: 57 cards across 6 tiers (including \"contraband\").\n\nAuth: user.\n\nreference: /gigglesapi/#ep-cards-catalog",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/boxes  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/boxes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "boxes"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] Loot-box state for the caller.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-cards-boxes",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/market/auctions  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/market/auctions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "market",
        "auctions"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] The card marketplace: auctions and fixed-price lots.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-cards-market",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/cards/market/lots  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/cards/market/lots",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "cards",
        "market",
        "lots"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] The card marketplace: auctions and fixed-price lots.\n\nAuth: user.\n\nreference: /gigglesapi/#ep-cards-market",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v3/rewards/daily  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v3/rewards/daily",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v3",
        "rewards",
        "daily"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] Daily reward state. Resets at 16:00 UTC.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-rewards-daily",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "uploads",
   "item": [
    {
     "name": "POST /api/uploads/presign",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/uploads/presign",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "uploads",
        "presign"
       ],
       "query": [],
       "variable": []
      },
      "description": "Obtain a presigned PUT URL for an image.\n\nAuth: owner. Body: JSON. Not under /api/v3.\n\nreference: /gigglesapi/#ep-uploads-presign",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"kind\": \"profile-image\",\n  \"contentType\": \"\",\n  \"contentLength\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "PUT {uploadUrl}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "image/png"
       }
      ],
      "url": {
       "raw": "{{uploadUrl}}",
       "host": [
        "{{uploadUrl}}"
       ]
      },
      "description": "Upload the raw bytes to the presigned URL.\n\nNo bearer token: the URL is self-authorising. Headers: exactly requiredHeaders from presign. Body: the file bytes.\n\nreference: /gigglesapi/#ep-uploads-put",
      "body": {
       "mode": "file",
       "file": {
        "src": ""
       }
      },
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "auth",
   "item": [
    {
     "name": "POST /auth/v1/otp",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       },
       {
        "key": "apikey",
        "value": "{{publishable_key}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{publishable_key}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/auth/v1/otp",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "auth",
        "v1",
        "otp"
       ],
       "query": [],
       "variable": []
      },
      "description": "Email a one-time code (or magic link) to an address.\n\nHeaders: apikey, Authorization: Bearer <publishable-key>, Content-Type: application/json.\n\nreference: /gigglesapi/#ep-auth-otp",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"email\": \"\",\n  \"create_user\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "POST /auth/v1/verify",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       },
       {
        "key": "apikey",
        "value": "{{publishable_key}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/auth/v1/verify",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "auth",
        "v1",
        "verify"
       ],
       "query": [],
       "variable": []
      },
      "description": "Exchange the emailed code for a session.\n\nHeaders: apikey, Content-Type: application/json.\n\nreference: /gigglesapi/#ep-auth-verify",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"type\": \"\",\n  \"email\": \"\",\n  \"token\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /auth/v1/authorize",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/auth/v1/authorize",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "auth",
        "v1",
        "authorize"
       ],
       "query": [
        {
         "key": "provider",
         "value": "",
         "description": "google, apple.",
         "disabled": true
        },
        {
         "key": "redirect_to",
         "value": "",
         "description": "Must be on the project's allow-list.",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Start an OAuth login in a browser.\n\nBrowser navigation; no headers.\n\nreference: /gigglesapi/#ep-auth-authorize",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "POST /auth/v1/token",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "apikey",
        "value": "{{publishable_key}}",
        "description": "the project's publishable (anon) key"
       },
       {
        "key": "apikey",
        "value": "{{publishable_key}}"
       },
       {
        "key": "Authorization",
        "value": "Bearer {{publishable_key}}"
       },
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{sb_url}}/auth/v1/token?grant_type=refresh_token",
       "host": [
        "{{sb_url}}"
       ],
       "path": [
        "auth",
        "v1",
        "token"
       ],
       "query": [
        {
         "key": "grant_type",
         "value": "refresh_token",
         "description": "refresh_token.",
         "disabled": false
        }
       ],
       "variable": []
      },
      "description": "Rotate a session.\n\nHeaders: apikey, Authorization: Bearer <publishable-key>, Content-Type: application/json.\n\nreference: /gigglesapi/#ep-auth-refresh",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"refresh_token\": \"\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "wallet/tape",
   "item": [
    {
     "name": "GET /api/v2/wallet  (unverified)",
     "request": {
      "method": "GET",
      "header": [
       {
        "key": "User-Agent",
        "value": "okhttp/4.12.0",
        "description": "the Android client's agent; browsers cannot set it"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v2/wallet",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v2",
        "wallet"
       ],
       "query": [],
       "variable": []
      },
      "description": "[inferred] Wallet capability probe.\n\nAuth: owner.\n\nreference: /gigglesapi/#ep-wallet",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "earlybird wrapper public",
   "item": [
    {
     "name": "GET /api/v1",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1"
       ],
       "query": [],
       "variable": []
      },
      "description": "the endpoint index (also /api/v1/health); no auth.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/chain",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/chain",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "chain"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "1–200",
         "disabled": true
        },
        {
         "key": "before",
         "value": "",
         "description": "(seq)",
         "disabled": true
        },
        {
         "key": "after",
         "value": "",
         "description": "(seq)",
         "disabled": true
        },
        {
         "key": "user",
         "value": "",
         "description": "(pseudonym)",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "the aurachain: a hash-chained, append-only ledger of closed trades, fully pseudonymised.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/chain/stats",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/chain/stats",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "chain",
        "stats"
       ],
       "query": [],
       "variable": []
      },
      "description": "Ledger totals, win rate, head hash.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/chain/verify",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/chain/verify",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "chain",
        "verify"
       ],
       "query": [],
       "variable": []
      },
      "description": "recomputes every hash from genesis.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/chain/users",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/chain/users?q=",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "chain",
        "users"
       ],
       "query": [
        {
         "key": "q",
         "value": "",
         "description": "(pseudonym prefix), limit",
         "disabled": false
        }
       ],
       "variable": []
      },
      "description": "Pseudonymised accounts on the chain.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/live/history",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/live/history",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "live",
        "history"
       ],
       "query": [
        {
         "key": "limit",
         "value": "50",
         "description": "1–500 (default 50)",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "closed live-pool rounds, totals only: no post ids, no names.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/posts/{postId}/trajectory",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/posts/:postId/trajectory",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "posts",
        ":postId",
        "trajectory"
       ],
       "query": [],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "logged snapshots; rows younger than 1 h are never served; ≤ 2000 rows.\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/pulse",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/pulse",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "pulse"
       ],
       "query": [
        {
         "key": "hours",
         "value": "24",
         "description": "1–336 (default 24)",
         "disabled": true
        },
        {
         "key": "keys",
         "value": "",
         "description": "comma list",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/pulse/keys",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/pulse/keys",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "pulse",
        "keys"
       ],
       "query": [],
       "variable": []
      },
      "description": "\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/stats",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/stats",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "stats"
       ],
       "query": [],
       "variable": []
      },
      "description": "\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/public/dataset",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/public/dataset",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "public",
        "dataset"
       ],
       "query": [],
       "variable": []
      },
      "description": "Pointer to the CC-BY-4.0 giggles-market dataset: .\n\nNo auth. Served from the wrapper's own database.\n\nreference: /gigglesapi/#wrapper-public",
      "auth": {
       "type": "noauth"
      }
     },
     "response": []
    }
   ]
  },
  {
   "name": "earlybird wrapper token",
   "item": [
    {
     "name": "GET /api/v1/leaderboard",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/leaderboard",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "leaderboard"
       ],
       "query": [
        {
         "key": "period",
         "value": "24h",
         "description": "24h (default) | 7d | 30d | all",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/top-videos",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/top-videos",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "top-videos"
       ],
       "query": [
        {
         "key": "by",
         "value": "volume",
         "description": "volume (default) | pot | holders | trades | shares | comments | bookmarks | engagement",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "20",
         "description": "1–50 (default 20)",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "Ranks one page of the top feed (≤ 50 posts), not history. Aliases /top_videos, /top.\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/search",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/search?q=",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "search"
       ],
       "query": [
        {
         "key": "q",
         "value": "",
         "description": "≥ 2 chars",
         "disabled": false
        }
       ],
       "variable": []
      },
      "description": "Aliases /members, /member-search.\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/feed",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/feed",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "feed"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "1–50",
         "disabled": true
        },
        {
         "key": "cursor",
         "value": "",
         "description": "from nextCursor",
         "disabled": true
        }
       ],
       "variable": []
      },
      "description": "one feed page in the app's own order.\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/posts/{postId}/market",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/posts/:postId/market",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "posts",
        ":postId",
        "market"
       ],
       "query": [],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/posts/{postId}/trades",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/posts/:postId/trades",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "posts",
        ":postId",
        "trades"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "1–100",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "postId",
         "value": "{{postId}}"
        }
       ]
      },
      "description": "Upstream cap of 100 and the sub-10 omission apply.\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/users/{userId}/profile",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/users/:userId/profile",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":userId",
        "profile"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/users/{userId}/stats",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/users/:userId/stats",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":userId",
        "stats"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    },
    {
     "name": "GET /api/v1/users/{userId}/posts",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{wrapper_url}}/api/v1/users/:userId/posts",
       "host": [
        "{{wrapper_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":userId",
        "posts"
       ],
       "query": [],
       "variable": [
        {
         "key": "userId",
         "value": "{{userId}}"
        }
       ]
      },
      "description": "the creator's live posts, newest first; the earliest public surface for a new post.\n\nAuth: the caller's own Giggles JWT as a bearer token (?token= also works for a quick test). Validated locally, forwarded unchanged, never stored or logged.\n\nreference: /gigglesapi/#wrapper-token",
      "auth": {
       "type": "bearer",
       "bearer": [
        {
         "key": "token",
         "value": "{{token}}",
         "type": "string"
        }
       ]
      }
     },
     "response": []
    }
   ]
  }
 ],
 "variable": [
  {
   "key": "base_url",
   "value": "https://api.usegiggles.com"
  },
  {
   "key": "wrapper_url",
   "value": "https://earlybirdgetstheaura.com"
  },
  {
   "key": "sb_url",
   "value": "https://PROJECT-REF.supabase.co"
  },
  {
   "key": "token",
   "value": ""
  },
  {
   "key": "publishable_key",
   "value": ""
  },
  {
   "key": "postId",
   "value": "00000000-0000-0000-0000-000000000000"
  },
  {
   "key": "userId",
   "value": "00000000-0000-0000-0000-000000000000"
  },
  {
   "key": "offerId",
   "value": "00000000-0000-0000-0000-000000000000"
  },
  {
   "key": "action",
   "value": "accept"
  },
  {
   "key": "uploadUrl",
   "value": ""
  }
 ]
}
