contacts

Add Contacts

Add contacts typed in by hand or pasted from a CSV.

ONE DOOR, NOT A SECOND ONE. This runs the same three steps the public events API runs -- quota preflight, then the Contact row, then validate_new_contact after the flush. Writing a second creation path with its own idea of the rules is how two callers end up disagreeing about what a valid contact is; the events path stays the reference. The steps live in screen_contact_batch and write_contact_batch so the data extension importer goes through this door too rather than growing its own.

THE NETWORK WORK HAPPENS BEFORE THE TRANSACTION. Resolving domains one at a time inside the write transaction meant a request could hold a worker and a connection for hours on hostile input. Syntax is decided first with no network at all, the distinct domains that remain are resolved together with bounded concurrency under a whole-request budget, and only then does a short transaction open to write rows.

EVERY ROW GETS AN OUTCOME, in the order it was sent. A silent partial success is useless to somebody who pasted 200 addresses and got 187.

post/api/contacts/bulk

Request

  • Base URL: https://app.sentientmail.com (the document declares no server; this is the origin it was published from)
  • URL: https://app.sentientmail.com/api/contacts/bulk
  • Auth: none declared

Cookies

esp_sessionstring nullable

Request body

consent_marketingboolean
consent_sourcestring nullable

Response

Successful Response

object required

Changes

No recorded changes to this operation across all 1 revision of this API.