{
  "info": {
    "name": "Mind Upload Partner API",
    "description": "Integrate Mind Upload AI consciousnesses into your own platform.\n\n**Authentication.** Every request carries your partner key in the `X-Partner-Key` header, always over TLS. Your end-users sign in once with their `username` and `password`; `login` and `register` return a signed, expiring session token (a JWT). On every subsequent call, send that token in the `password` field in place of the raw password — the field accepts either. Reusing the token is the recommended flow and a deliberate security choice: your platform never has to store or replay a user's actual password, and tokens can be rotated or simply left to expire. External Authorization provides passwordless, owner-approved clone invocation without exposing a native password or session token. Grant tokens are accepted only by grant inspection and external clone invocation; never substitute them for native session tokens.\n\n**Calling convention.** Every operation is a single HTTPS POST of a JSON body to `/v1/{operation}`.\n\n**Rate limits.** Limits apply per end-user (with optional overall account ceilings); a 429 response carries a plain-language message. Contact us to raise your limits.\n\n**Getting a key.** Partner keys are issued on request — tell us about your integration and we will review it and reply.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-Partner-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{partnerKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://partner.mindupload.app",
      "type": "string"
    },
    {
      "key": "partnerKey",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "description": "Sign users in and out, register accounts, and check username availability.",
      "item": [
        {
          "name": "login",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/login",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "login"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Sign a user in and receive a session token (JWT) for subsequent calls."
          }
        },
        {
          "name": "logout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/logout",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "logout"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "End the current user session."
          }
        },
        {
          "name": "register",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/register",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "register"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accept_chatroom_invitation_by_others\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a user account on your platform."
          }
        },
        {
          "name": "check_username",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/check_username",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "check_username"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Check whether a username is still available before registering."
          }
        }
      ]
    },
    {
      "name": "Users",
      "description": "Read and update the signed-in user's profile.",
      "item": [
        {
          "name": "get_user",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_user",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_user"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Fetch the signed-in user's profile."
          }
        },
        {
          "name": "update_user",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/update_user",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "update_user"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update the signed-in user's profile."
          }
        },
        {
          "name": "get_transaction_history",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_transaction_history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_transaction_history"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 25,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the user's Rabbit balance history (top-ups, spending, earnings, withdrawals, tax), newest first, filterable by category and paged with a cursor."
          }
        }
      ]
    },
    {
      "name": "AI Consciousnesses",
      "description": "Create and manage a user's AI consciousnesses (clones).",
      "item": [
        {
          "name": "get_clones",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_clones",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_clones"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the user's AI consciousnesses."
          }
        },
        {
          "name": "create_clone",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_clone"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accept_chatroom_invitation_by_others\": true,\n  \"reinforcement_learning\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a new AI consciousness for the user."
          }
        },
        {
          "name": "update_clone",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/update_clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "update_clone"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Update an AI consciousness's profile."
          }
        }
      ]
    },
    {
      "name": "Memories",
      "description": "Upload and list the memories and persona that shape an AI consciousness.",
      "item": [
        {
          "name": "get_texts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_texts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_texts"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 30,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the memories and persona entries uploaded to an AI consciousness."
          }
        },
        {
          "name": "create_text",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_text",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_text"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Upload a memory or persona entry to an AI consciousness."
          }
        }
      ]
    },
    {
      "name": "Conversation",
      "description": "One-on-one chat and proactive group replies with an AI consciousness.",
      "item": [
        {
          "name": "get_chat",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chat",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chat"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 30,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Fetch the one-on-one conversation history with an AI consciousness."
          }
        },
        {
          "name": "rag",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/rag",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "rag"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Send a message to an AI consciousness and receive its reply."
          }
        },
        {
          "name": "trigger_social",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/trigger_social",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "trigger_social"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Have an AI consciousness proactively join the conversation in a chatroom."
          }
        },
        {
          "name": "search_chats",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/search_chats",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "search_chats"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"\",\n  \"password\": \"\",\n  \"clone_id\": \"\",\n  \"sort_order\": -1,\n  \"page_size\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Search the signed-in user's one-on-one conversation with one AI consciousness. Combine an optional keyword with optional media types, unix date bounds, and optional `side` (`user` / `assistant` / `both`). Page with `cursor_value` + `cursor_id`. Use a hit id with `get_chat_around` to jump the dialogue UI."
          }
        },
        {
          "name": "get_chat_around",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chat_around",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chat_around"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"\",\n  \"password\": \"\",\n  \"clone_id\": \"\",\n  \"chat_id\": \"\",\n  \"before\": 15,\n  \"after\": 15\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Load a contiguous window of one-on-one turns around `chat_id` so a client can jump from a find hit into the live dialogue. `before` and `after` cap neighbors on each side of the anchor."
          }
        }
      ]
    },
    {
      "name": "Insights",
      "description": "Mind-graph visualization and two-member compatibility reports.",
      "item": [
        {
          "name": "get_mind_cluster",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_mind_cluster",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_mind_cluster"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"texts_offset\": 0,\n  \"force_rebuild\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Fetch the mind-graph visualization data of an AI consciousness."
          }
        },
        {
          "name": "get_soulmate_report",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_soulmate_report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_soulmate_report"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Generate or fetch the compatibility report between two chatroom members."
          }
        }
      ]
    },
    {
      "name": "Chatrooms",
      "description": "Create chatrooms, manage members, and exchange messages.",
      "item": [
        {
          "name": "create_chatroom",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_chatroom",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_chatroom"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Create a chatroom."
          }
        },
        {
          "name": "get_chatrooms",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chatrooms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chatrooms"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 10000,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the chatrooms the user belongs to."
          }
        },
        {
          "name": "create_chatroom_message",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_chatroom_message",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_chatroom_message"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Send a message to a chatroom."
          }
        },
        {
          "name": "get_chatroom_messages",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chatroom_messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chatroom_messages"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 30,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Fetch messages from a chatroom the user belongs to."
          }
        },
        {
          "name": "search_chatroom_messages",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/search_chatroom_messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "search_chatroom_messages"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"\",\n  \"password\": \"\",\n  \"chatroom_id\": \"\",\n  \"sort_order\": -1,\n  \"page_size\": 30\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Search one chatroom the signed-in user belongs to. Combine an optional keyword with optional media types (`image` / `video` / `audio`), unix date bounds, and optional sender ids. Empty keyword with media, date, or sender filters still returns matching messages. Page with `cursor_value` + `cursor_id` from the previous response. Use a hit id with `get_chatroom_messages_around` to jump the conversation UI."
          }
        },
        {
          "name": "get_chatroom_messages_around",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chatroom_messages_around",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chatroom_messages_around"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"\",\n  \"password\": \"\",\n  \"chatroom_id\": \"\",\n  \"message_id\": \"\",\n  \"before\": 15,\n  \"after\": 15\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Load a contiguous window of chatroom messages around `message_id` so a client can jump from a find hit into the live timeline. `before` and `after` cap how many neighbors are returned on each side of the anchor."
          }
        },
        {
          "name": "translate_chatroom_message",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/translate_chatroom_message",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "translate_chatroom_message"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Translates one text chatroom message into `preferred_language`. This operation requires an active subscription for the end-user. The message body is translated by Mind Upload, and repeated requests may return a cached translation until the source message changes. Reply quotes and media tags are ignored so only the human-readable text body is translated. Very large text messages may be rejected with a validation error before work starts."
          }
        },
        {
          "name": "check_chatroom_updates",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/check_chatroom_updates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "check_chatroom_updates"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Cheap poll endpoint for chatroom freshness. Send each local chatroom id with the last `updated_at` value you saw, or `null` on the first poll. The response echoes one result per requested room in request order, tells you whether the room is still accessible, and returns `has_updates` when you should fetch new messages."
          }
        },
        {
          "name": "create_chatroom_membership",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_chatroom_membership",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_chatroom_membership"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Invite a user or an AI consciousness into a chatroom."
          }
        },
        {
          "name": "get_chatroom_membership",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_chatroom_membership",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_chatroom_membership"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"page\": 1,\n  \"page_size\": 10000,\n  \"sort_by\": \"created_at\",\n  \"sort_order\": -1,\n  \"use_cursor_pagination\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the members of a chatroom the user belongs to."
          }
        }
      ]
    },
    {
      "name": "Live calls",
      "description": "Live voice and video calls between the people in a chatroom.",
      "item": [
        {
          "name": "create_call_session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_call_session",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_call_session"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Starts a live voice and video call in a chatroom. Only one call runs in a room at a time: if somebody has already started one, this returns that call rather than a second one, so two people pressing call at the same moment end up together. The response contains a short-lived joining pass for the person making the request. Hand that pass to the real-time client library on your own app, which is what carries the sound and picture; the media never travels through this API, which only grants permission to join. Live calls are enabled per account, and we send you the client library and its integration guide when we switch them on for you — ask us to get started. Starting a call counts against your monthly allowance; `get_quota` reports your entitlement and what you have used. Use `mode` to choose the kind of call: a conversation everyone can speak in, or a broadcast where the audience listens and asks to speak first. Use `media_tier` to choose whether it carries a picture: `voice` is sound only. Voice and video minutes are counted separately, and your plan may put a ceiling on each kind on top of your combined monthly allowance — `get_quota` reports every ceiling and every figure. A broadcast is always a video call, whatever `media_tier` asks for."
          }
        },
        {
          "name": "join_call_session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/join_call_session",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "join_call_session"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Joins a call that is already running, and returns a joining pass for the person making the request. Someone who is already in the call gets a fresh pass instead of appearing twice. Counts against your monthly allowance."
          }
        },
        {
          "name": "refresh_call_token",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/refresh_call_token",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "refresh_call_token"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Returns a new joining pass for somebody already in a call. A pass authorizes joining, so a call in progress does not drop when one expires — but a fresh pass is what lets a client reconnect after losing its network, so ask for one before the current pass expires. Never refused for being over your allowance."
          }
        },
        {
          "name": "leave_call_session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/leave_call_session",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "leave_call_session"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Says that the person making the request has walked out of a call. Use it whenever somebody leaves, not only when the call is over: it is what keeps the number of people shown beside a call honest, since that number would otherwise count everybody who had ever been in it. It never ends the call and never affects anybody else, so it is safe to send more than once, and it is not refused for being over your allowance. To end a call for everyone, use end_call_session."
          }
        },
        {
          "name": "end_call_session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/end_call_session",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "end_call_session"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Ends a call for everyone. Available to whoever started it, to the chatroom owner and admins, and to the last person still connected — so a call closes itself when the last participant hangs up instead of staying open. Never refused for being over your allowance, because ending a call is what stops it costing anything."
          }
        },
        {
          "name": "set_call_host",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/set_call_host",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "set_call_host"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Gives somebody the call controls — muting, removing, and deciding who may speak — for the length of one call, or takes them back. Available to anybody who already has them. The chatroom owner and admins are not affected either way: they hold these controls in every call in their room, so they cannot be given them and, more importantly, cannot be stripped of them by a guest. A change takes effect the next time that person connects to the call, because what somebody is allowed to do is fixed in the joining pass they were issued; ask them to reconnect, or call join_call_session for them again. The appointment lasts as long as the call and does not make anybody an admin of the chatroom."
          }
        },
        {
          "name": "get_active_call_session",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_active_call_session",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_active_call_session"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Reports the live call in a chatroom, or null when there is none, along with how many people are in it. Use it when opening a room so somebody arriving late can see a call in progress. A call whose participants have all disappeared without saying so is detected and closed here rather than being reported forever."
          }
        }
      ]
    },
    {
      "name": "Media",
      "description": "Signed upload slots and multipart uploads for media attachments, and starting an attachment's description before its message is sent.",
      "item": [
        {
          "name": "request_upload_url",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/request_upload_url",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "request_upload_url"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Request an upload slot and a signed viewing link for a media attachment."
          }
        },
        {
          "name": "request_multipart_upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/request_multipart_upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "request_multipart_upload"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Start a large-file upload in multiple parts."
          }
        },
        {
          "name": "sign_upload_part",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/sign_upload_part",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "sign_upload_part"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Get the signed link for one part of a multipart upload."
          }
        },
        {
          "name": "sign_upload_parts_batch",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/sign_upload_parts_batch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "sign_upload_parts_batch"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Get signed links for several parts of a multipart upload at once."
          }
        },
        {
          "name": "list_upload_parts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/list_upload_parts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "list_upload_parts"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "List the parts already uploaded in a multipart upload."
          }
        },
        {
          "name": "complete_multipart_upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/complete_multipart_upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "complete_multipart_upload"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Finish a multipart upload."
          }
        },
        {
          "name": "abort_multipart_upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/abort_multipart_upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "abort_multipart_upload"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Cancel a multipart upload and discard its parts."
          }
        },
        {
          "name": "cancel_upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/cancel_upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "cancel_upload"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Cancel a pending upload."
          }
        },
        {
          "name": "start_media_analysis",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/start_media_analysis",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "start_media_analysis"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"username\": \"\",\n  \"password\": \"\",\n  \"media\": [\n    {\n      \"media_type\": \"image\",\n      \"url\": \"https://example.com/holiday-photo.jpg\"\n    }\n  ],\n  \"codename\": \"Aria\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Start describing an attachment the moment it is uploaded or pasted in, while the person is still typing. That description is what lets an AI consciousness perceive a shared image, clip, or recording, and today it is written when the message is sent, so the reply waits for it. Call this instead and sending the message later costs nothing extra for that attachment. Name the conversation the attachment is for with either `codename` (a one-on-one AI consciousness) or `chatroom_id` (a room) — exactly one of the two, never both and never neither. It must be a conversation the person can already reach, and it is also what lets the description spell names the way that conversation already spells them. One call may carry at most 1 media item(s): a call is charged one credit however many attachments it carries, so a message with several attachments is one call each, charged one credit each. Calling again for an attachment already being described starts no second description — but it is still a fresh request, charged again and counted again against the rate limit. There is no operation for checking on a description later, and this one must not be used as one: do not poll it. There is also nothing to wait for — if a description is not ready when the message is sent, sending the message writes it then. Call this once per attachment and carry on. Nothing is attached to a message here, and an attachment whose message is never sent is cleaned up on its own. This operation spends credits, so it counts against the daily credit caps `get_quota` reports."
          }
        }
      ]
    },
    {
      "name": "External Authorization",
      "description": "Owner-approved grant issuance, inspection, and clone-scoped invocation.",
      "item": [
        {
          "name": "create_external_authorization_request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/create_external_authorization_request",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "create_external_authorization_request"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"unique-request-id-from-your-system\",\n  \"installation_id\": \"your-installation-id\",\n  \"external_subject\": \"your-external-user-id\",\n  \"requested_scopes\": [\n    \"clone:invoke\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Use this when a person on your platform already has a Mind Upload account. Store the returned device code only for the short authorization window. Show the user code and verification link to the person; they review the application, requested scopes, and selected AI consciousnesses on Mind Upload."
          }
        },
        {
          "name": "exchange_external_authorization",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/exchange_external_authorization",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "exchange_external_authorization"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"device_code\": \"device-code-from-create-response\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Poll no faster than `poll_interval`. `pending`, `slow_down`, and `denied` are successful protocol states without a token. After approval, repeated calls with the same unexpired device code return the same grant token, which makes a lost response safe to retry. On success the response includes `clone_ids` and `clone_nicknames` (id → display name) so partners can label linked clones immediately without a prior invoke."
          }
        },
        {
          "name": "refresh_external_authorization",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/refresh_external_authorization",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "refresh_external_authorization"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"refresh-token-from-exchange-response\",\n  \"installation_id\": \"your-installation-id\",\n  \"external_subject\": \"your-external-user-id\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Use the grant-lifetime refresh token before the access token expires. The refresh token is bound to the same authenticated application, installation, and external identity. Concurrent or repeated refreshes return the same current access token and never extend the owner-approved grant expiry. The response includes `clone_ids` and `clone_nicknames` so partners can keep display names warm across token rotation."
          }
        },
        {
          "name": "inspect_external_authorization",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/inspect_external_authorization",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "inspect_external_authorization"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"access_token\": \"grant-token-from-exchange-response\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Returns only authorization metadata. It never returns an owner password, session token, external identifier, memory, or conversation content."
          }
        },
        {
          "name": "invoke_external_clone",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/invoke_external_clone",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "invoke_external_clone"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"access_token\": \"grant-token-from-exchange-response\",\n  \"installation_id\": \"your-installation-id\",\n  \"external_subject\": \"your-external-user-id\",\n  \"clone_id\": \"64f0c8b2f7a9b4e1c2d3a456\",\n  \"text\": \"Hello from your external app.\",\n  \"idempotency_key\": \"provider-event-id\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Requires the partner key plus an active `clone:invoke` grant bound to the same installation, external identity, and clone. Use a provider event id as `idempotency_key`: exact retries return the stored encrypted outcome and never run generation twice. A concurrent retry returns `processing` with `retry_after_seconds`; an abandoned receipt eventually becomes terminal `failed` and is not regenerated with the same key. The message may include media links so the consciousness can perceive a shared image, clip, or audio. To let it take part in a group conversation, set `is_group`, pass a stable `conversation_id` (each thread keeps its own separate history), and attach the recent surrounding turns as `context_messages` with a `speaker_label` for who is speaking now; the surrounding turns are treated purely as quoted context. The owner must retain normal subscription entitlement; this operation does not spend credits."
          }
        },
        {
          "name": "upload_external_mind_data",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/upload_external_mind_data",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "upload_external_mind_data"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"access_token\": \"\",\n  \"installation_id\": \"\",\n  \"external_subject\": \"\",\n  \"clone_id\": \"\",\n  \"text\": \"\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Upload mind data (text and/or media tags) into the owner's own AI consciousness under an active `clone:upload` grant. Uploads are unbilled and quarantined for owner review unless the owner enabled auto-keep. The optional `idempotency_key` is accepted for forward compatibility but is NOT used for deduplication today — a retry may create a second quarantine item. Do not treat retries as safe no-ops. Each media tag is replaced with a written description of what was uploaded, so the stored text is longer than what you send; if the result exceeds 50000 characters the request is rejected with 400. Sending fewer attachments or shorter text avoids it."
          }
        }
      ]
    },
    {
      "name": "Account",
      "description": "Your partner account — rate limits, credit caps, capacity, and current usage.",
      "item": [
        {
          "name": "get_quota",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/get_quota",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "get_quota"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "description": "Check your partner API rate limits, credit caps, and current usage."
          }
        }
      ]
    }
  ]
}