# Creations library

`GET | POST | PATCH | DELETE /v1/creations` — Every image and video you rendered, with its recipe.

- Base URL: https://eroq.ai/v1
- Auth: `Authorization: Bearer eroq_sk_…` (create keys at https://eroq.ai/dashboard/keys)
- Credits: Free

Every /v1 image, video and speech render is saved to your creation library automatically (free) with the full recipe in `meta` — model, rack, seconds, references. Pass `folder_id` on the generation call (images, videos, video edits, speech, remove-background, film renders) and it lands straight in that folder. `GET /v1/creations/{id}` fetches one; `PATCH /v1/creations/{id}` moves it between folders (`{ "folderId": … | null }`) and hearts it (`{ "favorite": true }` — `favoritedAt` on every creation); `DELETE` removes it and its file.

Folders: `GET /v1/folders` lists them, `POST /v1/folders` (`{ "name": … }`) creates, `PATCH /v1/folders/{id}` renames, `DELETE /v1/folders/{id}` removes — deleting a folder keeps its creations (they fall back to the root).

**Public folder links** (Team, Agency and Enterprise). `POST /v1/folders/{id}/share` gives a folder a page anyone with the link can open, signed out — `share.url` (eroq.ai/f/…). Visitors see the files only: never a prompt, a model or your account; `downloads: false` makes it view-only. The page follows the folder (files you add appear), pauses while the workspace that shared it is off the business tier, and never gets indexed. `DELETE /v1/folders/{id}/share` kills the link at once — sharing again mints a new one. A role that cannot publish answers 403 `role_forbidden`; a plan below Team, 403 `plan_required`.

**Community publishing.** `POST /v1/creations/{id}/publish` puts a creation on the public shelf at eroq.ai/community and on your profile at eroq.ai/@username — `title` is its public face; an image or a clip shows its prompt unless you pass `showPrompt: false` (the rest of the recipe stays private, and a voice line never shows its script); `durationSeconds` overrides the badge with the exact measured length. `DELETE …/publish` pulls it back (likes, comments and views survive a re-publish). `POST …/thumbnail` (multipart `file`, image ≤ 5MB) sets the cover of a video or voice.

## Operations

| Method | Path | What it does |
| --- | --- | --- |
| `GET` | `/v1/creations` | List your renders with folders and recipes. |
| `GET` | `/v1/creations/{id}` | One creation, full meta — the Remix recipe. |
| `PATCH` | `/v1/creations/{id}` | Move it between folders ({ "folderId": … \| null }) and/or heart it ({ "favorite": true }). |
| `DELETE` | `/v1/creations/{id}` | Delete the creation and its file. |
| `POST` | `/v1/creations/{id}/publish` | Submit to the community shelf. Every publish is reviewed by our team first: `review` is `pending`, then `approved` (live) or `rejected` — readable on the creation. Publishing again keeps the verdict unless the title changes or a hidden prompt is shown; a rejected item is resubmitted. |
| `DELETE` | `/v1/creations/{id}/publish` | Remove it from the community — engagement is kept for a re-publish. |
| `POST` | `/v1/creations/{id}/thumbnail` | Set the cover of a video/voice (multipart `file`, image ≤ 5MB). A new cover on an approved community item sends it back to review (`review` in the response). |
| `GET` | `/v1/folders` | List your folders — `share` is the public link, null while private. |
| `POST` | `/v1/folders` | Create a folder. |
| `PATCH` | `/v1/folders/{id}` | Rename a folder. |
| `DELETE` | `/v1/folders/{id}` | Delete a folder — its creations fall back to the root, its public link dies. |
| `POST` | `/v1/folders/{id}/share` | Share a folder publicly (Team, Agency, Enterprise) — or update the live link. Idempotent: a shared folder keeps its link. |
| `DELETE` | `/v1/folders/{id}/share` | Stop sharing — the link stops working at once; sharing again mints a new one. |

## GET /v1/creations

List your renders with folders and recipes.

### Example request

```bash
curl https://eroq.ai/v1/creations \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations', {
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.get("https://eroq.ai/v1/creations", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://eroq.ai/v1/creations", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "folders": [{ "id": "…", "name": "Campaign A" }],
  "creations": [{
    "id": "…", "kind": "video", "url": "https://…", "model": "seedance-2-5",
    "prompt": "slow pan over the rooftop", "meta": { "seconds": 10, "shot": "push-in" }
  }]
}
```

## GET /v1/creations/{id}

One creation, full meta — the Remix recipe.

### Example request

```bash
curl https://eroq.ai/v1/creations/CREATION_ID \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID', {
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.get("https://eroq.ai/v1/creations/CREATION_ID", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://eroq.ai/v1/creations/CREATION_ID", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "creation": {
    "id": "4a17…", "kind": "video", "url": "https://cdn.eroq.ai/library/…/scene-1.mp4",
    "model": "eroq-motion-one", "prompt": "slow pan over the rooftop",
    "folderId": null, "publishedAt": null, "review": null,
    "meta": { "seconds": 10, "shot": "push-in", "aspect": "16:9" },
    "createdAt": "2026-09-11T14:02:11Z"
  }
}
```

## PATCH /v1/creations/{id}

Move it between folders ({ "folderId": … | null }) and/or heart it ({ "favorite": true }).

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `folderId` | string | no | Target folder id, or `null` to move it back to the root. |
| `favorite` | boolean | no | `true` adds it to your favorites (stamps `favoritedAt`), `false` removes it. |

### Example request

```bash
curl -X PATCH https://eroq.ai/v1/creations/CREATION_ID \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "folderId": "FOLDER_ID",
  "favorite": true
}'
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.EROQ_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "folderId": "FOLDER_ID",
    "favorite": true
  }),
})
console.log(await res.json())
```

```python
import os, requests

res = requests.patch(
    "https://eroq.ai/v1/creations/CREATION_ID",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    json={
        "folderId": "FOLDER_ID",
        "favorite": True
    },
)
print(res.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
  "folderId": "FOLDER_ID",
  "favorite": true
}`)

	req, _ := http.NewRequest("PATCH", "https://eroq.ai/v1/creations/CREATION_ID", body)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "ok": true, "url": "https://…", "public": false, "folderId": "c31f…", "favoritedAt": "2026-09-29T10:02:11Z" }
```

## DELETE /v1/creations/{id}

Delete the creation and its file.

### Example request

```bash
curl -X DELETE https://eroq.ai/v1/creations/CREATION_ID \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.delete("https://eroq.ai/v1/creations/CREATION_ID", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("DELETE", "https://eroq.ai/v1/creations/CREATION_ID", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "ok": true }
```

## POST /v1/creations/{id}/publish

Submit to the community shelf. Every publish is reviewed by our team first: `review` is `pending`, then `approved` (live) or `rejected` — readable on the creation. Publishing again keeps the verdict unless the title changes or a hidden prompt is shown; a rejected item is resubmitted.

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | string | no | Public title, up to 120 characters. Defaults to a trimmed prompt — except a voice line, which defaults to its voice's name (its prompt is the script, and stays private). |
| `durationSeconds` | number | no | Exact media length for the duration badge — pass what your player measured. |
| `showPrompt` | boolean | no | Show the prompt on the post (images and clips). Defaults to `true` on a first publish; omitted on a re-publish = unchanged. |

### Example request

```bash
curl https://eroq.ai/v1/creations/CREATION_ID/publish \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "title": "Neon rooftop, dusk",
  "durationSeconds": 8,
  "showPrompt": true
}'
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID/publish', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EROQ_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "title": "Neon rooftop, dusk",
    "durationSeconds": 8,
    "showPrompt": true
  }),
})
console.log(await res.json())
```

```python
import os, requests

res = requests.post(
    "https://eroq.ai/v1/creations/CREATION_ID/publish",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    json={
        "title": "Neon rooftop, dusk",
        "durationSeconds": 8,
        "showPrompt": True
    },
)
print(res.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
  "title": "Neon rooftop, dusk",
  "durationSeconds": 8,
  "showPrompt": true
}`)

	req, _ := http.NewRequest("POST", "https://eroq.ai/v1/creations/CREATION_ID/publish", body)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "ok": true, "id": "4a17…", "title": "Neon rooftop, dusk",
  "publishedAt": "2026-09-11T14:12:40Z", "handle": "conceptualsatellite1676", "review": "pending", "showPrompt": true
}
```

## DELETE /v1/creations/{id}/publish

Remove it from the community — engagement is kept for a re-publish.

### Example request

```bash
curl -X DELETE https://eroq.ai/v1/creations/CREATION_ID/publish \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID/publish', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.delete("https://eroq.ai/v1/creations/CREATION_ID/publish", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("DELETE", "https://eroq.ai/v1/creations/CREATION_ID/publish", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "ok": true }
```

## POST /v1/creations/{id}/thumbnail

Set the cover of a video/voice (multipart `file`, image ≤ 5MB). A new cover on an approved community item sends it back to review (`review` in the response).

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `file` | file | yes | Cover image, up to 5MB. |

### Example request

```bash
curl https://eroq.ai/v1/creations/CREATION_ID/thumbnail \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -F file=@thumb.webp
```

```javascript
import { readFile } from 'node:fs/promises'

const form = new FormData()
form.append('file', new Blob([await readFile('thumb.webp')]), 'thumb.webp')

const res = await fetch('https://eroq.ai/v1/creations/CREATION_ID/thumbnail', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
  body: form,
})
console.log(await res.json())
```

```python
import os, requests

res = requests.post(
    "https://eroq.ai/v1/creations/CREATION_ID/thumbnail",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    files={"file": open("thumb.webp", "rb")},
)
print(res.json())
```

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	var buf bytes.Buffer
	form := multipart.NewWriter(&buf)
	part0, _ := form.CreateFormFile("file", "thumb.webp")
	file0, _ := os.Open("thumb.webp")
	io.Copy(part0, file0)
	file0.Close()
	form.Close()

	req, _ := http.NewRequest("POST", "https://eroq.ai/v1/creations/CREATION_ID/thumbnail", &buf)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", form.FormDataContentType())

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "ok": true, "thumbUrl": "https://store.eroq.ai/…/thumb.webp", "review": "pending" }
```

## GET /v1/folders

List your folders — `share` is the public link, null while private.

### Example request

```bash
curl https://eroq.ai/v1/folders \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders', {
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.get("https://eroq.ai/v1/folders", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://eroq.ai/v1/folders", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "folders": [{ "id": "c31f…", "name": "Campaign A", "createdAt": "2026-09-11T14:02:11Z", "share": null }]
}
```

## POST /v1/folders

Create a folder.

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | Folder name, unique per account, up to 40 characters. |

### Example request

```bash
curl https://eroq.ai/v1/folders \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Campaign A"
}'
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EROQ_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "name": "Campaign A"
  }),
})
console.log(await res.json())
```

```python
import os, requests

res = requests.post(
    "https://eroq.ai/v1/folders",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    json={
        "name": "Campaign A"
    },
)
print(res.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
  "name": "Campaign A"
}`)

	req, _ := http.NewRequest("POST", "https://eroq.ai/v1/folders", body)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "folder": { "id": "c31f…", "name": "Campaign A", "createdAt": "2026-09-11T14:02:11Z", "share": null } }
```

## PATCH /v1/folders/{id}

Rename a folder.

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | The new name, unique per account, up to 40 characters. |

### Example request

```bash
curl -X PATCH https://eroq.ai/v1/folders/FOLDER_ID \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Campaign B"
}'
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders/FOLDER_ID', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.EROQ_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "name": "Campaign B"
  }),
})
console.log(await res.json())
```

```python
import os, requests

res = requests.patch(
    "https://eroq.ai/v1/folders/FOLDER_ID",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    json={
        "name": "Campaign B"
    },
)
print(res.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
  "name": "Campaign B"
}`)

	req, _ := http.NewRequest("PATCH", "https://eroq.ai/v1/folders/FOLDER_ID", body)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "folder": { "id": "c31f…", "name": "Campaign B", "createdAt": "2026-09-11T14:02:11Z", "share": null } }
```

## DELETE /v1/folders/{id}

Delete a folder — its creations fall back to the root, its public link dies.

### Example request

```bash
curl -X DELETE https://eroq.ai/v1/folders/FOLDER_ID \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders/FOLDER_ID', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.delete("https://eroq.ai/v1/folders/FOLDER_ID", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("DELETE", "https://eroq.ai/v1/folders/FOLDER_ID", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "ok": true }
```

## POST /v1/folders/{id}/share

Share a folder publicly (Team, Agency, Enterprise) — or update the live link. Idempotent: a shared folder keeps its link.

### Request body

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `downloads` | boolean | no | May visitors download the files? `false` = view only. Defaults to `true` on a new link; omitted on a live link = unchanged. |

### Example request

```bash
curl https://eroq.ai/v1/folders/FOLDER_ID/share \
  -H "Authorization: Bearer $EROQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "downloads": true
}'
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders/FOLDER_ID/share', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EROQ_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "downloads": true
  }),
})
console.log(await res.json())
```

```python
import os, requests

res = requests.post(
    "https://eroq.ai/v1/folders/FOLDER_ID/share",
    headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"},
    json={
        "downloads": True
    },
)
print(res.json())
```

```go
package main

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

func main() {
	body := strings.NewReader(`{
  "downloads": true
}`)

	req, _ := http.NewRequest("POST", "https://eroq.ai/v1/folders/FOLDER_ID/share", body)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{
  "folder": {
    "id": "c31f…", "name": "Campaign A", "createdAt": "2026-09-11T14:02:11Z",
    "share": {
      "token": "9b1e…", "path": "/f/9b1e…", "url": "https://eroq.ai/f/9b1e…",
      "downloads": true, "sharedAt": "2026-09-29T10:02:11Z"
    }
  }
}
```

## DELETE /v1/folders/{id}/share

Stop sharing — the link stops working at once; sharing again mints a new one.

### Example request

```bash
curl -X DELETE https://eroq.ai/v1/folders/FOLDER_ID/share \
  -H "Authorization: Bearer $EROQ_API_KEY"
```

```javascript
const res = await fetch('https://eroq.ai/v1/folders/FOLDER_ID/share', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${process.env.EROQ_API_KEY}` },
})
console.log(await res.json())
```

```python
import os, requests

res = requests.delete("https://eroq.ai/v1/folders/FOLDER_ID/share", headers={"Authorization": f"Bearer {os.environ['EROQ_API_KEY']}"})
print(res.json())
```

```go
package main

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

func main() {
	req, _ := http.NewRequest("DELETE", "https://eroq.ai/v1/folders/FOLDER_ID/share", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("EROQ_API_KEY"))

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
```

### Response


```json
{ "folder": { "id": "c31f…", "name": "Campaign A", "createdAt": "2026-09-11T14:02:11Z", "share": null } }
```

---
Canonical: https://eroq.ai/docs/creations · Index for agents: https://eroq.ai/llms.txt · OpenAPI: https://eroq.ai/openapi.json
