Tagos
Docs

Contact form

Any Tagos account can publish a form. Draw the fields on your own site and POST one binary packet. The letter lands in that account's inbox. The caller does not choose the account or the mailbox.

Listing, reading, and sending the rest of the mailbox stays inside Tagos Mail. This page is the public embed.

What is public

  • The form id can sit in HTML. It is not a send secret. Someone who copies it can only append a letter to that one inbox, and only from an origin you listed.
  • Submit does not send a session token and does not send Authorization.
  • Each form accepts 30 new letters per hour.

1. Create the form

Sign in, then open Developer Console → Contact forms. The form binds to your mailbox. You name the site and list the exact origins that may submit, for example https://example.com and http://localhost:3000.

  • Name: 1–80 characters, no line breaks.
  • Origins: 1–8. Each one is http or https, a host, and an optional port. No path, no user, no query. https://Example.com/ is stored as https://example.com.

2. POST the packet

POST https://tagos.one/api/v1/tbp
Content-Type: application/octet-stream

The body is a 29-byte TBP header plus a protobuf SubmitContactFormRequest. Header, big-endian:

54 47          magic
03             version 3
08             category MailApi
1C             command SUBMIT_CONTACT_FORM
req_id         uint32
length         uint32, payload size
account_id     16 zero bytes

Protobuf fields:

1  form_id            string  uuid from the console
2  visitor_name       string  1–120 characters
3  visitor_email      string  the address they typed
4  body_text          string  1–8000 characters
5  idempotency_key    string  8–80 letters, digits, or hyphens

Generate one idempotency key per send and reuse it if that request is retried. The same key returns the first letter and does not insert a second one. There are no attachments in this version.

3. Read the response

A success is HTTP 200 and the same header shape around SubmitContactFormResponse.

1  success            bool
2  message_id         string
3  already_received   bool    true when the key was replayed
4  error              string  empty when success is true

HTTP 400 means nothing was stored. Other failures are HTTP 200 with success=false and one of:

unknown_form
origin_denied
missing_origin
rate_limited
quota_exceeded
bad_email
empty_body
body_too_long
empty_visitor_name
visitor_name_too_long
bad_idempotency_key
bad_form_id

What arrives

  • Folder: inbox of the account that created the form.
  • From: the visitor address they typed. Tagos does not verify that they own it. Reply in Mail uses that address.
  • Subject: [site name] visitor name.
  • The body is the text they wrote.