Skip to content

Nerro API

Run calling campaigns from your own systems and get every result back, with the same consent, calling-hour and do-not-call rules as the app.

Authentication

Create an API key in Nerro under Connectors → Zapier (the same key works for Zapier and the API). Send it on every request. It's shown once; replacing it stops the old one.

curl https://www.nerro.co/api/v1/me \
  -H "Authorization: Bearer nrz_your_key"

Responses are JSON: { "data": … } on success, { "error": { "message": … } } with a 4xx or 5xx status otherwise. Up to 120 requests a minute per key.

Endpoints

Base URL https://www.nerro.co/api/v1.

MethodPathWhat it does
GET/meWhich business the key belongs to.
GET/employeesYour AI employees: id, name, role, status.
GET/calls?since=&limit=Finished calls, newest first: outcome, summary, sentiment, duration, the details captured.
GET/leads?since=&limit=Leads and messages, with status (new, contacted, qualified, booked, lost).
POST/dncAdd a number to your do-not-call list. Body: {"phone"}.
GET/campaignsYour campaigns, with progress.
POST/campaignsCreate a draft: name, employee_id, purpose (informational or marketing), brief with {{variables}}, days, window, attempts, concurrency, starts_at, budget_cents, text_on_no_answer.
GET/campaigns/{id}One campaign: status, people by status and outcome, spend so far.
POST/campaigns/{id}/contactsAdd up to 5,000 people to a draft: consent_source, consent_confirmed: true, contacts [{phone, name, variables}].
GET/campaigns/{id}/contactsEach person's status, tries, outcome and requested call-back time.
POST/campaigns/{id}/launchLaunch with consent_text. The campaign's practice calls must have passed in Nerro first.
POST/campaigns/{id}/pause · resume · cancelControl a running campaign.

A campaign from start to finish

# 1. Create the draft
curl -X POST https://www.nerro.co/api/v1/campaigns -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"name":"November renewals","employee_id":"EMPLOYEE_ID","purpose":"informational",
       "brief":"Let {{first_name}} know the lease on unit {{unit}} ends {{lease_end}}. Ask if they plan to renew."}'

# 2. Add the people (they agreed to hear from you)
curl -X POST https://www.nerro.co/api/v1/campaigns/ID/contacts -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"consent_source":"inbound_inquiry","consent_confirmed":true,
       "contacts":[{"phone":"+13125550101","name":"Dana Lee","variables":{"unit":"4B","lease_end":"Dec 1"}}]}'

# 3. Open the campaign in Nerro and run its practice calls (they must pass), then launch
curl -X POST https://www.nerro.co/api/v1/campaigns/ID/launch -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"consent_text":"Every person is a current tenant who agreed to be contacted by us."}'

Sending new leads

To have a new web or ad lead called within seconds, create a lead source in Nerro (Leads → Connect a form or CRM) and POST each lead to its private URL. Its calling rules (out-of-hours handling, retries, duplicates) apply.

Results pushed to you

For every finished call, Nerro can POST the outcome, summary and captured details to your server (Connectors → Webhook, signed with x-nerro-signature) or to Zapier. Use GET /calls?since= to catch up on anything missed.

Rules the API can't get around

Calls go out only to people with consent on file, only inside each person's legal calling hours, never to numbers on your do-not-call list, at most 3 times in 24 hours, and with an AI disclosure and opt-out in the first sentence. A campaign launches only after its practice calls pass.