## Documentation Index

Fetch the complete documentation index at: [/llms.txt](https://dev.writer.com/llms.txt)

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

---

### cURL

```bash
curl --location --request POST https://api.writer.com/v1/files \
 --header "Authorization: Bearer <token>" \
 --header "Accept: */*" \
 --header "Content-Disposition: attachment; filename=descriptions.pdf" \
 --header "Content-Length: size_in_bytes" \
 --header "Content-Type: application/pdf" \
 --data-binary "@descriptions.pdf"
```

### Python Example

```python
import os
from pathlib import Path
from writerai import Writer

client = Writer(
    # This is the default and can be omitted
    api_key=os.environ.get("WRITER_API_KEY"),
)
file = client.files.upload(
    content=Path('/path/to/file/descriptions.pdf'),
    content_disposition="attachment; filename=descriptions.pdf",
    content_type="application/pdf"
)
print(file.id)
```

### JavaScript Example

```javascript
import fs from 'fs';
import Writer from 'writer-sdk';

const client = new Writer({
  apiKey: process.env['WRITER_API_KEY'], // This is the default and can be omitted
});

async function main() {
  const file = await client.files.upload({
    content: fs.createReadStream('path/to/file/descriptions.pdf'),
    'Content-Disposition': 'attachment; filename=descriptions.pdf',
    'Content-Type': 'application/pdf',
  });

console.log(file.id);
}

main();
```

---

### Response Example

HTTP Status Code: 200

```json
{
  "id": "7c36a365-392f-43ba-840d-8f3103b42572",
  "name": "example.pdf",
  "created_at": "2024-07-10T14:30:00Z",
  "graph_id": [],
  "status": "in_progress"
}
```

### Authorizations

**Authorization**  
`string`  
**header**  
*required*  
Bearer authentication header of the form `Bearer <token>`, where `<token>` is your [Writer API key](https://dev.writer.com/api-reference/api-keys).

### Headers

**Content-Disposition**  
`string`  
**required**  
The disposition type of the file, typically used to indicate the form-data name. Use `attachment` with the filename parameter to specify the name of the file, for example: `attachment; filename=example.pdf`.

**Content-Type**  
`string`  
**required**  
The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types) of the file being uploaded. Supports `txt`, `doc`, `docx`, `ppt`, `pptx`, `jpg`, `png`, `eml`, `html`, `pdf`, `srt`, `csv`, `xls`, `xlsx`, `mp3`, and `mp4` file extensions.

**Content-Length**  
`integer<int64>`  
**required**  
The size of the file in bytes.

### Query Parameters

**graphId**  
`string<uuid>`  
The unique identifier of the Knowledge Graph to associate the uploaded file with. Note: The response from the upload endpoint does not include the `graphId` field, but the association will be visible when you retrieve the file using the file retrieval endpoint.

### Body

The body is of type `file`.

### Response

`200` - application/json

**id**  
`string`  
*required*  
A unique identifier of the file.

**created_at**  
`string<date-time>`  
*required*  
The timestamp when the file was uploaded.

**name**  
`string`  
*required*  
The name of the file.

**graph_ids**  
`string<uuid>[]`  
*required*  
A list of Knowledge Graph IDs that the file is associated with. If you provided a `graphId` during upload, the file is associated with that Knowledge Graph.
