Turn form submissions into conversations

Your server sends each contact form submission to the Intray API. It arrives in the inbox as a thread, and your team replies to the person by email.

Your server posts each submission to the API

Send the message, the person's email, and any extra fields. Intray answers with the new conversation, which waits in Todo on the address you chose.

curl "$INTRAY_API_URL/conversations" \
  -H "Authorization: Bearer $INTRAY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: form-8841" \
  -d '{
    "address_id": "<address ID>",
    "customer": {
      "email": "elena@harbor.studio",
      "name": "Elena Ruiz"
    },
    "subject": "Demo request",
    "initial_entry": {
      "type": "submission",
      "text": "Could we see a demo next week?",
      "fields": {
        "company": "Harbor Studio",
        "team size": "12"
      }
    },
    "external_id": "lead-8841"
  }'
201 Created
{
  "conversation": {
    "id": "<conversation ID>",
    "address_id": "<address ID>",
    "subject": "Demo request",
    "customer": {
      "name": "Elena Ruiz",
      "email": "elena@harbor.studio"
    },
    "triage": {
      "status": "todo",
      "snooze_until": null
    },
    "assignee_id": null,
    "version": "1",
    "origin": "submission",
    "external_id": "lead-8841",
    "created_at": 1790000000000,
    "updated_at": 1790000000000,
    "app_url": "<link to the conversation in Intray>"
  },
  "entry": {
    "id": "<entry ID>",
    "type": "submission"
  }
}

From the form to a conversation by email

  1. 1

    The submission arrives in Todo on sales

    It sits in the same list as the email the team already answers.

  2. 2

    A teammate replies to Elena by email

    The reply goes out from sales with the subject your server set.

  3. 3

    The answer lands in the same thread

    From the first reply on, it behaves like any other email thread.

What a submission carries, and which key can touch it

Each submission arrives with its fields and an unverified sender. Each key works only on the addresses and permissions you gave it.

The message and every field you sent

Company, team size, and up to 30 fields sit under the message. Intray marks the email address as unverified, because a form cannot prove who typed it.

A retried submission makes one conversation

Build the Idempotency-Key from the ID of your saved record. The same key and body return the first response and create nothing new.

Separate keys for the form and your backend

The form key can only create conversations. Rotate or revoke one key and the other keeps working.

Your backend reads the thread back

A key with read permission returns the emails and submissions in a conversation. The API never returns internal notes.

Questions about forms and the API

The API has no browser CORS and no anonymous endpoint, so your server makes the request. The key stays in your server's secrets and never reaches the page.

Send your first submission to the inbox

Intray is open to invited teams right now.