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.
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
Request body
Response
Successful Response
Changes
No recorded changes to this operation across all 1 revision of this API.