# Teachers Pay Teachers API

> Every Teachers Pay Teachers endpoint on Cotlet: inputs, JSON Schema, cURL, Python and Node.js examples and an example response for each call.

Source: https://cotlet.dev/docs/api/teachers-pay-teachers

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

14 endpoints for Teachers Pay Teachers. Each one is a POST with a JSON body, called with your API key.

- Base URL: `https://cotlet.dev/api/v1/teachers-pay-teachers`
- Connects with: Your own TPT Seller account
- Integration page: https://cotlet.dev/integrations/teachers-pay-teachers-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `list_products` | read | Your product listings with title, type, price, status and custom category. |
| `get_product` | read | Full listing: title, description, price, additional license price, grades, subjects, tags, formats and files. |
| `get_store_stats` | read | Seller Dashboard totals: earnings, units sold, carts, unique buyers, views and conversions. |
| `get_product_stats` | read | Per product: earnings, units sold, views, conversion, Wish Listed and Saved for Later. |
| `list_sales` | read | Sales Details from your Sales Reports, one line per item sold, with earnings and sales tax. |
| `get_search_keywords` | read | Search Analytics: TPT search keywords that led buyers to your products, with visits, conversions and earnings. |
| `list_buyer_questions` | read | Questions from the Q&A section of your store, newest first, with product and any answer. |
| `create_product` | write | New Digital Download listing from a file. Inactive by default; an active listing is live for buyers right away. |
| `update_product` | write | Change title, description, price, additional license price, grades, subjects or tags of a listing. |
| `set_product_status` | write | Make a listing active or inactive. Past buyers keep their downloads. |
| `upload_revised_file` | write | Replace the product file and optionally notify past buyers with a note on what changed. |
| `answer_buyer_question` | write | Post a public answer to a question on your product page. |
| `schedule_sale` | write | Throw a sale on chosen products or your whole store for set dates. |
| `send_note_to_followers` | write | Weekly Note to Followers about new products or promotions, sent now or on a set date. |

## List products

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_products`

Access: read.

Lists your listings with title, type, price, status and custom category. Filter by status, type or custom category to find a group of products. Pages hold up to 100 products; pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | active, inactive or all. Default: all. |
| `type` | enum | no | digital_download, bundle, video, google_resource or all. Default: all. |
| `custom_category` | string | no | Only products in this store custom category. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_products \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("teachers-pay-teachers", "list_products")
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'list_products');
```

**CLI**

```bash
cotlet call teachers-pay-teachers list_products
```

### Example response

```json
{
  "products": [
    {
      "product_id": "11204567",
      "title": "Fraction Task Cards, Grades 3-4",
      "type": "digital_download",
      "price_cents": 600,
      "status": "active",
      "custom_category": "Fractions"
    },
    {
      "product_id": "9873310",
      "title": "Fractions Bundle",
      "type": "bundle",
      "price_cents": 900,
      "status": "active",
      "custom_category": "Fractions"
    }
  ],
  "next_cursor": null
}
```

## Get product

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_product`

Access: read.

Returns one listing in full: description, price, additional license price, grades, subjects, tags, formats and files. Use it before answering a buyer question or rewriting a title, so your agent works from the real listing.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_product \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"product_8c41d2"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "get_product", {"product_id":"product_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'get_product', {"product_id":"product_8c41d2"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers get_product --data '{"product_id":"product_8c41d2"}'
```

### Example response

```json
{
  "product_id": "11204567",
  "title": "Fraction Task Cards, Grades 3-4",
  "description": "20 printable task cards on comparing and adding fractions, with answer keys.",
  "price_cents": 600,
  "additional_license_price_cents": 300,
  "grades": [
    "3rd",
    "4th"
  ],
  "subjects": [
    "Fractions"
  ],
  "tags": [
    "Task Cards"
  ],
  "formats": [
    "PDF"
  ],
  "status": "active"
}
```

## Get store stats

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_store_stats`

Access: read.

Returns the Seller Dashboard totals for a period: earnings, units sold, carts, unique buyers, views and conversions. Set buyer_type to compare first-time and repeat buyers, or product_ids to look at part of the store. Earnings are in US cents.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day of the period. |
| `to` | date | yes | Last day of the period. |
| `buyer_type` | enum | no | all, first_time or repeat. Default: all. |
| `product_ids` | string[] | no | Only these products. Default: whole store. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_store_stats \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-10-01","to":"2026-10-01"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "get_store_stats", {"from":"2026-10-01","to":"2026-10-01"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'get_store_stats', {"from":"2026-10-01","to":"2026-10-01"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers get_store_stats --data '{"from":"2026-10-01","to":"2026-10-01"}'
```

### Example response

```json
{
  "from": "2026-10-05",
  "to": "2026-10-11",
  "buyer_type": "all",
  "earnings_cents": 41235,
  "units_sold": 74,
  "carts": 91,
  "unique_buyers": 58,
  "views": 3120,
  "conversion": 0.024
}
```

## Get product stats

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_product_stats`

Access: read.

Returns the numbers of one product for a period: earnings, units sold, views, conversion, Wish Listed and Saved for Later. Call it for each product from list_products to rank them.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |
| `from` | date | yes | First day of the period. |
| `to` | date | yes | Last day of the period. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_product_stats \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"product_8c41d2","from":"2026-10-01","to":"2026-10-01"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "get_product_stats", {"product_id":"product_8c41d2","from":"2026-10-01","to":"2026-10-01"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'get_product_stats', {"product_id":"product_8c41d2","from":"2026-10-01","to":"2026-10-01"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers get_product_stats --data '{"product_id":"product_8c41d2","from":"2026-10-01","to":"2026-10-01"}'
```

### Example response

```json
{
  "product_id": "11204567",
  "from": "2026-10-05",
  "to": "2026-10-11",
  "earnings_cents": 7200,
  "units_sold": 12,
  "views": 410,
  "conversion": 0.029,
  "wish_listed": 5,
  "saved_for_later": 9
}
```

## List sales

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_sales`

Access: read.

Returns Sales Details from your Sales Reports, one line per item sold, with earnings and sales tax. Filter by product to see the sales of one listing. Pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day of the period. |
| `to` | date | yes | Last day of the period. |
| `product_id` | string | no | Only sales of this product. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_sales \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-10-01","to":"2026-10-01"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "list_sales", {"from":"2026-10-01","to":"2026-10-01"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'list_sales', {"from":"2026-10-01","to":"2026-10-01"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers list_sales --data '{"from":"2026-10-01","to":"2026-10-01"}'
```

### Example response

```json
{
  "sales": [
    {
      "date": "2026-10-09",
      "product_id": "11204567",
      "title": "Fraction Task Cards, Grades 3-4",
      "earnings_cents": 510,
      "sales_tax_cents": 0
    },
    {
      "date": "2026-10-09",
      "product_id": "9873310",
      "title": "Fractions Bundle",
      "earnings_cents": 765,
      "sales_tax_cents": 0
    }
  ],
  "next_cursor": null
}
```

## Get search keywords

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_search_keywords`

Access: read.

Returns the TPT search keywords that led buyers to your products, with visits, conversions and earnings. Search Analytics starts on 1 Jan 2025. Pass product_id to see the keywords of one listing.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day of the period, 1 Jan 2025 or later. |
| `to` | date | yes | Last day of the period. |
| `product_id` | string | no | One product only. Default: whole store. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/get_search_keywords \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-07-01","to":"2026-09-30","product_id":"11204567"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "get_search_keywords", {"from":"2026-07-01","to":"2026-09-30","product_id":"11204567"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'get_search_keywords', {"from":"2026-07-01","to":"2026-09-30","product_id":"11204567"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers get_search_keywords --data '{"from":"2026-07-01","to":"2026-09-30","product_id":"11204567"}'
```

### Example response

```json
{
  "keywords": [
    {
      "keyword": "fraction task cards",
      "visits": 214,
      "conversions": 9,
      "earnings_cents": 5400
    },
    {
      "keyword": "fractions 4th grade",
      "visits": 167,
      "conversions": 6,
      "earnings_cents": 3600
    }
  ]
}
```

## List buyer questions

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_buyer_questions`

Access: read.

Lists questions from the Q&A section of your store, newest first, each with its product and any answer you already gave. Set unanswered_only to see what needs a reply. Pass question_id to answer_buyer_question.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `unanswered_only` | boolean | no | Skip questions you already answered. Default: false. |
| `limit` | integer | no | 1 to 100. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/list_buyer_questions \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("teachers-pay-teachers", "list_buyer_questions")
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'list_buyer_questions');
```

**CLI**

```bash
cotlet call teachers-pay-teachers list_buyer_questions
```

### Example response

```json
{
  "questions": [
    {
      "question_id": "q_5821",
      "product_id": "11204567",
      "question": "Does this include answer keys?",
      "asked_at": "2026-10-10T14:20:00Z",
      "answer": null
    }
  ]
}
```

## Create product

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/create_product`

Access: write. Confirm: waits for the user's OK before it runs.

Creates a Digital Download listing from the URL of a PDF or ZIP. The listing is inactive unless active is true, and an active listing is live for buyers right away. Price is in US cents. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `title` | string | yes | Product title. |
| `description` | string | yes | Product description. |
| `file_url` | string | yes | URL of the PDF or ZIP buyers download. |
| `price_cents` | integer | yes | Price in US cents, e.g. 600 for $6. 0 for a free resource. |
| `grades` | string[] | yes | TPT grade levels, e.g. "1st", "2nd". |
| `subjects` | string[] | yes | TPT subjects, e.g. "Fractions". |
| `tags` | string[] | no | Resource type tags, e.g. "Centers". |
| `preview_url` | string | no | URL of a PDF preview. |
| `active` | boolean | no | Make Listing Active now. Default: false. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/create_product \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"title","description":"description","file_url":"https://example.com","price_cents":1,"grades":["1st"],"subjects":["Fractions"]}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "create_product", {"title":"title","description":"description","file_url":"https://example.com","price_cents":1,"grades":["1st"],"subjects":["Fractions"]})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'create_product', {"title":"title","description":"description","file_url":"https://example.com","price_cents":1,"grades":["1st"],"subjects":["Fractions"]});
```

**CLI**

```bash
cotlet call teachers-pay-teachers create_product --data '{"title":"title","description":"description","file_url":"https://example.com","price_cents":1,"grades":["1st"],"subjects":["Fractions"]}'
```

### Example response

```json
{
  "product_id": "11310482",
  "title": "Fall Math Centers, Grades 1-2",
  "status": "inactive",
  "price_cents": 600,
  "grades": [
    "1st",
    "2nd"
  ],
  "subjects": [
    "Math"
  ]
}
```

## Update product

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/update_product`

Access: write. Confirm: waits for the user's OK before it runs.

Changes the fields you pass and leaves the rest. Price changes show to buyers right away on an active listing. Price is in US cents. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |
| `fields` | object | yes | Any of title, description, price_cents, additional_license_price_cents, grades, subjects, tags. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/update_product \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"9873310","fields":{"price_cents":1000,"additional_license_price_cents":900}}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "update_product", {"product_id":"9873310","fields":{"price_cents":1000,"additional_license_price_cents":900}})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'update_product', {"product_id":"9873310","fields":{"price_cents":1000,"additional_license_price_cents":900}});
```

**CLI**

```bash
cotlet call teachers-pay-teachers update_product --data '{"product_id":"9873310","fields":{"price_cents":1000,"additional_license_price_cents":900}}'
```

### Example response

```json
{
  "product_id": "11204567",
  "status": "updated",
  "changed": {
    "price_cents": {
      "from": 600,
      "to": 700
    }
  }
}
```

## Set product status

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/set_product_status`

Access: write. Confirm: waits for the user's OK before it runs.

Makes a listing active (for sale) or inactive (hidden). Past buyers keep their downloads. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |
| `active` | boolean | yes | true to sell it, false to hide it. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/set_product_status \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"product_8c41d2","active":true}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "set_product_status", {"product_id":"product_8c41d2","active":True})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'set_product_status', {"product_id":"product_8c41d2","active":true});
```

**CLI**

```bash
cotlet call teachers-pay-teachers set_product_status --data '{"product_id":"product_8c41d2","active":true}'
```

### Example response

```json
{
  "product_id": "11310482",
  "active": true,
  "status": "active"
}
```

## Upload revised file

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/upload_revised_file`

Access: write. Confirm: waits for the user's OK before it runs.

Replaces the file buyers download. With notify_buyers set, past buyers are notified on their My Purchases page, and change_note tells them what changed. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `product_id` | string | yes | Product ID from list_products. |
| `file_url` | string | yes | URL of the new PDF or ZIP. |
| `notify_buyers` | boolean | no | Notify Buyers on their My Purchases page. Default: false. |
| `change_note` | string | no | What changed, shown to buyers when notified. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/upload_revised_file \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"product_8c41d2","file_url":"https://example.com"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "upload_revised_file", {"product_id":"product_8c41d2","file_url":"https://example.com"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'upload_revised_file', {"product_id":"product_8c41d2","file_url":"https://example.com"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers upload_revised_file --data '{"product_id":"product_8c41d2","file_url":"https://example.com"}'
```

### Example response

```json
{
  "product_id": "11204567",
  "status": "file_replaced",
  "buyers_notified": true
}
```

## Answer buyer question

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/answer_buyer_question`

Access: write. Confirm: waits for the user's OK before it runs.

Posts an answer to one buyer question. The answer is public and appears under your store name. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `question_id` | string | yes | Question ID from list_buyer_questions. |
| `answer` | string | yes | Answer text, shown publicly under your store name. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/answer_buyer_question \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"question_id":"q_5821","answer":"Yes, the file has answer keys for all 20 task cards at the end of the PDF."}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "answer_buyer_question", {"question_id":"q_5821","answer":"Yes, the file has answer keys for all 20 task cards at the end of the PDF."})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'answer_buyer_question', {"question_id":"q_5821","answer":"Yes, the file has answer keys for all 20 task cards at the end of the PDF."});
```

**CLI**

```bash
cotlet call teachers-pay-teachers answer_buyer_question --data '{"question_id":"q_5821","answer":"Yes, the file has answer keys for all 20 task cards at the end of the PDF."}'
```

### Example response

```json
{
  "question_id": "q_5821",
  "status": "published"
}
```

## Schedule sale

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/schedule_sale`

Access: write. Confirm: waits for the user's OK before it runs.

Schedules a sale of 5, 10, 15 or 20 percent off between a start and an end date. Leave product_ids empty to put the whole store on sale. Buyers see the lower prices during the sale. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `discount` | enum | yes | 5, 10, 15 or 20 (percent off). |
| `start_date` | date | yes | First day of the sale. |
| `end_date` | date | yes | Last day of the sale. |
| `product_ids` | string[] | no | Products on sale. Empty: whole store. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/schedule_sale \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"discount":"20","start_date":"2026-10-16","end_date":"2026-10-18","product_ids":["11204567","11204582","9873310"]}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "schedule_sale", {"discount":"20","start_date":"2026-10-16","end_date":"2026-10-18","product_ids":["11204567","11204582","9873310"]})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'schedule_sale', {"discount":"20","start_date":"2026-10-16","end_date":"2026-10-18","product_ids":["11204567","11204582","9873310"]});
```

**CLI**

```bash
cotlet call teachers-pay-teachers schedule_sale --data '{"discount":"20","start_date":"2026-10-16","end_date":"2026-10-18","product_ids":["11204567","11204582","9873310"]}'
```

### Example response

```json
{
  "sale_id": "sale_48213",
  "status": "scheduled",
  "discount": 20,
  "start_date": "2026-10-16",
  "end_date": "2026-10-18",
  "products": 3
}
```

## Send Note to Followers

`POST https://cotlet.dev/api/v1/teachers-pay-teachers/send_note_to_followers`

Access: write. Confirm: waits for the user's OK before it runs.

Sends a Note to Followers about new products or promotions, now or on the date you set. Images go in the body by URL. The note reaches everyone who follows your store. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `body` | string | yes | Note text. Images by URL. |
| `send_on` | date | no | Send date. Default: now. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/teachers-pay-teachers/send_note_to_followers \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":"body"}'
```

**Python**

```python
result = client.call("teachers-pay-teachers", "send_note_to_followers", {"body":"body"})
```

**Node.js**

```js
const result = await cotlet.call('teachers-pay-teachers', 'send_note_to_followers', {"body":"body"});
```

**CLI**

```bash
cotlet call teachers-pay-teachers send_note_to_followers --data '{"body":"body"}'
```

### Example response

```json
{
  "note_id": "note_3307",
  "status": "sent",
  "sent_on": "2026-10-12"
}
```
