Guides

Handling replies

Find replies, send responses, and track message jobs.

By the end of this guide you can find a reply, read the conversation, send a response, and track whether that response actually sent.

When someone replies, Furnace groups the exchange into a thread on the campaign's mailbox.

Replace f_your_key_here and the example ids with your own.

Before you start

  • A running campaign that has already sent mail (so replies can arrive).
  • An API key with access to the account inbox.

1. List conversations

curl -sS 'https://api.getfurnace.io/v1/threads' \
  -H 'Authorization: Bearer f_your_key_here'

Filter and sort in the API Reference (for example by campaign or latest inbound activity). Copy a thread id for the next steps.

Success: you get a page of threads. New replies typically show a recent last_inbound_at.

2. Read the messages

curl -sS 'https://api.getfurnace.io/v1/threads/b7e2c1a4-3f5d-4e8a-9b0c-1d2e3f4a5b6c/messages' \
  -H 'Authorization: Bearer f_your_key_here'

Success: messages include direction (sent / received), subject, and body fields you can display or pass to your own agent.

3. Send a reply

Sending is queued. The API returns a message job, not proof that the email left the mailbox yet.

curl -sS -X POST 'https://api.getfurnace.io/v1/threads/b7e2c1a4-3f5d-4e8a-9b0c-1d2e3f4a5b6c/reply' \
  -H 'Authorization: Bearer f_your_key_here' \
  -H 'Content-Type: application/json' \
  -d '{
  "body_html": "<p>Thanks Alex — how about Thursday?</p>"
}'

Forward instead with POST /v1/threads/{id}/forward when you need to hand the thread off.

Success: the response includes a message job id.

4. Track the send

Poll the job until it finishes:

curl -sS 'https://api.getfurnace.io/v1/message-jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
  -H 'Authorization: Bearer f_your_key_here'

While it is still queued you can:

# Cancel
curl -sS -X POST 'https://api.getfurnace.io/v1/message-jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890/cancel' \
  -H 'Authorization: Bearer f_your_key_here'

# Or send immediately
curl -sS -X POST 'https://api.getfurnace.io/v1/message-jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890/send-now' \
  -H 'Authorization: Bearer f_your_key_here'

Success: the job reaches a terminal status (sent or cancelled). Prefer email.sent webhooks if you do not want to poll.

5. Organize the thread (optional)

Typical triage actions:

  • Categorize, mark read, or change status: PATCH /v1/threads/{id}
  • Set or clear out-of-office: POST /v1/threads/{id}/out-of-office
  • Add or remove tags: POST /v1/threads/{id}/tags:add and POST /v1/threads/{id}/tags:remove

6. Get notified when replies arrive

Instead of polling threads, wire Webhook integration and enable email-activity events such as reply.received and reply.categorized. Payload examples live under Webhook events in the sidebar.

Common mistakes

SymptomLikely cause
Reply endpoint returned but mail never sentMessage job still queued or failed — poll GET /v1/message-jobs/{id}
Empty thread listWrong account key, or no inbound mail yet on those mailboxes
Missing reply body in your appReading thread list only — load …/messages for bodies

Next