---
title: "Record a Tool Action Use"
method: POST
path: "/api/v1/tool-actions/record"
tags: ["Tool Action Quotas"]
---

# Record a Tool Action Use

`POST /api/v1/tool-actions/record`

## Request

- Base URL: `https://www.endlesstravelplans.com`
- URL: `https://www.endlesstravelplans.com/api/v1/tool-actions/record`
- Auth: HTTP bearer

Atomically consumes one use of (tool, action) against the shared
monthly bucket. Accepts short aliases (budget/itinerary/packing/vote)
or the canonical tool strings. Pro users and unmetered tools always
pass without being counted.

## Request body

- object
  - `tool` string, required: One of budget, itinerary, packing, vote (or canonical equivalents).
  - `action` string, required: One of share, pdf, print, calendar.
  - `tool_record_id` integer, nullable: Internal id of the record being exported (optional, for analytics).

## Response `200`

- union
  - object
    - `recorded` boolean
    - `tool` string
    - `action` string
    - `limit` integer
    - `used` integer
    - `remaining` integer
    - `is_pro` boolean
  - object: Recorded shape (tests/Fixtures/api-shapes/tool-actions-record.json)
    - `action` string
    - `is_pro` boolean
    - `limit` integer
    - `recorded` boolean
    - `remaining` integer
    - `tool` string
    - `used` integer

## Other responses

- `401`: unauthenticated: No valid bearer token was sent.
- `403`
- `422`: validation_failed: The request body failed validation; field messages are in `errors`.
- `429`: rate_limited: A throttle or a per-account allowance refused the request; `retry_after` or `remaining` may be present.
- `500`: server_error: Unhandled failure; quote `request_id` to support.

---

[API](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api.md) · [All operations](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/llms.txt) · [OpenAPI document](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/revisions/ae82ed3e4a8f?raw)
