---
title: "Record an anonymous free-tool attempt (public, no auth)"
method: POST
path: "/v1/tools/attempt"
tags: ["tools-free-tier"]
---

# Record an anonymous free-tool attempt (public, no auth)

`POST /v1/tools/attempt`

## Request

- Base URL: `https://api.slideforge.dev`
- URL: `https://api.slideforge.dev/v1/tools/attempt`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Fire-and-forget beacon so an anonymous attempt on a free-tool page is countable. Accepts shape only — file count, total bytes, mime types. Never filenames or content.

## Request body

- ToolAttempt: A file picked on a free-tool page. Shape only — never a filename or content.
  - `tool` 'image-to-pptx' | 'combine-powerpoint' | 'pdf-to-pptx', required
  - `file_count` integer, required
  - `total_bytes` integer, required
  - `mimes` string[]

## Response `200`

Recorded (or silently dropped)

- ToolAttemptAck
  - `recorded` boolean, required

## Other responses

- `422`: Validation Error
- `429`: Rate limit exceeded (60/hour/IP)

---

[API](https://skmtc.dev/slideforge/apis/slideforge-api.md) · [All operations](https://skmtc.dev/slideforge/apis/slideforge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/slideforge/apis/slideforge-api/revisions/ae698e3d3c00?raw)
