---
title: "Add messages typed by hand to a person's thread (any relationship type)"
method: POST
path: "/api/v1/contacts/{id}/thread/messages"
---

# Add messages typed by hand to a person's thread (any relationship type)

`POST /api/v1/contacts/{id}/thread/messages`

## Request

- Base URL: `https://memchats.com`
- URL: `https://memchats.com/api/v1/contacts/{id}/thread/messages`
- Auth: HTTP bearer

1 to 20 messages, in order. Without `sentAt` a message goes at "now", after the last one (`timeKnown: false`). No model call. A `me` message that matches a copied reply replaces its assumed bubble (reconciliation). Counts against the plan's monthly messages; rate limited; a few per demo session.

## Path parameters

- `id` integer, required

## Request body

- object
  - `messages` object[], required
    - `from` 'me' | 'them', required
    - `text` string, required
    - `sentAt` string, date-time

## Response `201`

Stored (an exact repeat is not stored twice)

- object
  - `messages` ThreadMessage[]
    - `id` integer
    - `from` 'me' | 'them'
    - `text` string
    - `sentAt` string, date-time
    - `timeKnown` boolean: false: the time was not seen (screenshot without times, or typed without one); sentAt only keeps the order.
    - `language` string, nullable: ISO 639-1 of the text, when it can be told.
    - `status` 'sent' | 'assumed': `assumed`: a reply copied from a proposal, not yet seen sent (shown dashed, "Copiada · pendiente de confirmar").
    - `proposalId` integer, nullable: The negotiation (its root round id) this bubble belongs to: on an assumed bubble and on a real message matched to a choice.
    - `edit` object, nullable: Only when the real message is an edit of the copied text ("La cambiaste").
      - `copiedText` string
      - `note` string, nullable

## Other responses

- `400`: Invalid body (codes invalid_body, empty_text, text_too_long, too_many_messages, invalid_time)
- `402`: Plan message limit (code tier_limit_exceeded)
- `404`: Not one of the account's contacts
- `429`: Rate limited, or the demo ceiling

---

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