Assistants API Retrieval Pricing: how much does this cost?

Your threads (which are attached to a single user / conversation) can contain metadata.

metadata
map
Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format. Keys can be a maximum of 64 characters long and values can be a maxium of 512 characters long.

If you want to attach specific/private documents to specific people then making an assistant for each person is not the solution.

Even if it was, the procedure is essentially the same. You need to get/authenticate the user, and then find the appropriate assistant/file to attach to them (business logic).

Once you have performed this task you can set the metadata to identify the user for future reference

async function main() {
  const updatedThread = await openai.beta.threads.update(
    "thread_abc123",
    {
      metadata: { modified: "true", user: "abc123" },
    }
  );

  console.log(updatedThread);
}