The life of a contact

A contact is one email address inside one list, with a state that says whether you may write to them. Only contacts in the subscribed state receive anything.

The five states

StateWhat it meansWho sets it
subscribedReceives your emails. The default.You, an import, the API, or a confirmed sign-up
pendingSigned up, has not confirmed yet. Receives nothing but the confirmation email.Double opt-in, waiting for the click
unsubscribedAsked to stop. Receives nothing.The recipient, always
bouncedThe address failed permanently.The provider, through the bounce feedback
complainedMarked your email as spam.The recipient, through their mail client
bounced and complained also land the address on the suppression list, which outlives the contact record.
Resubscribing is an explicit act, never a side effect. No import and no API upsert ever puts a contact back to subscribed — someone has to ask for it, from the contact's page or through the API. A bounced address is refused outright: a hard bounce is final, and writing to it again damages your sending reputation.

Where a contact came from

Every contact records its source — how it entered — and a free label next to it: the name of the imported file, the name of the API key used. The source is fixed at creation and never rewritten, including when a later import updates the same address. manual · import · api · signup_form Contacts created before sources existed have none. That is history, not a defect. Alongside the source, a contact keeps its consent proof: the date and IP of the sign-up, and the date and IP of the double opt-in confirmation when there was one. Those fields are filled by sign-up and by import — never by an edit form, because a proof you can type is not a proof.

What you can change, and what you cannot

You edit the name, the notes and the tags freely — those describe the person and belong to you. Notes are internal and never reach the recipient. The email address is the identity of the contact inside its list, so changing it to an address already present is refused: that would merge two histories into one. The state is not edited like a field: it moves through named acts — unsubscribe, resubscribe — that carry their own rules. A status slipped into an edit, through the API for instance, is ignored. The consent dates and the topic refusals belong to the recipient and are not yours to rewrite at all.

What it implies elsewhere

The state is what the send filters on, at send time rather than when you pick the audience: a contact who unsubscribes between the moment you schedule a campaign and the moment it goes out is already excluded. Deleting a contact is not a way to fix anything. It removes the record that keeps you from writing to that address again — after which an import can re-create them as subscribed. Leaving an unsubscribed contact in place is what protects both of you.