> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.cloudraker.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.cloudraker.com/_mcp/server.

# Convert a file to Markdown

POST https://api.cloudraker.com/v1/spaces/{spaceId}/files/{ref}/convert/markdown

Returns the file as Markdown text.

`{ref}` is the file id or the file name.

When the file was already parsed, this serves the Markdown that parsing produced and costs nothing extra. Otherwise the bytes are converted on the spot — the answer is the same either way.

The result is text, not a new file: nothing is stored, and nothing is charged to your corpus.

**Learn more:** [Working with files](https://docs.cloudraker.com/developers/files)

Reference: https://docs.cloudraker.com/api/cloud-raker-api/spaces/space-convert-file-to-markdown

## Authentication

- `Authorization` header (bearer token, required)

## Request

### Path parameters

- `ref` (string, required)
- `spaceId` (string, required)

## Response

### 200

The Markdown.

- `object` ("conversion", required)
- `format` ("markdown", required)
- `fileId` (string, required)
- `markdown` (string, required)

## Examples

**Response**

```json
{
  "object": "string",
  "format": "string",
  "fileId": "string",
  "markdown": "string"
}
```

**SDK Code**

```typescript
import { CloudRakerClient } from "@cloudraker/api";

async function main() {
    const client = new CloudRakerClient({
        token: "YOUR_TOKEN_HERE",
    });
    await client.spaces.spaceConvertFileToMarkdown({
        spaceId: "spaceId",
        ref: "ref",
    });
}
main();

```

```python
from cloudraker import CloudRaker

client = CloudRaker(
    token="YOUR_TOKEN_HERE",
)

client.spaces.space_convert_file_to_markdown(
    space_id="spaceId",
    ref="ref",
)

```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.cloudraker.com/v1/spaces/spaceId/files/ref/convert/markdown")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```