API reference

Customers and contacts

People, companies, segments, forms, reviews, conversations and consent.

Scopes for this area: contacts:read, contacts:write and contacts:admin.

134 operations

contact

MethodRouteWhat it doesLevelCommand
GET/crm/contactsFind and list contacts: search text, a saved segment, a tag or rules.readrivier contacts contact list
POST/crm/contactsAdd a contact, or update the one that already has this email or number.writerivier contacts contact create
GET/crm/contacts/lookupThe contact with this email, phone or handle.readrivier contacts contact lookup
GET/crm/contacts/{id}One contact.readrivier contacts contact get
PATCH/crm/contacts/{id}Change a contact: fields, tags, custom fields, identities.writerivier contacts contact update
GET/crm/contacts/{id}/timelineWhat happened with this person across email, phone, text, chat, orders, bookings and payments, newest first.readrivier contacts contact timeline
POST/crm/contacts/{id}/shareShare a contact with the other projects of the organisation, or stop sharing.writerivier contacts contact share
POST/crm/mergeMerge one contact into another; history, identities and tags move over.adminrivier contacts contact merge

organisation

MethodRouteWhat it doesLevelCommand
GET/crm/organisation/contactsContacts the organisation's other projects have shared.readrivier contacts organisation list
POST/crm/organisation/contacts/adoptCopy a shared contact into this project (without its consent).writerivier contacts organisation adopt

event

MethodRouteWhat it doesLevelCommand
POST/crm/eventsTell the contact store something happened with a person (an order, a booking, a payment, a chat); the person is found or made.writerivier contacts event ingest
MethodRouteWhat it doesLevelCommand
POST/crm/contacts/{id}/consentRecord a consent decision with its proof (the words, the source, the policy version).writerivier contacts consent record
GET/crm/contacts/{id}/consentEvery consent decision for this person, oldest first, with its proof.readrivier contacts consent ledger

suppression

MethodRouteWhat it doesLevelCommand
GET/crm/suppressionsAddresses and numbers that must not be written to.readrivier contacts suppression list
POST/crm/suppressionsStop writing to an address or number.writerivier contacts suppression add
POST/crm/suppressions/removeLift a suppression, with the reason it is lifted.adminrivier contacts suppression remove

company

MethodRouteWhat it doesLevelCommand
GET/crm/companiesCompanies.readrivier contacts company list
POST/crm/companiesAdd a company.writerivier contacts company create
GET/crm/companies/{id}A company and its people.readrivier contacts company get
PATCH/crm/companies/{id}Change a company.writerivier contacts company update

segment

MethodRouteWhat it doesLevelCommand
GET/crm/segmentsSaved segments (live rules).readrivier contacts segment list
POST/crm/segmentsSave a segment: a rule over contacts that is evaluated each time it is used.writerivier contacts segment create
PATCH/crm/segments/{id}Change a segment.writerivier contacts segment update
DELETE/crm/segments/{id}Delete a segment that no campaign or flow uses.writerivier contacts segment delete
POST/crm/segments/previewHow many people match a rule or segment, and a few of them.readrivier contacts segment preview

note

MethodRouteWhat it doesLevelCommand
GET/crm/notesNotes on a contact or company.readrivier contacts note list
POST/crm/notesAdd a note.writerivier contacts note create

task

MethodRouteWhat it doesLevelCommand
GET/crm/tasksTasks.readrivier contacts task list
POST/crm/tasksAdd a task.writerivier contacts task create
POST/crm/tasks/{id}/completeMark a task done (or open again).writerivier contacts task complete

pipeline

MethodRouteWhat it doesLevelCommand
GET/crm/pipelinesDeal pipelines and their stages.readrivier contacts pipeline list
POST/crm/pipelinesDefine a pipeline.writerivier contacts pipeline create
GET/crm/pipelines/{id}/boardEach stage of a pipeline with its deals and totals.readrivier contacts pipeline board

deal

MethodRouteWhat it doesLevelCommand
GET/crm/dealsDeals.readrivier contacts deal list
POST/crm/dealsOpen a deal.writerivier contacts deal create
POST/crm/deals/{id}/moveMove a deal to another stage.writerivier contacts deal move

duplicate

MethodRouteWhat it doesLevelCommand
GET/crm/duplicatesPeople who are probably the same.readrivier contacts duplicate list
POST/crm/duplicates/scanLook through the contacts for duplicates and propose merges.writerivier contacts duplicate scan
POST/crm/duplicates/{id}/dismissSay two people are not the same.writerivier contacts duplicate dismiss

import

MethodRouteWhat it doesLevelCommand
POST/crm/importImport contacts from a CSV file. A dry run first reports what would happen; nobody becomes subscribed by being in a file unless the importer states the basis.adminrivier contacts import run

export

MethodRouteWhat it doesLevelCommand
POST/crm/exportExport contacts as CSV.adminrivier contacts export run

person

MethodRouteWhat it doesLevelCommand
POST/crm/export/person/{id}Everything held about one person, to hand to them.adminrivier contacts person export
POST/crm/erase/{id}Erase a person: record, history, notes and tasks go; their address stays suppressed as a one-way hash.adminrivier contacts person erase
POST/contacts/lookupFind or create the contact for a phone, address or handle.writerivier contacts person lookup
GET/contacts/{id}One contact with its identities.readrivier contacts person get

hubspot

MethodRouteWhat it doesLevelCommand
GET/crm/hubspotWhether the HubSpot sync is on and connected, when it last ran and what it did.readrivier contacts hubspot status
POST/crm/hubspot/syncRun the HubSpot sync now: changes both ways, matched by email; consent never moves as a grant.adminrivier contacts hubspot sync

live

MethodRouteWhat it doesLevelCommand
GET/crm/liveWhether real mail may go out for this project: the checks (sender name, postal address, sending domain verified) and who put it live.readrivier contacts live status
POST/crm/livePut the project live for real recipients. An owner's or admin's decision, only when the checks pass; until then only test addresses receive anything.adminrivier contacts live enable
POST/crm/live/disableBack to test and hold mode.adminrivier contacts live disable

settings

MethodRouteWhat it doesLevelCommand
GET/crm/settingsSender identity, footer address, opt-in policy, custom fields, grants and limits.readrivier contacts settings get
PUT/crm/settingsChange the settings. The autonomy of agents and campaigns is a person's to change.adminrivier contacts settings save

form

MethodRouteWhat it doesLevelCommand
GET/crm/formsSignup forms.readrivier contacts form list
POST/crm/formsCreate a signup form: fields, the consent words, double opt-in. Returns the hosted address and the embed code.writerivier contacts form create
GET/crm/forms/{id}One form.readrivier contacts form get
PUT/crm/forms/{id}Change a form.writerivier contacts form update
DELETE/crm/forms/{id}Delete a form; its address stops answering.writerivier contacts form delete

submission

MethodRouteWhat it doesLevelCommand
GET/crm/submissionsWhat the forms received: held entries (state held or unconfirmed), accepted and turned away, with sender, form, page, reasons and a preview.readrivier contacts submission list
GET/crm/submissions/summaryOne blunt count: the real people the guard held this month, the spam it kept out, and what waits for a decision.readrivier contacts submission summary
GET/crm/submissions/sendersSenders the owner allowed or blocked.readrivier contacts submission senders
POST/crm/submissions/sendersAllow or block a sender (by email address) for the guard.adminrivier contacts submission sender
GET/crm/submissions/{id}One submission with every field.readrivier contacts submission get
POST/crm/submissions/bulkAccept or reject many held submissions at once (up to a hundred), optionally allowing or blocking each sender. Each result is reported; one failure does not stop the rest.adminrivier contacts submission bulk
POST/crm/submissions/{id}/acceptLet a held submission in: the person is made or found, the consent they ticked is recorded, the thread moves from Held to the inbox. A person's decision.adminrivier contacts submission accept
POST/crm/submissions/{id}/rejectReject a held submission: its words are deleted and the thread leaves the Held folder. A person's decision.adminrivier contacts submission reject

reviews

MethodRouteWhat it doesLevelCommand
GET/crm/reviews/settingsReviews and ratings settings: moderation, review requests, incentive notice, destination inbox.readrivier contacts reviews settings get
PUT/crm/reviews/settingsSet up or change reviews and ratings. A person's setting.adminrivier contacts reviews settings save
GET/crm/reviewsReviews and ratings: the queue (held and waiting) by default, or any state, kind or subject.readrivier contacts reviews list
GET/crm/reviews/aggregateAverage (weighted for recency and verification), simple average, distribution, trend by month, verified count and the NPS or thumbs share for a subject or the whole project.readrivier contacts reviews aggregate
POST/crm/reviews/{id}/approvePublish a held or waiting review; its thread leaves the Held folder. A person's decision.adminrivier contacts reviews approve
POST/crm/reviews/{id}/rejectReject a review; its words are not shown and its held thread is deleted. Optionally block the sender. A person's decision.adminrivier contacts reviews reject
POST/crm/reviews/{id}/removeTake a published review down. A person's decision.adminrivier contacts reviews remove
POST/crm/reviews/{id}/replyReply to a review in public. Written by a person (a draft can be used as the starting text).adminrivier contacts reviews reply
POST/crm/reviews/{id}/draft-replyDraft a reply with the writing assistant; marked as AI-written, kept private until a person publishes it.adminrivier contacts reviews draft reply

history

MethodRouteWhat it doesLevelCommand
GET/crm/historyWhat changed, by whom and when: every audited change names the records it touched. Ask with a record id to see that record's history.readrivier contacts history list
MethodRouteWhat it doesLevelCommand
GET/crm/searchSearch segments, forms, deals, notes, tasks, companies, templates, campaigns, flows or pipelines by the words in them.readrivier contacts search documents
GET/crm/consent-recordsConsent decisions as they stand, by channel, purpose and state, for the people matching some words.readrivier contacts search consent

archive

MethodRouteWhat it doesLevelCommand
GET/crm/archive/{kind}Archived records of a kind, to restore from.readrivier contacts archive list
POST/crm/archive/{kind}/{id}Take a record out of the lists. Nothing is lost; it can be restored. A person's decision.adminrivier contacts archive archive
POST/crm/restore/{kind}/{id}Put an archived record back.adminrivier contacts archive restore

marketing

MethodRouteWhat it doesLevelCommand
GET/crm/marketing/plansMarketing plans: goal, metric, window and how many drafts each has.readrivier contacts marketing plan list
POST/crm/marketing/proposeThe advisor's dialogue: what the person said (and the earlier turns) becomes a proposed plan and the questions still open. Nothing is saved; the person confirms by creating the plan.writerivier contacts marketing propose
POST/crm/marketing/plansMake a marketing plan: the outcome wanted, the measure, the window, the channels, the words to avoid, the hypothesis and the rule for deciding. Nothing is sent or spent.writerivier contacts marketing plan create
GET/crm/marketing/plans/{id}One plan with its drafts, their checks and the context it was made in.readrivier contacts marketing plan get
POST/crm/marketing/plans/{id}/campaign-draftDraft an email or text campaign for a plan in the project's voice; it is an ordinary draft campaign that a person reviews and approves.writerivier contacts marketing campaign draft
POST/crm/marketing/plans/{id}/content-draftDraft a social post, a page block or a business-profile post for a plan; kept as a marked AI draft, published by a person.writerivier contacts marketing content draft
GET/crm/marketing/calendarPlanned items with the reason for each, and the project's other scheduled campaigns marked as unplanned.readrivier contacts marketing calendar
GET/crm/marketing/plans/{id}/resultsWhat happened against the plan's goal, with what that does and does not show said in plain words.readrivier contacts marketing results
POST/crm/marketing/plans/{id}/finishClose a plan with the lessons learned; the next plan starts from them.writerivier contacts marketing finish
GET/crm/marketing/learningsWhat closed plans taught, newest first.readrivier contacts marketing learnings
POST/crm/marketing-approval/{id}Approve, start, close or cancel a plan. A person's decision.adminrivier contacts marketing state

chat

MethodRouteWhat it doesLevelCommand
GET/crm/chatThe chat widget: the inbox it uses, wording, opening hours, hand-off, rating, transcript and notice; and the embed.readrivier contacts chat get
PUT/crm/chatSet up or change the chat widget. A person's setting.adminrivier contacts chat save

map

MethodRouteWhat it doesLevelCommand
GET/crm/mapsThe maps of this project: places, load mode, design and the embed.readrivier contacts map list
POST/crm/mapsMake a map: a list of places (name, address, hours, phone, tags). Addresses without coordinates are looked up once and remembered.writerivier contacts map create
GET/crm/maps/{id}One map.readrivier contacts map get
PUT/crm/maps/{id}Change a map.writerivier contacts map update
DELETE/crm/maps/{id}Delete a map; its address stops answering.writerivier contacts map delete
POST/crm/maps/geocodeCheck an address while setting a map up: the place found (or none) and whether a real map service answered.writerivier contacts map geocode
MethodRouteWhat it doesLevelCommand
GET/crm/consent-widgetThe cookie and consent widget: the optional categories in use, the cookie and storage list, the analytics ceiling, copy, design and the embed. Defaults when nothing is saved.readrivier contacts consent widget get
PUT/crm/consent-widgetSet up or change the cookie and consent widget. Visitors are asked again after a change. A person's setting.adminrivier contacts consent widget save
GET/crm/consent-widget/statsHow the banner is doing: times shown, customise opened, decisions, accept all and reject all, by day.readrivier contacts consent widget stats
POST/crm/consent-widget/by-regionWhat a visitor from each region gets under the given banner settings: whether the banner asks first, what is on before a choice and with a browser privacy signal, the analytics level before and after agreeing, and which regions the project serves. Saves nothing.readrivier contacts consent widget by region

widget

MethodRouteWhat it doesLevelCommand
GET/crm/widgetsEvery widget Rivier offers, with its manifest: what is built here, what other parts of the product own and register, and what is planned.readrivier contacts widget catalogue
POST/crm/widgetsMake a widget from a template (email signup, newsletter, waiting list, contact, lead form): a form with its words in seven languages, ready to embed. Returns the three embed options.writerivier contacts widget create
GET/crm/forms/{id}/embedThe embed options of a widget: one-line script (shadow DOM, no layout shift), iframe, and the hosted page on the project's domain.readrivier contacts widget embed
GET/crm/forms/{id}/statsViews, starts, submits, what the guard held, what was let in, confirmations and the conversion of a widget over the last days (default 30).readrivier contacts widget stats

customer account

MethodRouteWhat it doesLevelCommand
GET/customer-accountsThe people who have an account to sign in to the project's sites: when they joined and last signed in, whether blocked, and how many devices and passkeys they have. Addresses are the customer's own sign-in addresses.readrivier contacts customer account list
POST/customer-accounts/{id}/blockBlock a customer account: every session ends and sign-in stops, without saying why to the customer. A person's decision; an agent needs a person's approval for this exact call.writerivier contacts customer account block
POST/customer-accounts/{id}/unblockLet a blocked customer account sign in again.writerivier contacts customer account unblock
POST/customer-accounts/{id}/deleteDelete a customer account: sessions and passkeys end and the address is freed. The person's orders, bookings and invoices stay (they are the business's records); their data-subject request is the compliance center's. Needs a person's approval.writerivier contacts customer account remove

customer sign in

MethodRouteWhat it doesLevelCommand
GET/customer-accounts/activityRecent sign-in activity on the project's sites: codes asked for, sign-ins, failures, blocks and rate limits, with a masked address, the device and a coarse network. Never a code, a token or a full address.readrivier contacts customer sign in list

customer summary

MethodRouteWhat it doesLevelCommand
GET/customer-accounts/summaryA count for the home page: accounts, new this week, how many signed in this week, how many use a passkey, how many are blocked and how many attempts were turned away.readrivier contacts customer summary get

customer settings

MethodRouteWhat it doesLevelCommand
GET/customer-accounts/settingsHow customers sign in to a site: open sign-up or existing accounts only, passkeys on or off, how long a session lasts.readrivier contacts customer settings get
PUT/customer-accounts/settingsChange how customers sign in to a site. A person's decision; an agent is refused.adminrivier contacts customer settings update

identity

MethodRouteWhat it doesLevelCommand
POST/contacts/{id}/identitiesAttach another identity to a contact.writerivier contacts identity attach

donotcontact

MethodRouteWhat it doesLevelCommand
GET/suppressionsAddresses and numbers we must not contact.readrivier contacts donotcontact list
POST/suppressionsAdd to the do-not-contact list.writerivier contacts donotcontact add
DELETE/suppressionsRemove from the do-not-contact list.writerivier contacts donotcontact remove

service

MethodRouteWhat it doesLevelCommand
GET/workspace/serviceCustomer service overview: conversations and state.readrivier contacts service get
POST/workspace/service/syncPull the latest mail and tickets.writerivier contacts service sync

conversation

MethodRouteWhat it doesLevelCommand
GET/workspace/service/conversations/{id}One customer conversation.readrivier contacts conversation get
POST/workspace/service/conversations/{id}/answerAnswer a customer.writerivier contacts conversation answer
POST/workspace/service/conversations/{id}/closeClose a conversation.writerivier contacts conversation close
POST/workspace/service/conversations/{id}/draftDraft an answer from the knowledge.writerivier contacts conversation draft

source

MethodRouteWhat it doesLevelCommand
GET/workspace/service/sourcesWhat the service answers from.readrivier contacts source list
POST/workspace/service/sourcesAdd a page or note to the knowledge.writerivier contacts source add
DELETE/workspace/service/sources/{id}Remove a source.writerivier contacts source delete

voice

MethodRouteWhat it doesLevelCommand
GET/workspace/service/voiceHow the service sounds.readrivier contacts voice get
PATCH/workspace/service/voiceChange the service's tone and signature.writerivier contacts voice update

bulk

MethodRouteWhat it doesLevelCommand
POST/crm/bulkChange many contacts at once: tag, record consent on the ledger, add to a list, share with the organisation, archive, or move to another project. Starts as a dry run that changes nothing; set dryRun to false to apply. Consent changes need the consent permission; moves are a person's decision.writerivier contacts bulk run

bulk recipients

MethodRouteWhat it doesLevelCommand
POST/crm/bulk/recipientsCompile a multi-select of segments, lists, tags and individual contacts, less exclusions, into one audience rule and count it live: matched, able to receive, and without consent.readrivier contacts bulk recipients compile

bulk import

MethodRouteWhat it doesLevelCommand
POST/crm/bulk/import/previewSee what a CSV import would do without importing it (always a dry run). The import itself needs a key with the contacts:admin scope.writerivier contacts bulk import preview