---
title: "Quote a Letter of recommendation call (free)"
method: POST
path: "/v1/tools/rec/quote"
---

# Quote a Letter of recommendation call (free)

`POST /v1/tools/rec/quote`

## Request

- Base URL: `https://api.counselorai.app`
- URL: `https://api.counselorai.app/v1/tools/rec/quote`
- Auth: HTTP bearer

Free pre-flight. Validates the input and returns the exact credit hold a real call would take at this account's price, without billing anything. An invalid input is still a 200: the body carries valid:false and the validation errors.

## Request body

- object
  - `studentName` string: The student this is about. Used in the output text.
  - `counselorName` string: Who the letter is from. The counselor stays the author; this tool drafts, it does not sign.
  - `purpose` 'college_general' | 'college_honors' | 'scholarship' | 'transfer' | 'professional' | 'employment' | 'program' | 'undergraduate' | 'graduate' | 'internship' | 'other': What the letter is for. undergraduate, graduate, internship and other are legacy aliases kept working for existing integrations.
  - `profType` 'law' | 'medical' | 'mba' | 'dental' | 'pharmacy' | 'pa' | 'nursing' | 'socialwork': Only when purpose is professional: which professional school, since each reads for different things.
  - `recipient` string: Who receives it, if named.
  - `schools` string: Target school or program.
  - `major` string
  - `selectivity` string: How selective the target is. Shifts how much evidence the letter has to carry.
  - `relationship` string: How the counselor knows the student, and for how long.
  - `traits` string, required: Three standout traits. Send prose, not a list of adjectives: the pipeline turns each one into a scene and needs something to work from.
  - `story` string: A specific moment worth telling. The single highest-value field here.
  - `contribution` string: What the student adds to a campus.
  - `resumeText` string: Resume or activity list as plain text.
  - `sampleText` string: A sample of the counselor's own writing, so the letter lands in their voice rather than a generic one.

## Response `200`

Quote

- object
  - `tool` string
  - `valid` boolean
  - `validation_errors` unknown[]
    - unknown
  - `estimated_credits` integer
  - `estimated_usd` number
  - `max_credits_held` integer
  - `max_credits_supported` boolean
  - `credit_balance` integer
  - `sufficient` boolean
  - `price_multiplier` number

---

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