API reference
41 operations, generated from the same declaration the router dispatches on — so it cannot describe an endpoint that does not exist, or miss one that does. Paste a key to run any of them against your own data.
API reference
Every endpoint below is generated from the router itself, so it cannot drift out of date.
Used only by the “Try it” buttons on this page, in your browser. Create one in Settings → API keys.
Sign in to 360Nook and open Settings → API keys to create one.
/v1/contacts/bulkcontacts:writeCreate many contacts at once from a pasted list, optionally tagging them all. Use this instead of calling create_contact repeatedly.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
texttagscreatedskippedtagsreasonscurl -X POST /api/v1/contacts/bulk \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/knowledgeknowledge:readList what the AI assistant knows about this business.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idquestionanswersourceenabledcreated_atcurl /api/v1/knowledge \ -H "Authorization: Bearer nook_sk_your_key"
/v1/conversation-ai-agentsknowledge:writeBuild the Conversation AI agent from past conversations: learns the questions customers ask and the team's answers, then turns the agent on in SUGGESTIVE mode (a person approves every reply).
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
conversationsdayschannelsconversationsknowledge_addedchannelsagent_idcurl -X POST /api/v1/conversation-ai-agents \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/knowledgeknowledge:writeTeach the AI assistant a question and its answer. Used on chat, email and the phone.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
questionansweridquestionanswersourceenabledcreated_atcurl -X POST /api/v1/knowledge \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/pipelinesopportunities:writeCreate a pipeline with its stages, in order.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
namedescriptionstagesidnamedescriptioncreated_atcurl -X POST /api/v1/pipelines \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/contacts/:id/notescontacts:readList the notes on a contact, newest first.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idbodycreated_atcurl /api/v1/contacts/:id/notes \ -H "Authorization: Bearer nook_sk_your_key"
/v1/contacts/:id/notescontacts:writeAdd a note to a contact.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
bodyidbodycreated_atcurl -X POST /api/v1/contacts/:id/notes \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/taskstasks:readList tasks, soonest due first. Completed ones are excluded by default.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. | |
contact_iduuidOnly tasks about this contact. | |
include_completedstringPass "true" to include tasks already done. |
idtitledescriptiondue_atcompletedcontact_idcreated_atcurl /api/v1/tasks \ -H "Authorization: Bearer nook_sk_your_key"
/v1/taskstasks:writeCreate a task, optionally about a contact.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
titledescriptiondue_atcontact_ididtitledescriptiondue_atcompletedcontact_idcreated_atcurl -X POST /api/v1/tasks \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/tasks/:id/completetasks:writeMark a task done.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
idtitlecompletedcreated_atcurl -X POST /api/v1/tasks/:id/complete \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/contactscontacts:readList contacts, newest first. Filter by search text and/or a tag.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. | |
qstringCase-insensitive search. | |
tagstringOnly contacts carrying this tag (case-insensitive). |
idfirst_namelast_nameemailphonetagscreated_atcurl /api/v1/contacts \ -H "Authorization: Bearer nook_sk_your_key"
/v1/opportunitiesopportunities:readList opportunities, newest first. Deleted ones are excluded.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. | |
pipeline_iduuidOnly opportunities in this pipeline. | |
stage_iduuidOnly opportunities in this stage. | |
statusstringOnly opportunities with this status: open, won, lost or abandoned. |
idtitlevaluecurrencystatuspipeline_idstage_idcontact_idcreated_atcurl /api/v1/opportunities \ -H "Authorization: Bearer nook_sk_your_key"
/v1/pipelinesopportunities:readList pipelines.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idnamedescriptionis_defaultsort_ordercurl /api/v1/pipelines \ -H "Authorization: Bearer nook_sk_your_key"
/v1/calendarscalendars:readList calendars. Deleted ones are excluded.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idnameslugtimezoneslot_durationis_activecurl /api/v1/calendars \ -H "Authorization: Bearer nook_sk_your_key"
/v1/appointmentscalendars:readList appointments, soonest first.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. | |
calendar_iduuidOnly appointments on this calendar. |
idtitlestarts_atends_atstatuscalendar_idcontact_idcurl /api/v1/appointments \ -H "Authorization: Bearer nook_sk_your_key"
/v1/conversationsconversations:readList conversations, most recently active first.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idcontact_idlast_message_atlast_message_previewmessage_countstarredcurl /api/v1/conversations \ -H "Authorization: Bearer nook_sk_your_key"
/v1/workflowsworkflows:readList workflows. Deleted ones are excluded.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
limitintegerHow many rows to return, 1–200. Values above 200 are clamped, not rejected. | |
cursorstringContinue from a previous page. Pass the next_cursor you were given; treat it as opaque. |
idnamedescriptionactive_enrolledtotal_enrolledlast_run_atcurl /api/v1/workflows \ -H "Authorization: Bearer nook_sk_your_key"
/v1/workflowsworkflows:writeCreate a workflow from a trigger and an ordered list of actions. Created as a draft; publish it in the builder.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
namedescriptiontriggertrigger_configstepsidnamestatuswarningscurl -X POST /api/v1/workflows \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/workflows/custom-triggerworkflows:writeFire a custom trigger: every published workflow listening for this event name starts for the contact, with data available as {{trigger.<key>}}.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
eventcontact_idemailphonedataeventcontact_idacceptedcurl -X POST /api/v1/workflows/custom-trigger \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/contactscontacts:writeCreate a contact.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
first_namelast_nameemailphoneidfirst_namelast_nameemailphonecreated_atcurl -X POST /api/v1/contacts \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/contacts/:idcontacts:writeUpdate a contact. Only the fields you send are changed.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
first_namelast_nameemailphoneidfirst_namelast_nameemailphonecreated_atcurl -X PATCH /api/v1/contacts/:id \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/opportunitiesopportunities:writeCreate an opportunity.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
titlevaluecurrencypipeline_idstage_idcontact_idstatuslost_reasonidtitlevaluecurrencypipeline_idstage_idcontact_idstatuscreated_atcurl -X POST /api/v1/opportunities \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/opportunities/:idopportunities:writeUpdate an opportunity — move its stage, change its value, win or lose it.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
titlevaluecurrencypipeline_idstage_idcontact_idstatuslost_reasonidtitlevaluecurrencypipeline_idstage_idcontact_idstatuscreated_atcurl -X PATCH /api/v1/opportunities/:id \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/appointmentscalendars:writeBook an appointment. Availability is checked; a taken slot is refused, not queued.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
calendar_idstarts_atcontact_idguest_nameguest_emailguest_phonenotestimezonestatuscancel_reasonidcalendar_idstarts_atends_atstatuscontact_idcurl -X POST /api/v1/appointments \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/appointments/:idcalendars:writeReschedule an appointment, cancel it, or record whether they showed.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
calendar_idstarts_atcontact_idguest_nameguest_emailguest_phonenotestimezonestatuscancel_reasonidcalendar_idstarts_atends_atstatuscontact_idcurl -X PATCH /api/v1/appointments/:id \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/marketplace/billing/chargescharges:writeCharge the account's wallet on one of your app's billing meters: price per unit × units. The same eventId is charged once; no funds → refused, nothing charged.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
meterIdunitspriceeventIduserIddescriptioneventTimeidmeterIdeventIdunitspriceamountcurrencyeventTimerefundedduplicatecurl -X POST /api/v1/marketplace/billing/charges \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/marketplace/appsmarketplace:readApps from the App Marketplace this account can install or already has (search with query) — what to suggest when someone asks for an integration. Respects the agency's Marketplace Settings.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. | |
querystringWords to look for in the app's name, developer or description. |
appsnotecurl /api/v1/marketplace/apps \ -H "Authorization: Bearer nook_sk_your_key"
/v1/marketplace/billing/chargescharges:readYour app's wallet charges on this account (filters: meterId, eventId, userId, startDate, endDate; skip, limit).
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
datalimitskipcurl /api/v1/marketplace/billing/charges \ -H "Authorization: Bearer nook_sk_your_key"
/v1/marketplace/billing/charges/has-fundscharges:readWhether the account's wallet has funds for usage charges.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
hasFundsbalancecurrencycurl /api/v1/marketplace/billing/charges/has-funds \ -H "Authorization: Bearer nook_sk_your_key"
/v1/marketplace/billing/charges/:idcharges:readOne of your app's wallet charges.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
idmeterIdeventIdunitspriceamountcurrencyeventTimerefundedcurl /api/v1/marketplace/billing/charges/:id \ -H "Authorization: Bearer nook_sk_your_key"
/v1/marketplace/billing/charges/:idcharges:writeDelete (refund) one of your app's wallet charges: the amount goes back to the account's wallet.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
okalreadyRefundedcurl -X DELETE /api/v1/marketplace/billing/charges/:id \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/payments/custom-provider/connectpayments:writeConnect this app's payment gateway on the account: the test and live keys the app uses to recognise our calls.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
testliveokprovidermodecurl -X POST /api/v1/payments/custom-provider/connect \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/payments/custom-provider/connectpayments:readRead this app's gateway config on the account (keys are masked).
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
providermodetestlivecurl /api/v1/payments/custom-provider/connect \ -H "Authorization: Bearer nook_sk_your_key"
/v1/payments/custom-provider/disconnectpayments:writeDisconnect this app's gateway from the account.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
liveModeokcurl -X POST /api/v1/payments/custom-provider/disconnect \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/conversations/messages/inboundconversations:writeAdd an inbound message from a conversation provider: an SMS or Email reply it received, or a Call log (inbound or outbound) for an existing contact.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
typephoneemailsubjectcontact_idmessagedirectionstatusduration_secondsrecording_urlexternal_idcontactIdconversationIdconversationProviderIdcallattachmentsaltIddateokconversation_idmessage_idcall_idcontact_idduplicatecurl -X POST /api/v1/conversations/messages/inbound \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/conversations/messages/outboundconversations:writeAdd an external outbound call log from a Call conversation provider (GHL's payload).
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
typephonecontact_idduration_secondsrecording_urlexternal_idcontactIdconversationIdconversationProviderIdcallattachmentsaltIddateokconversation_idcall_idcontact_idduplicatecurl -X POST /api/v1/conversations/messages/outbound \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/conversations/messages/statusconversations:writeUpdate an outbound message's delivery status (for the conversation provider that carried it).
message_idstatuserroridstatuscurl -X PATCH /api/v1/conversations/messages/status \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/conversations/messagesconversations:writeSend a message to a contact on email, SMS, WhatsApp or LINE.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
contact_idchannelbodysubjectfrom_nameidconversation_idchanneldeliveredcodecurl -X POST /api/v1/conversations/messages \
-H "Authorization: Bearer nook_sk_your_key" \
-H "Content-Type: application/json" \
-d '{}'/v1/contacts/:idcontacts:readFetch one contact.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
idfirst_namelast_nameemailphonecreated_atcurl /api/v1/contacts/:id \ -H "Authorization: Bearer nook_sk_your_key"
/v1/opportunities/:idopportunities:readFetch one opportunity.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
idtitlevaluecurrencypipeline_idstage_idcontact_idstatuscreated_atcurl /api/v1/opportunities/:id \ -H "Authorization: Bearer nook_sk_your_key"
/v1/appointments/:idcalendars:readFetch one appointment.
| Parameter | Value |
|---|---|
sub_account_iduuidAct on one of your sub-accounts. Agency keys only — a sub-account key is already scoped and does not need it. |
idcalendar_idstarts_atends_atstatuscontact_idcurl /api/v1/appointments/:id \ -H "Authorization: Bearer nook_sk_your_key"