Manage files - Writer AI Studio

Documentation Index

Fetch the complete documentation index at: /llms.txt

Use this file to discover all available pages before exploring further.

The File API allows you to manage files in your account. You can upload, download, list, and delete files. After you upload a file, you can use it to perform actions such as attaching it to a Knowledge Graph or using it as an input in a no-code agent. This guide shows you how to perform the following actions:

You need an API key to access the Writer API. Get an API key by following the steps in the API quickstart. We recommend setting the API key as an environment variable in a .env file with the name WRITER_API_KEY.

Upload a file

Endpoint: POST /v1/files

A file persists in your account until you delete it.

You can optionally provide a graphId query parameter to associate the uploaded file with a Knowledge Graph during upload.

cURL

curl --location --request POST "https://api.writer.com/v1/files?graphId=<GRAPH_ID>" \
  --header "Content-Type: text/plain" \
  --header "Content-Disposition: attachment; filename=<FILE_NAME>" \
  --header "Authorization: Bearer $WRITER_API_KEY" \
  --data-binary "@<FILE_PATH>"

# Example:
#   <FILE_NAME> = test.txt
#   <FILE_PATH> = /path/to/test.txt
#   <GRAPH_ID> = 6029b226-1ee0-4239-a1b0-cdeebfa3ad5a (optional)

Python

from pathlib import Path
from writerai import Writer

# Initialize the Writer client. If you don't pass the `api_key` parameter,
# the client looks for the `WRITER_API_KEY` environment variable.
client = Writer()

# Read the file contents
file_path = Path("<FILE_PATH>")  # Replace with your file path, for example: /path/to/test.txt
file_name = file_path.name  # Get the filename from the path

file_ = client.files.upload(
  content=file_path.read_bytes(),  # Read the actual file contents
  content_disposition=f"attachment; filename={file_name}",
  content_type="text/plain"
)

print(file_.id)

JavaScript

import fs from 'fs';
import { Writer } from "writer-sdk";

// Initialize the Writer client. If you don't pass the `api_key` parameter,
// the client looks for the `WRITER_API_KEY` environment variable.
const client = new Writer();

const file = await client.files.upload({
  content: fs.createReadStream("<FILE_PATH>"),  // Replace with your file path, for example: /path/to/test.txt
  "Content-Disposition": "attachment; filename=<FILE_NAME>",  // Replace with your file name, for example: test.txt
  "Content-Type": "text/plain"
});

console.log(file.id)

Query parameters

Parameter Type Description
graphId string Optional. The UUID of the Knowledge Graph to associate the uploaded file with.

Request body

Parameter Type Description
content string The content of the file. See the Python SDK and the JavaScript SDK for more details about how to pass the file contents.
content_disposition string The content disposition of the file.
content_type string The MIME type of the file. The file upload supports txt, doc, docx, ppt, pptx, jpg, png, eml, html, pdf, srt, csv, xls, and xlsx file extensions.

Response format

{
  "id": "1862f090-a281-48f3-8838-26c1e78b605e",
  "created_at": "2024-06-24T12:34:56Z",
  "name": "test.txt",
  "graph_ids": [],
  "status": "in_progress"
}

List all files

Endpoint: GET /v1/files

cURL

curl --location --request GET "https://api.writer.com/v1/files" \
  --header "Authorization: Bearer $WRITER_API_KEY"

Python

from writerai import Writer

# Initialize the Writer client. If you don't pass the `api_key` parameter,
# the client looks for the `WRITER_API_KEY` environment variable.
client = Writer()
page = client.files.list()

for file in page.data:
    print(file.id, file.name, file.graph_ids, file.status)

JavaScript

import { Writer } from "writer-sdk";

// Initialize the Writer client. If you don't pass the `api_key` parameter,
// the client looks for the `WRITER_API_KEY` environment variable.
const client = new Writer();
const files = await client.files.list();

for (const file of files.data) {
    console.log(file.id, file.name, file.graph_ids, file.status);
}

Query parameters

In addition to the pagination parameters, this endpoint supports the following query parameters:

Parameter Type Description
graph_id string Filter files by the graph they are attached to.
status string Filter files by status.
file_types string Filter files by extension type. Separate multiple values by commas. For example, txt,pdf,docx.

Response format

The response has the following structure:

Field Type Description
data array[object] An array of file objects.
data[].id string The ID of the file.
data[].created_at string The date and time the file was created in ISO 8601 format.
data[].name string The name of the file.
data[].graph_ids array[string] The IDs of the Knowledge Graphs the file is attached to.
data[].status string The status of the file.
has_more boolean Whether there are more files to fetch.
first_id string The ID of the first file in the response.
last_id string The ID of the last file in the response.
{
  "data": [
    {
      "id": "f1234-abcd-1234",
      "created_at": "2025-03-07T23:20:50.978908Z",
      "name": "my_file.pdf",
      "graph_ids": [],
      "status": "completed"
    },
    {
      "id": "1234-abcd-5678",
      "created_at": "2025-03-07T23:20:44.047604Z",
      "name": "my_second_file.pdf",
      "graph_ids": [],
      "status": "completed"
    }
  ],
  "has_more": false,
  "first_id": "f1234-abcd-1234",
  "last_id": "1234-abcd-5678"
}

Get a file

Endpoint: GET /v1/files/{fileId}

cURL

curl --location --request GET "https://api.writer.com/v1/files/<FILE_ID>" \
  --header "Authorization: Bearer $WRITER_API_KEY"

Python

from writerai import Writer

# Initialize the Writer client. If you don't pass the `api_key` parameter,
# the client looks for the `WRITER_API_KEY` environment variable.
client = Writer()
file = client.files.retrieve("<FILE_ID>")

print(file.id, file.name, file.graph_ids, file.status)

JavaScript

import { Writer } from "writer-sdk";

// Initialize the Writer client. If you don't pass the `api_key` parameter,
// the client looks for the `WRITER_API_KEY` environment variable.
const client = new Writer();
const file = await client.files.retrieve('<FILE_ID>');

console.log(file.id, file.name, file.graph_ids, file.status)

Response format

{
  "id": "f1234-abcd-1234",
  "created_at": "2025-03-07T23:20:50.978908Z",
  "name": "test.txt",
  "graph_ids": [],
  "status": "completed"
}

Delete a file

Endpoint: DELETE /v1/files/{fileId}

cURL

curl --location --request DELETE "https://api.writer.com/v1/files/<FILE_ID>" \
  --header "Authorization: Bearer $WRITER_API_KEY"

Python

from writerai import Writer

# Initialize the Writer client. If you don't pass the `api_key` parameter,
# the client looks for the `WRITER_API_KEY` environment variable.
client = Writer()
file = client.files.delete("<FILE_ID>")

JavaScript

import { Writer } from "writer-sdk";

// Initialize the Writer client. If you don't pass the `api_key` parameter,
// the client looks for the `WRITER_API_KEY` environment variable.
const client = new Writer();
const fileDeleteResponse = await client.files.delete('<FILE_ID>');

Response format

{
  "id": "f1234-abcd-1234",
  "deleted": true
}