{
  "info": {
    "_postman_id": "509510f4-347d-515c-9866-53855c2e9eac",
    "name": "Numu Angels — AI/MCP API (Full)",
    "description": "Ready-to-use collection for the Numu Angels AI/MCP Full connector.\n\nSETUP: 1) Import this + the environment file. 2) Either paste a Sanctum token into {{access_token}}, or run '0 · Authentication › OAuth — Exchange code for token' (it auto-saves the token). 3) Set the *_id variables. All requests inherit collection-level Bearer auth and include a saved response example.\n\nBase path /api/v1. Envelope: { data, meta } on success, { error } on failure. Write responses include \"changed\": true|false. Most writes are reversible via the rollback service.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{access_token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://dashboard.numuangels.net"
    },
    {
      "key": "access_token",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "0 · Authentication",
      "item": [
        {
          "name": "OAuth — Exchange code for token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Auto-capture tokens into the environment after a successful exchange.",
                  "try {",
                  "  const j = pm.response.json();",
                  "  if (j.access_token)  pm.environment.set('access_token', j.access_token);",
                  "  if (j.refresh_token) pm.environment.set('refresh_token', j.refresh_token);",
                  "  console.log('Saved access_token to environment.');",
                  "} catch (e) { console.log('No JSON token in response.'); }",
                  ""
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/oauth/token",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "oauth",
                "token"
              ]
            },
            "description": "Exchange the authorization code (from /oauth/authorize) for an access token. The test script auto-saves access_token + refresh_token into the environment.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"grant_type\": \"authorization_code\",\n  \"code\": \"{{auth_code}}\",\n  \"code_verifier\": \"{{code_verifier}}\",\n  \"client_id\": \"{{client_id}}\",\n  \"redirect_uri\": \"{{redirect_uri}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/oauth/token",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "oauth",
                    "token"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{…}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"access_token\": \"naat_abc123…\",\n  \"refresh_token\": \"natr_def456…\"\n}"
            }
          ]
        },
        {
          "name": "OAuth — Refresh token",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Auto-capture tokens into the environment after a successful exchange.",
                  "try {",
                  "  const j = pm.response.json();",
                  "  if (j.access_token)  pm.environment.set('access_token', j.access_token);",
                  "  if (j.refresh_token) pm.environment.set('refresh_token', j.refresh_token);",
                  "  console.log('Saved access_token to environment.');",
                  "} catch (e) { console.log('No JSON token in response.'); }",
                  ""
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/oauth/token",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "oauth",
                "token"
              ]
            },
            "description": "Get a fresh access token. Auto-saves the new token.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"grant_type\": \"refresh_token\",\n  \"refresh_token\": \"{{refresh_token}}\",\n  \"client_id\": \"{{client_id}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/oauth/token",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "oauth",
                    "token"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{…}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"access_token\": \"naat_new…\",\n  \"refresh_token\": \"natr_new…\"\n}"
            }
          ]
        },
        {
          "name": "Health — Ping (full tier)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/_ping/full",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "_ping",
                "full"
              ]
            },
            "description": "Confirms the token + scope resolve for the Full tier."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/_ping/full",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "_ping",
                    "full"
                  ]
                },
                "description": "Confirms the token + scope resolve for the Full tier."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"ok\": true, \"tier\": \"full\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ],
      "description": "Paste a Sanctum token into {{access_token}} for quick testing, OR run the OAuth exchange (auto-saves the token). All other requests inherit collection-level Bearer auth."
    },
    {
      "name": "1 · Investors",
      "item": [
        {
          "name": "List",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/investors?q=ali&limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "investors"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "ali"
                },
                {
                  "key": "limit",
                  "value": "25"
                }
              ]
            },
            "description": "Cursor-paginated list; optional free-text q."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors?q=ali&limit=25",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors"
                  ],
                  "query": [
                    {
                      "key": "q",
                      "value": "ali"
                    },
                    {
                      "key": "limit",
                      "value": "25"
                    }
                  ]
                },
                "description": "Cursor-paginated list; optional free-text q."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    { \"id\": 42, \"display_name\": \"Ali Qassem\", \"email\": \"ali@x.com\", \"is_favorite\": false }\n  ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"},\"next_cursor\":\"eyJpZ…\",\"has_more\":true}\n}"
            }
          ]
        },
        {
          "name": "Search (typeahead)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/investors/search?q=ali&limit=10",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "investors",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "ali"
                },
                {
                  "key": "limit",
                  "value": "10"
                }
              ]
            },
            "description": "Lightweight id+name search. q ≥ 2 chars."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/investors/search?q=ali&limit=10",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "investors",
                    "search"
                  ],
                  "query": [
                    {
                      "key": "q",
                      "value": "ali"
                    },
                    {
                      "key": "limit",
                      "value": "10"
                    }
                  ]
                },
                "description": "Lightweight id+name search. q ≥ 2 chars."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 42, \"display_name\": \"Ali Qassem\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Get (full profile)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "investors",
                "{{investor_id}}"
              ]
            },
            "description": "Full investor profile with resolved labels, preferences, tags."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "investors",
                    "{{investor_id}}"
                  ]
                },
                "description": "Full investor profile with resolved labels, preferences, tags."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 42, \"display_name\": \"Ali Qassem\", \"sectors\": [\"FinTech\"], \"is_favorite\": false },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Find gaps (enrichment)",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}/gaps",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "investors",
                "{{investor_id}}",
                "gaps"
              ]
            },
            "description": "Missing/empty fields to drive enrichment."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}/gaps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "investors",
                    "{{investor_id}}",
                    "gaps"
                  ]
                },
                "description": "Missing/empty fields to drive enrichment."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"gaps\": [ { \"field\": \"linkedin_url\", \"label\": \"LinkedIn\" } ], \"filled_pct\": 0.82 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Meetings for investor",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/meetings",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "investors",
                "{{investor_id}}",
                "meetings"
              ]
            },
            "description": "Demos/committees this investor is part of + attendance."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/meetings",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}",
                    "meetings"
                  ]
                },
                "description": "Demos/committees this investor is part of + attendance."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"meeting_id\": 9, \"type\": \"demo\", \"date\": \"2026-09-16\", \"attendance_status\": \"coming\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Update",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/investors/{{investor_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "investors",
                "{{investor_id}}"
              ]
            },
            "description": "Partial update — direct + label fields (by id or name); tags attach (no detach). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"investor_bio\": \"Angel, ex-founder\",\n  \"action_option_id\": null,\n  \"tags\": [1, 2],\n  \"rationale\": \"profile cleanup\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}"
                  ]
                },
                "description": "Partial update — direct + label fields (by id or name); tags attach (no detach). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"investor_bio\": \"Angel, ex-founder\",\n  \"action_option_id\": null,\n  \"tags\": [1, 2],\n  \"rationale\": \"profile cleanup\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"investor\": { \"id\": 42, \"investor_bio\": \"Angel, ex-founder\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 Validation",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}"
                  ]
                },
                "description": "Partial update — direct + label fields (by id or name); tags attach (no detach). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"investor_bio\": \"Angel, ex-founder\",\n  \"action_option_id\": null,\n  \"tags\": [1, 2],\n  \"rationale\": \"profile cleanup\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": {\n    \"code\": \"validation_error\",\n    \"message\": \"The given data was invalid.\",\n    \"details\": { \"field\": [\"…\"] }\n  }\n}"
            }
          ]
        },
        {
          "name": "Bulk update",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/investors/bulk-update",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "investors",
                "bulk-update"
              ]
            },
            "description": "Update many investors in one call. Reversible per row.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"updates\": [\n    { \"id\": 42, \"tier_option_id\": 3 },\n    { \"id\": 43, \"investor_bio\": \"Repeat angel\" }\n  ],\n  \"rationale\": \"Q3 batch\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/investors/bulk-update",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "investors",
                    "bulk-update"
                  ]
                },
                "description": "Update many investors in one call. Reversible per row.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"updates\": [\n    { \"id\": 42, \"tier_option_id\": 3 },\n    { \"id\": 43, \"investor_bio\": \"Repeat angel\" }\n  ],\n  \"rationale\": \"Q3 batch\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"updated\": 2, \"results\": [ { \"id\": 42, \"changed\": true } ] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Upload avatar (by URL)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}/upload-avatar",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "investors",
                "{{investor_id}}",
                "upload-avatar"
              ]
            },
            "description": "Set avatar from an image URL (SSRF-checked). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"image_url\": \"https://example.com/ali.jpg\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/investors/{{investor_id}}/upload-avatar",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "investors",
                    "{{investor_id}}",
                    "upload-avatar"
                  ]
                },
                "description": "Set avatar from an image URL (SSRF-checked). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"image_url\": \"https://example.com/ali.jpg\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"avatar_path\": \"avatars/42.jpg\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Preferences (pivots)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/preferences",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "investors",
                "{{investor_id}}",
                "preferences"
              ]
            },
            "description": "Replace preferred sectors / stages / payment_methods (label_option ids). Omit a field to leave it. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sectors\": [18, 19],\n  \"stages\": [201],\n  \"payment_methods\": [205]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/preferences",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}",
                    "preferences"
                  ]
                },
                "description": "Replace preferred sectors / stages / payment_methods (label_option ids). Omit a field to leave it. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sectors\": [18, 19],\n  \"stages\": [201],\n  \"payment_methods\": [205]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"preferences\": { \"sectors\": [18,19], \"stages\": [201], \"payment_methods\": [205] } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 Validation",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/preferences",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}",
                    "preferences"
                  ]
                },
                "description": "Replace preferred sectors / stages / payment_methods (label_option ids). Omit a field to leave it. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sectors\": [18, 19],\n  \"stages\": [201],\n  \"payment_methods\": [205]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": {\n    \"code\": \"validation_error\",\n    \"message\": \"The given data was invalid.\",\n    \"details\": { \"field\": [\"…\"] }\n  }\n}"
            }
          ]
        },
        {
          "name": "Add note",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "investors",
                "{{investor_id}}",
                "notes"
              ]
            },
            "description": "Append a note (append-only; editable, never deleted via API).",
            "body": {
              "mode": "raw",
              "raw": "{ \"note\": \"Interested in FinTech; follow up next week.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/investors/{{investor_id}}/notes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "investors",
                    "{{investor_id}}",
                    "notes"
                  ]
                },
                "description": "Append a note (append-only; editable, never deleted via API).",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"note\": \"Interested in FinTech; follow up next week.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"note_id\": 501, \"entity\": { \"type\": \"investor\", \"id\": 42 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "2 · Companies (Startups)",
      "item": [
        {
          "name": "List",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/startups?q=instant&limit=25",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "instant"
                },
                {
                  "key": "limit",
                  "value": "25"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups?q=instant&limit=25",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups"
                  ],
                  "query": [
                    {
                      "key": "q",
                      "value": "instant"
                    },
                    {
                      "key": "limit",
                      "value": "25"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 475, \"name\": \"Instant\", \"sector\": \"FinTech\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"},\"has_more\":false}\n}"
            }
          ]
        },
        {
          "name": "Search (typeahead)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/startups/search?q=inst",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "startups",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "inst"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/startups/search?q=inst",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "startups",
                    "search"
                  ],
                  "query": [
                    {
                      "key": "q",
                      "value": "inst"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 475, \"name\": \"Instant\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Get (full profile)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "startups",
                "{{startup_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "startups",
                    "{{startup_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 475, \"name\": \"Instant\", \"geographic_focuses\": [\"UAE\"], \"members\": [], \"files\": [] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Find gaps",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}/gaps",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "startups",
                "{{startup_id}}",
                "gaps"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}/gaps",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "startups",
                    "{{startup_id}}",
                    "gaps"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"gaps\": [ { \"field\": \"website\" } ], \"filled_pct\": 0.7 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Update",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}"
              ]
            },
            "description": "Partial update — direct + label fields wrapped in `changes` (by id or name). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"changes\": {\n    \"startup_brief\": \"AI payments\",\n    \"sector_option_id\": 22,\n    \"asking_fund_sar\": 500000\n  },\n  \"rationale\": \"profile cleanup\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}"
                  ]
                },
                "description": "Partial update — direct + label fields wrapped in `changes` (by id or name). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"changes\": {\n    \"startup_brief\": \"AI payments\",\n    \"sector_option_id\": 22,\n    \"asking_fund_sar\": 500000\n  },\n  \"rationale\": \"profile cleanup\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"subject_id\": 475, \"applied\": { \"startup_brief\": \"AI payments\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 Validation",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}"
                  ]
                },
                "description": "Partial update — direct + label fields wrapped in `changes` (by id or name). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"changes\": {\n    \"startup_brief\": \"AI payments\",\n    \"sector_option_id\": 22,\n    \"asking_fund_sar\": 500000\n  },\n  \"rationale\": \"profile cleanup\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": {\n    \"code\": \"validation_error\",\n    \"message\": \"The given data was invalid.\",\n    \"details\": { \"field\": [\"…\"] }\n  }\n}"
            }
          ]
        },
        {
          "name": "Set Status (status_option_id)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}"
              ]
            },
            "description": "Set the PIPELINE STATUS — the `status_option_id` label field. Distinct from action_option_id (the Approve/Reject/Move workflow → use Set Action) and group_id (pipeline group). A change fires the same StartupLabelOptionChanged event the dashboard fires, so any armed status notification sends. Look up ids via Reference · Label options (label_key=status). This env: 17 new, 11 under_review, 10 meeting_requested, 12 had_meeting, 14 listed, 13 rejected, 16 featured, 15 no_action.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"changes\": { \"status_option_id\": 12 },\n  \"rationale\": \"had the intro meeting\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}"
                  ]
                },
                "description": "Set the PIPELINE STATUS — the `status_option_id` label field. Distinct from action_option_id (the Approve/Reject/Move workflow → use Set Action) and group_id (pipeline group). A change fires the same StartupLabelOptionChanged event the dashboard fires, so any armed status notification sends. Look up ids via Reference · Label options (label_key=status). This env: 17 new, 11 under_review, 10 meeting_requested, 12 had_meeting, 14 listed, 13 rejected, 16 featured, 15 no_action.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"changes\": { \"status_option_id\": 12 },\n  \"rationale\": \"had the intro meeting\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"subject_id\": 475, \"applied\": { \"status_option_id\": 12 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Bulk update",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/startups/bulk-update",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "startups",
                "bulk-update"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{ \"updates\": [ { \"id\": 475, \"sector\": \"FinTech\" } ] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/startups/bulk-update",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "startups",
                    "bulk-update"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{ \"updates\": [ { \"id\": 475, \"sector\": \"FinTech\" } ] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"updated\": 1 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Action (business workflow)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/action",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "action"
              ]
            },
            "description": "EXPLICIT business action — runs the SAME StartupLabelActionService as the dashboard (group move + Email/SMS/WhatsApp/in-app + Microsoft-Bookings cleanup + activity logs + automations). NO direct DB write. `action` = slug or option id; `reason` = rejection/request-info text when applicable. Common slugs (verify per environment via Reference · Label options): request_meeting, reject (with reason), committee, move_to_review, move_to_listing_app, move_to_archive, follow_up_email, initial_dd, no_action. Examples: {\"action\":\"request_meeting\"} · {\"action\":\"reject\",\"reason\":\"Not a fit\"} · {\"action\":\"committee\"} · {\"action\":\"move_to_archive\"}.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"committee\",\n  \"reason\": null,\n  \"metadata\": { \"source\": \"pipeline-review\" }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/action",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "action"
                  ]
                },
                "description": "EXPLICIT business action — runs the SAME StartupLabelActionService as the dashboard (group move + Email/SMS/WhatsApp/in-app + Microsoft-Bookings cleanup + activity logs + automations). NO direct DB write. `action` = slug or option id; `reason` = rejection/request-info text when applicable. Common slugs (verify per environment via Reference · Label options): request_meeting, reject (with reason), committee, move_to_review, move_to_listing_app, move_to_archive, follow_up_email, initial_dd, no_action. Examples: {\"action\":\"request_meeting\"} · {\"action\":\"reject\",\"reason\":\"Not a fit\"} · {\"action\":\"committee\"} · {\"action\":\"move_to_archive\"}.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"committee\",\n  \"reason\": null,\n  \"metadata\": { \"source\": \"pipeline-review\" }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"action\": { \"from_option_id\": null, \"to_option_id\": 7, \"name\": \"Committee\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 unknown_action",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/action",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "action"
                  ]
                },
                "description": "EXPLICIT business action — runs the SAME StartupLabelActionService as the dashboard (group move + Email/SMS/WhatsApp/in-app + Microsoft-Bookings cleanup + activity logs + automations). NO direct DB write. `action` = slug or option id; `reason` = rejection/request-info text when applicable. Common slugs (verify per environment via Reference · Label options): request_meeting, reject (with reason), committee, move_to_review, move_to_listing_app, move_to_archive, follow_up_email, initial_dd, no_action. Examples: {\"action\":\"request_meeting\"} · {\"action\":\"reject\",\"reason\":\"Not a fit\"} · {\"action\":\"committee\"} · {\"action\":\"move_to_archive\"}.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"committee\",\n  \"reason\": null,\n  \"metadata\": { \"source\": \"pipeline-review\" }\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": {\n    \"code\": \"unknown_action\",\n    \"message\": \"Unknown startup action. Pass a valid action option id or slug (see details.available).\",\n    \"details\": { \"available\": [ { \"id\": 1, \"slug\": \"reject\", \"name\": \"Reject\" }, { \"id\": 7, \"slug\": \"committee\", \"name\": \"Committee\" } ] }\n  }\n}"
            }
          ]
        },
        {
          "name": "Upload logo (by URL)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}/upload-logo",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "startups",
                "{{startup_id}}",
                "upload-logo"
              ]
            },
            "description": "Set the logo from a URL. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"image_url\": \"https://example.com/logo.png\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/startups/{{startup_id}}/upload-logo",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "startups",
                    "{{startup_id}}",
                    "upload-logo"
                  ]
                },
                "description": "Set the logo from a URL. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"image_url\": \"https://example.com/logo.png\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"logo_file_id\": 880 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Member — Create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "members"
              ]
            },
            "description": "Add a team member / founder.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Mohamed Saad\",\n  \"is_founder\": true,\n  \"linkedin_url\": \"https://linkedin.com/in/x\",\n  \"positions\": []\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "members"
                  ]
                },
                "description": "Add a team member / founder.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"name\": \"Mohamed Saad\",\n  \"is_founder\": true,\n  \"linkedin_url\": \"https://linkedin.com/in/x\",\n  \"positions\": []\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"member\": { \"id\": 925, \"name\": \"Mohamed Saad\", \"is_founder\": true } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Member — Update",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members/{{member_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "members",
                "{{member_id}}"
              ]
            },
            "description": "Full replace of member fields + positions. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"name\": \"Mohamed S.\", \"is_founder\": false }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members/{{member_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "members",
                    "{{member_id}}"
                  ]
                },
                "description": "Full replace of member fields + positions. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"name\": \"Mohamed S.\", \"is_founder\": false }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"member\": { \"id\": 925, \"name\": \"Mohamed S.\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Member — Delete",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members/{{member_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "members",
                "{{member_id}}"
              ]
            },
            "description": "Soft-delete a team member."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/members/{{member_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "members",
                    "{{member_id}}"
                  ]
                },
                "description": "Soft-delete a team member."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"deleted_member_id\": 925 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "File — Upload by URL",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "files"
              ]
            },
            "description": "Upload from a URL (SSRF-checked, size-capped, mime-validated). Single-file slots replace the existing file.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file_url\": \"https://example.com/deck.pdf\",\n  \"slot\": \"pitch_deck\",\n  \"file_name\": \"deck.pdf\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "files"
                  ]
                },
                "description": "Upload from a URL (SSRF-checked, size-capped, mime-validated). Single-file slots replace the existing file.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"file_url\": \"https://example.com/deck.pdf\",\n  \"slot\": \"pitch_deck\",\n  \"file_name\": \"deck.pdf\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"file\": { \"id\": 893, \"slot\": \"pitch_deck\", \"file_type\": \"pdf\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 Validation",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "files"
                  ]
                },
                "description": "Upload from a URL (SSRF-checked, size-capped, mime-validated). Single-file slots replace the existing file.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"file_url\": \"https://example.com/deck.pdf\",\n  \"slot\": \"pitch_deck\",\n  \"file_name\": \"deck.pdf\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": {\n    \"code\": \"validation_error\",\n    \"message\": \"The given data was invalid.\",\n    \"details\": { \"field\": [\"…\"] }\n  }\n}"
            }
          ]
        },
        {
          "name": "File — Upload Initial-DD (cap_table)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "files"
              ]
            },
            "description": "DD document upload; category + document_type required for initial_dd.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"file_url\": \"https://example.com/captable.xlsx\",\n  \"slot\": \"initial_dd\",\n  \"category\": \"financial\",\n  \"document_type\": \"cap_table\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "files"
                  ]
                },
                "description": "DD document upload; category + document_type required for initial_dd.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"file_url\": \"https://example.com/captable.xlsx\",\n  \"slot\": \"initial_dd\",\n  \"category\": \"financial\",\n  \"document_type\": \"cap_table\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"file\": { \"id\": 894, \"slot\": \"initial_dd\", \"document_type\": \"cap_table\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "File — Move Slot",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files/{{file_id}}/slot",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "files",
                "{{file_id}}",
                "slot"
              ]
            },
            "description": "Move between logo/pitch_deck/other (relocates the blob). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"slot\": \"other\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files/{{file_id}}/slot",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "files",
                    "{{file_id}}",
                    "slot"
                  ]
                },
                "description": "Move between logo/pitch_deck/other (relocates the blob). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"slot\": \"other\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"file\": { \"id\": 893, \"slot\": \"other\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "File — Delete",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files/{{file_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "files",
                "{{file_id}}"
              ]
            },
            "description": "Delete file + purge blob. Not auto-reversible."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/files/{{file_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "files",
                    "{{file_id}}"
                  ]
                },
                "description": "Delete file + purge blob. Not auto-reversible."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"deleted_file_id\": 893 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Geographic Focus",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/geographic-focus",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "startups",
                "{{startup_id}}",
                "geographic-focus"
              ]
            },
            "description": "Replace geographic-focus multiselect (label_option ids). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"geographic_focuses\": [39] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/startups/{{startup_id}}/geographic-focus",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "startups",
                    "{{startup_id}}",
                    "geographic-focus"
                  ]
                },
                "description": "Replace geographic-focus multiselect (label_option ids). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"geographic_focuses\": [39] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"preferences\": { \"geographic_focuses\": [39] } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "3 · Demos",
      "item": [
        {
          "name": "List",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/demos?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "demos"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/demos?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "demos"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 9, \"title_en\": \"Demo Day\", \"meeting_date\": \"2026-09-16\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Get (full)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "demos",
                "{{demo_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "demos",
                    "{{demo_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 9, \"title_en\": \"Demo Day\", \"startups\": [475], \"slots\": [] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos"
              ]
            },
            "description": "Create a demo. 422 month_taken if one already exists that month.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title_ar\": \"يوم العرض\",\n  \"title_en\": \"Demo Day\",\n  \"meeting_date\": \"2026-12-16\",\n  \"meeting_time\": \"19:30\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos"
                  ]
                },
                "description": "Create a demo. 422 month_taken if one already exists that month.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title_ar\": \"يوم العرض\",\n  \"title_en\": \"Demo Day\",\n  \"meeting_date\": \"2026-12-16\",\n  \"meeting_time\": \"19:30\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"created\": true, \"demo\": { \"id\": 12 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 month_taken",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos"
                  ]
                },
                "description": "Create a demo. 422 month_taken if one already exists that month.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"title_ar\": \"يوم العرض\",\n  \"title_en\": \"Demo Day\",\n  \"meeting_date\": \"2026-12-16\",\n  \"meeting_time\": \"19:30\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": { \"code\": \"month_taken\", \"message\": \"A demo already exists for this month.\" }\n}"
            }
          ]
        },
        {
          "name": "Update core fields",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}"
              ]
            },
            "description": "Partial update. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"meeting_time\": \"20:00\",\n  \"meeting_url\": \"https://teams.example/demo\",\n  \"rationale\": \"reschedule\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}"
                  ]
                },
                "description": "Partial update. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"meeting_time\": \"20:00\",\n  \"meeting_url\": \"https://teams.example/demo\",\n  \"rationale\": \"reschedule\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"demo\": { \"id\": 9, \"meeting_time\": \"20:00\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Audience",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/audience",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "audience"
              ]
            },
            "description": "Sync pinned investors + groups. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"investor_ids\": [1, 2], \"group_ids\": [3] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/audience",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "audience"
                  ]
                },
                "description": "Sync pinned investors + groups. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"investor_ids\": [1, 2], \"group_ids\": [3] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"effective_investor_count\": 28 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Slots",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/slots",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "slots"
              ]
            },
            "description": "Replace startup time-slots. Validated vs demo time. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"slots\": [\n    { \"startup_id\": {{startup_id}}, \"start_time\": \"19:30\", \"end_time\": \"20:00\" }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/slots",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "slots"
                  ]
                },
                "description": "Replace startup time-slots. Validated vs demo time. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"slots\": [\n    { \"startup_id\": {{startup_id}}, \"start_time\": \"19:30\", \"end_time\": \"20:00\" }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"slot_count\": 1, \"roster\": 1 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 overlap",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/slots",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "slots"
                  ]
                },
                "description": "Replace startup time-slots. Validated vs demo time. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"slots\": [\n    { \"startup_id\": {{startup_id}}, \"start_time\": \"19:30\", \"end_time\": \"20:00\" }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": { \"code\": \"validation_error\", \"message\": \"This slot overlaps with another.\", \"details\": { \"slots.0.start_time\": [\"…\"] } }\n}"
            }
          ]
        },
        {
          "name": "Set Notes",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "notes"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"notes\": \"Rescheduled from Sept 9.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/notes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "notes"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"notes\": \"Rescheduled from Sept 9.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Investor attendance",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/investors/{{investor_id}}/attendance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "investors",
                "{{investor_id}}",
                "attendance"
              ]
            },
            "description": "coming|attended|not_attended. Guarded to audience. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"status\": \"attended\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/investors/{{investor_id}}/attendance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "investors",
                    "{{investor_id}}",
                    "attendance"
                  ]
                },
                "description": "coming|attended|not_attended. Guarded to audience. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"status\": \"attended\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"status\": \"attended\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Startup attendance",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/startups/{{startup_id}}/attendance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "startups",
                "{{startup_id}}",
                "attendance"
              ]
            },
            "description": "Guarded to roster. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"status\": \"coming\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/startups/{{startup_id}}/attendance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "startups",
                    "{{startup_id}}",
                    "attendance"
                  ]
                },
                "description": "Guarded to roster. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"status\": \"coming\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"status\": \"coming\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Retry notifications — preview",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}/retry-notifications/preview",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "demos",
                "{{demo_id}}",
                "retry-notifications",
                "preview"
              ]
            },
            "description": "Delta plan, no sending.",
            "body": {
              "mode": "raw",
              "raw": "{ \"delivery_state\": \"failed\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}/retry-notifications/preview",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "demos",
                    "{{demo_id}}",
                    "retry-notifications",
                    "preview"
                  ]
                },
                "description": "Delta plan, no sending.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"delivery_state\": \"failed\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"recipients\": 99, \"per_channel\": { \"whatsapp\": 99 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Retry notifications — execute",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}/retry-notifications",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "demos",
                "{{demo_id}}",
                "retry-notifications"
              ]
            },
            "description": "Dispatches only missing/failed channels.",
            "body": {
              "mode": "raw",
              "raw": "{ \"delivery_state\": \"failed\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/demos/{{demo_id}}/retry-notifications",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "demos",
                    "{{demo_id}}",
                    "retry-notifications"
                  ]
                },
                "description": "Dispatches only missing/failed channels.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"delivery_state\": \"failed\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"dispatched\": 99 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Announce (fire creation automations)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/announce",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "demos",
                "{{demo_id}}",
                "announce"
              ]
            },
            "description": "Fires DemoCreated → demo_created notifications to the whole audience (same as the dashboard). Call AFTER Set Audience + Set Slots. 422 not_ready if either is empty; idempotent (no re-blast).",
            "body": {
              "mode": "raw",
              "raw": "{ \"rationale\": \"audience + slots ready\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/announce",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "announce"
                  ]
                },
                "description": "Fires DemoCreated → demo_created notifications to the whole audience (same as the dashboard). Call AFTER Set Audience + Set Slots. 422 not_ready if either is empty; idempotent (no re-blast).",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"rationale\": \"audience + slots ready\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"announced\": true, \"announced_at\": \"2026-06-26T10:00:00Z\", \"recipients\": { \"investors\": 28, \"startups_via_slots\": 6 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 not_ready",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/demos/{{demo_id}}/announce",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "demos",
                    "{{demo_id}}",
                    "announce"
                  ]
                },
                "description": "Fires DemoCreated → demo_created notifications to the whole audience (same as the dashboard). Call AFTER Set Audience + Set Slots. 422 not_ready if either is empty; idempotent (no re-blast).",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"rationale\": \"audience + slots ready\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": { \"code\": \"not_ready\", \"message\": \"Cannot announce yet — missing: audience (no effective investors — run demo_set_audience first); slots (no startup slots — run demo_set_slots first).\" }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "4 · Committees",
      "item": [
        {
          "name": "List",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/committees",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "committees"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/committees",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "committees"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 5, \"meeting_date\": \"2026-12-09\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Get (full)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/committees/{{committee_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "committees",
                "{{committee_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/committees/{{committee_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "committees",
                    "{{committee_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 5, \"investors\": [1,2,3], \"startups\": [] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Create",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{ \"meeting_date\": \"2026-12-09\", \"meeting_time\": \"13:00\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{ \"meeting_date\": \"2026-12-09\", \"meeting_time\": \"13:00\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"created\": true, \"committee\": { \"id\": 8 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Update core fields",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"meeting_time\": \"14:00\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"meeting_time\": \"14:00\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Members",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/members",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "members"
              ]
            },
            "description": "Sync roster. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"investor_ids\": [1, 2, 3] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/members",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "members"
                  ]
                },
                "description": "Sync roster. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"investor_ids\": [1, 2, 3] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"member_count\": 3 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Evaluations",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/evaluations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "evaluations"
              ]
            },
            "description": "UPSERT the pass/fail matrix (roster-valid cells only).",
            "body": {
              "mode": "raw",
              "raw": "{ \"cells\": [ { \"startup_id\": {{startup_id}}, \"member_id\": {{investor_id}}, \"result\": \"pass\" } ] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/evaluations",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "evaluations"
                  ]
                },
                "description": "UPSERT the pass/fail matrix (roster-valid cells only).",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"cells\": [ { \"startup_id\": {{startup_id}}, \"member_id\": {{investor_id}}, \"result\": \"pass\" } ] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"written\": 1 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Slots",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/slots",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "slots"
              ]
            },
            "description": "Replace slots. Validated vs committee time. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"slots\": [ { \"startup_id\": {{startup_id}}, \"start_time\": \"13:00\", \"end_time\": \"13:30\" } ] }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/slots",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "slots"
                  ]
                },
                "description": "Replace slots. Validated vs committee time. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"slots\": [ { \"startup_id\": {{startup_id}}, \"start_time\": \"13:00\", \"end_time\": \"13:30\" } ] }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"slot_count\": 1 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set Notes",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "notes"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"notes\": \"Quorum met.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/notes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "notes"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"notes\": \"Quorum met.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Investor attendance",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/investors/{{investor_id}}/attendance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "investors",
                "{{investor_id}}",
                "attendance"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"status\": \"attended\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/investors/{{investor_id}}/attendance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "investors",
                    "{{investor_id}}",
                    "attendance"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"status\": \"attended\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"status\": \"attended\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Startup attendance",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/startups/{{startup_id}}/attendance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "startups",
                "{{startup_id}}",
                "attendance"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"status\": \"coming\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/startups/{{startup_id}}/attendance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "startups",
                    "{{startup_id}}",
                    "attendance"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"status\": \"coming\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"status\": \"coming\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Announce (fire creation automations)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/announce",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "committees",
                "{{committee_id}}",
                "announce"
              ]
            },
            "description": "Fires CommitteeCreated → committee_created notifications to members + startups (same as the dashboard). Call AFTER Set Members + Set Slots. 422 not_ready if either is empty; idempotent.",
            "body": {
              "mode": "raw",
              "raw": "{ \"rationale\": \"members + slots ready\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/announce",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "announce"
                  ]
                },
                "description": "Fires CommitteeCreated → committee_created notifications to members + startups (same as the dashboard). Call AFTER Set Members + Set Slots. 422 not_ready if either is empty; idempotent.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"rationale\": \"members + slots ready\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"announced\": true, \"recipients\": { \"members\": 3, \"startups_via_slots\": 4 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            },
            {
              "name": "422 not_ready",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/committees/{{committee_id}}/announce",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "committees",
                    "{{committee_id}}",
                    "announce"
                  ]
                },
                "description": "Fires CommitteeCreated → committee_created notifications to members + startups (same as the dashboard). Call AFTER Set Members + Set Slots. 422 not_ready if either is empty; idempotent.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"rationale\": \"members + slots ready\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"error\": { \"code\": \"not_ready\", \"message\": \"Cannot announce yet — missing: members (no investors — run committee_set_members first); slots (no startup slots — run committee_set_slots first).\" }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "5 · Meetings (generic)",
      "item": [
        {
          "name": "List",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/meetings?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "meetings"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/meetings?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "meetings"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 9, \"type\": \"demo\", \"date\": \"2026-09-16\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Get",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "meetings",
                "{{meeting_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "meetings",
                    "{{meeting_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 9, \"type\": \"demo\", \"participants\": [] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set attendance",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}/attendance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "meetings",
                "{{meeting_id}}",
                "attendance"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"participant_type\": \"investor\", \"participant_id\": {{investor_id}}, \"status\": \"attended\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}/attendance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "meetings",
                    "{{meeting_id}}",
                    "attendance"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"participant_type\": \"investor\", \"participant_id\": {{investor_id}}, \"status\": \"attended\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"status\": \"attended\" },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Set note",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}/note",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "meetings",
                "{{meeting_id}}",
                "note"
              ]
            },
            "description": "Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"note\": \"All confirmed.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PUT",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/meetings/{{meeting_id}}/note",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "meetings",
                    "{{meeting_id}}",
                    "note"
                  ]
                },
                "description": "Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"note\": \"All confirmed.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "6 · Notes · Tags · Favorites",
      "item": [
        {
          "name": "Notes — list for entity",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/notes?entity_type=investor&entity_id={{investor_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "notes"
              ],
              "query": [
                {
                  "key": "entity_type",
                  "value": "investor"
                },
                {
                  "key": "entity_id",
                  "value": "{{investor_id}}"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/notes?entity_type=investor&entity_id={{investor_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "notes"
                  ],
                  "query": [
                    {
                      "key": "entity_type",
                      "value": "investor"
                    },
                    {
                      "key": "entity_id",
                      "value": "{{investor_id}}"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 501, \"body\": \"Follow up\", \"created_at\": \"2026-06-25T10:00:00Z\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Note — create (generic)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/notes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "notes"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{ \"entity_type\": \"startup\", \"entity_id\": {{startup_id}}, \"body\": \"Strong team.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/notes",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "notes"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{ \"entity_type\": \"startup\", \"entity_id\": {{startup_id}}, \"body\": \"Strong team.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"note_id\": 777, \"entity\": { \"type\": \"startup\", \"id\": 475 } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Note — edit (no delete)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/notes/{{note_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "notes",
                "{{note_id}}"
              ]
            },
            "description": "Edit body. Notes are never deleted via API (owner policy). Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"body\": \"Updated: invested in the round.\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/notes/{{note_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "notes",
                    "{{note_id}}"
                  ]
                },
                "description": "Edit body. Notes are never deleted via API (owner policy). Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"body\": \"Updated: invested in the round.\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"note_id\": 501 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Tags — list",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tags",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tags"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tags",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tags"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 3, \"name\": \"VIP\", \"color\": \"#f00\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Tag — upsert (find-or-create)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tags/upsert",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tags",
                "upsert"
              ]
            },
            "description": "Idempotent: returns existing tag if the name already exists.",
            "body": {
              "mode": "raw",
              "raw": "{ \"name\": \"Hardware\", \"color\": \"#3b82f6\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "201 Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tags/upsert",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tags",
                    "upsert"
                  ]
                },
                "description": "Idempotent: returns existing tag if the name already exists.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"name\": \"Hardware\", \"color\": \"#3b82f6\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"tag\": { \"id\": 11, \"name\": \"Hardware\" }, \"created\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Tag — attach to investor",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tags/{{tag_id}}/attach-investor",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tags",
                "{{tag_id}}",
                "attach-investor"
              ]
            },
            "description": "Idempotent attach (no-op if already attached).",
            "body": {
              "mode": "raw",
              "raw": "{ \"investor_id\": {{investor_id}} }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tags/{{tag_id}}/attach-investor",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tags",
                    "{{tag_id}}",
                    "attach-investor"
                  ]
                },
                "description": "Idempotent attach (no-op if already attached).",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"investor_id\": {{investor_id}} }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"investor_id\": 42, \"tag_id\": 11, \"newly_attached\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Tag — rename/recolor (no delete)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tags/{{tag_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tags",
                "{{tag_id}}"
              ]
            },
            "description": "Rename fans out to every entity carrying the tag. Never deleted/detached. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"name\": \"Hardware/IoT\", \"color\": \"#2266ff\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tags/{{tag_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tags",
                    "{{tag_id}}"
                  ]
                },
                "description": "Rename fans out to every entity carrying the tag. Never deleted/detached. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"name\": \"Hardware/IoT\", \"color\": \"#2266ff\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"tag\": { \"id\": 11, \"name\": \"Hardware/IoT\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Favorite — toggle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/favorites/toggle",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "favorites",
                "toggle"
              ]
            },
            "description": "Toggle the star, or pass desired:true/false to set explicitly. Reversible.",
            "body": {
              "mode": "raw",
              "raw": "{ \"entity_type\": \"investor\", \"entity_id\": {{investor_id}} }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/favorites/toggle",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "favorites",
                    "toggle"
                  ]
                },
                "description": "Toggle the star, or pass desired:true/false to set explicitly. Reversible.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"entity_type\": \"investor\", \"entity_id\": {{investor_id}} }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"changed\": true, \"is_favorite\": true },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "7 · Reference · Audit · Tasks",
      "item": [
        {
          "name": "Label options (lookup ids)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/label-options?label_key=sector",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "label-options"
              ],
              "query": [
                {
                  "key": "label_key",
                  "value": "sector"
                }
              ]
            },
            "description": "Resolve label_option ids for label/multiselect fields."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/label-options?label_key=sector",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "label-options"
                  ],
                  "query": [
                    {
                      "key": "label_key",
                      "value": "sector"
                    }
                  ]
                },
                "description": "Resolve label_option ids for label/multiselect fields."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"sector\": [ { \"id\": 18, \"name\": \"FinTech\" } ] },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "File — download/stream",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/files/{{file_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "files",
                "{{file_id}}"
              ]
            },
            "description": "Streams the file bytes (Content-Type per file)."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/files/{{file_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "files",
                    "{{file_id}}"
                  ]
                },
                "description": "Streams the file bytes (Content-Type per file)."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "(binary — application/pdf …)"
            }
          ]
        },
        {
          "name": "Activity logs — list",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/activity-logs?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "activity-logs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "The AI write audit trail (basis for rollback)."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/activity-logs?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "activity-logs"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                },
                "description": "The AI write audit trail (basis for rollback)."
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 3201, \"action_type\": \"investor.update\", \"reversible\": true } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Activity log — get",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/activity-logs/{{log_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "activity-logs",
                "{{log_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/activity-logs/{{log_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "activity-logs",
                    "{{log_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 3201, \"action_type\": \"investor.update\", \"old_values\": {}, \"new_values\": {} },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Notification logs — list",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/notification-logs?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "notification-logs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/notification-logs?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "notification-logs"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 90, \"channel\": \"whatsapp\", \"status\": \"delivered\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Notification log — get",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/notification-logs/{{log_id}}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "notification-logs",
                "{{log_id}}"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/notification-logs/{{log_id}}",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "notification-logs",
                    "{{log_id}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"id\": 90, \"channel\": \"whatsapp\", \"status\": \"delivered\", \"attempt_count\": 1 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Task — open",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tasks",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tasks"
              ]
            },
            "description": "Groups writes for summary + bulk rollback.",
            "body": {
              "mode": "raw",
              "raw": "{ \"title\": \"Enrich Q3 investor batch\" }",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tasks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tasks"
                  ]
                },
                "description": "Groups writes for summary + bulk rollback.",
                "body": {
                  "mode": "raw",
                  "raw": "{ \"title\": \"Enrich Q3 investor batch\" }",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"task\": { \"id\": 55, \"status\": \"open\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Tasks — list",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tasks?limit=20",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tasks"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tasks?limit=20",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tasks"
                  ],
                  "query": [
                    {
                      "key": "limit",
                      "value": "20"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [ { \"id\": 55, \"title\": \"Enrich Q3 investor batch\", \"status\": \"open\" } ],\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Task — summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tasks/{{task_id}}/summary",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tasks",
                "{{task_id}}",
                "summary"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tasks/{{task_id}}/summary",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tasks",
                    "{{task_id}}",
                    "summary"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"writes\": 12, \"by_action\": { \"investor.update\": 12 }, \"reversible\": 12 },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        },
        {
          "name": "Task — resume",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/v1/ai/tasks/{{task_id}}/resume",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "v1",
                "ai",
                "tasks",
                "{{task_id}}",
                "resume"
              ]
            }
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/api/v1/ai/tasks/{{task_id}}/resume",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "api",
                    "v1",
                    "ai",
                    "tasks",
                    "{{task_id}}",
                    "resume"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": { \"task\": { \"id\": 55, \"status\": \"open\" } },\n  \"meta\": {\"request_id\":\"req_9f2\",\"session_id\":\"claude-sess-1\",\"actor\":{\"id\":7,\"email\":\"admin@numuangels.net\"}}\n}"
            }
          ]
        }
      ]
    }
  ]
}