Contact
A Contact is a person or Agent a Startup knows by at least one address, where Consent to message them is recorded.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
email | email | The primary email address. | |
phone | string | The primary phone number. | |
name | string | The name the Contact goes by. |
Inherits from Party, which adds no properties of its own.
Object
{
"$id": "https: //api.sb/ tutorloop.com/ contacts/ contact_1",
"$type": "Contact",
"email": "malik@tutorloop.com",
"phone": "Example phone",
"name": "TutorLoop"
}Relationships
- A Contact becomes one Customer: a Contact becomes a Customer on accepting an Offer.
becomes, inversecontact. - A Contact is enrolled in many Sequences: a Sequence runs for an enrolled Contact until a reply, a purchase, or another exit Event ends it.
enrolledIn, inverseenrolls. - A Contact has many Enrollments: the Contact this run belongs to; pausing one Contact’s nurture pauses this Enrollment.
enrollments, inverserunsFor. - A Contact gives many Consents: a Contact grants Consents, each for one Purpose, with its basis and expiry.
gives, inversegivenBy. - A Contact has many Registrations: each Registration holds one Contact’s place; one Contact registers for many Gatherings.
registrations, inversenames. - A Contact resolves to one Person: each Contact is one Startup’s view of a Person shared across every Startup that knows them.
resolvesTo, inversecontacts. - A Contact works at one Organization: a Contact works for one Organization, as this Startup knows it.
worksAt, inversepeople.
Verbs
createCreates a Contact.POST /{namespace}/contactsgetReturns one Contact by id.GET /{namespace}/contacts/{id}listReturns Contacts, newest first, one page at a time.GET /{namespace}/contactsupdateChanges the given properties of a Contact.PATCH /{namespace}/contacts/{id}deleteDeletes a Contact; its history is kept.DELETE /{namespace}/contacts/{id}enrichEnrich fills a Contact’s missing fields from outside sources and marks each value with where it came from.POST /{namespace}/contacts/{contact}/enrichenrollEnroll adds a Contact to a Sequence, which sends its steps until the Contact replies or exits.POST /{namespace}/contacts/{contact}/enrollmergeMerge joins a duplicate Contact into another, keeping every link, Message and Event on the one that remains.POST /{namespace}/contacts/{contact}/mergesubscribeSubscribe records a Contact’s chosen topics and frequency from the hosted preference page, with Consent for each topic.POST /{namespace}/contacts/{contact}/subscribesuppressSuppress records a Suppression for a Contact’s address, which every Startup honors forever.POST /{namespace}/contacts/{contact}/suppressunsubscribeUnsubscribe stops commercial Messages to a Contact in one click, for one topic or all, honored at once.POST /{namespace}/contacts/{contact}/unsubscribe
Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.
| Operation | owner | admin | member | viewer |
|---|---|---|---|---|
Contact.create | Yes | Yes | Yes | No |
Contact.get | Yes | Yes | Yes | Yes |
Contact.list | Yes | Yes | Yes | Yes |
Contact.update | Yes | Yes | Yes | No |
Contact.delete | Yes | Yes | Yes | No |
Contact.enrich | Yes | Yes | Yes | No |
Contact.enroll | Yes | Yes | Yes | No |
Contact.merge | Yes | No | No | No |
Contact.subscribe | Yes | Yes | Yes | No |
Contact.suppress | Yes | Yes | Yes | No |
Contact.unsubscribe | Yes | Yes | Yes | No |
Call it
Enroll the contact Malik Owens with a sequence.Example
owner@brightsmiles.dental books a demo of a dental-scheduling App and becomes a Contact. She has not given marketing Consent, so she gets replies about her demo but no newsletter.