Call Log API · GET /call-logs · Bearer Token · JSON
Call Log API Reference With Filters and JSON From RMDialer
RMDialer's call log API is one GET endpoint that returns every call your team's phones made, with direction, duration, caller and lead, filtered by date, type and employee.
Read-only GET · 500 calls a page · 60 requests a minute
Your own SIM, no virtual number · Android and iPhone apps + Web CRM in one plan · No card for the trial
RAKPS3,500+ businesses on Wappblaster tools · listed on G2, Capterra, SoftwareSuggest
GET /call-logs200 OK · 500 calls
called_byAarti · id 4068
leadRavi Kumar · Follow-Up
duration_seconds184
Short answer
What is the RMDialer call log API?
The RMDialer call log API is one read-only GET endpoint, /api/datalake/outbound/call-logs, that returns every call made or received on your team's Android phones as JSON. Each call carries the number, direction, time, duration, whether it connected, the employee who placed it and the lead it belongs to. Filter by date, call type, lead status or employee, page 500 at a time, and authenticate with a bearer token from Setup, Outbound API.
Key takeaways
The call log API returns incoming, outgoing, missed, voicemail, rejected and blocked calls.
Pages hold up to 500 calls and the limit is 60 requests a minute.
updated_since returns only the calls added or changed after your last sync.
The same token also reads leads, follow-ups and remarks from three sibling endpoints.
Endpoint
Call log API endpoint and authentication
One request, no body. Copy BASE_URL and TOKEN from Setup, then Outbound API in the RMDialer Web CRM.
GET {BASE_URL}/api/datalake/outbound/call-logs
Authorization: Bearer {TOKEN}
Accept: application/json
The token can also ride in the URL as ?token= when a tool cannot set headers, such as a spreadsheet import. A header is safer, because URLs end up in logs.
Stable call id. Use it as your primary key so a re-read call updates, never duplicates
phone_number
The number in international format
raw_number
The number exactly as the phone stored it
contact_name
The name the phone showed for the number
call_type
incoming, outgoing, missed, voicemail, rejected or blocked
call_at
When the call started, with the account time zone offset
duration_seconds
Talk time in seconds
connected
true when the call was answered
lost_lead
true when the number was never reached
spam / video
Spam-flagged number; video call
sim_slot
Which SIM carried the call
location
The region the number belongs to
called_by
The employee whose phone made or took the call
lead
The lead the number belongs to, with its status, or null
synced_at
When the phone sent the call to your account
meta.has_more
true while more pages remain
Examples
Call log API examples in Python and Node
Python: every missed call this month
import time
import requests
def fetch_call_logs(base_url, token, **filters):
"""Yield every call that matches the filters, one page of 500 at a time."""
page = 1
while True:
r = requests.get(
f"{base_url}/api/datalake/outbound/call-logs",
headers={"Authorization": f"Bearer {token}", "Accept": "application/json"},
params={**filters, "page": page, "per_page": 500},
timeout=30,
)
if r.status_code == 429: # over 60 requests a minute: wait, then retry this page
time.sleep(5)
continue
r.raise_for_status()
body = r.json()
yield from body["data"]
if not body["meta"]["has_more"]:
break
page += 1
for call in fetch_call_logs(BASE_URL, TOKEN, type="missed", **{"from": "2026-10-01"}):
print(call["call_at"], call["phone_number"], call["called_by"]["name"])
Node: incremental sync with updated_since
// Node 18+ (built-in fetch). Pulls only what changed since the last run.
async function* fetchCallLogs(baseUrl, token, filters = {}) {
for (let page = 1; ; page++) {
const qs = new URLSearchParams({ ...filters, page, per_page: 500 });
const res = await fetch(`${baseUrl}/api/datalake/outbound/call-logs?${qs}`, {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
if (res.status === 429) { await new Promise((r) => setTimeout(r, 5000)); page--; continue; }
if (!res.ok) throw new Error(`Call log API ${res.status}`);
const body = await res.json();
yield* body.data;
if (!body.meta.has_more) return;
}
}
// Save when this run started, written in the account time zone (meta.timezone), for the next run.
const startedAt = startOfRunInAccountZone();
for await (const call of fetchCallLogs(BASE_URL, TOKEN, { updated_since: lastSyncStartedAt })) {
await upsertCall(call.id, call); // the id is stable, so a re-read call updates instead of duplicating
}
403: the token has been turned off in Setup, Outbound API.
422: a parameter is invalid, for example type=answered or per_page=1000.
429: more than 60 requests in a minute. Wait and repeat the same page.
Customer reviews
RMDialer reviews from business users
Real businesses, real numbers: how owners and sales teams across India and 12+ countries use RMDialer every day.
Rated 4.9 by customers 4.7 on Google Play 5K+ downloads India + 12+ countries
“Collections calling is volume work. The auto dialer clears 250 numbers per executive per day from their own SIM, promise-to-pay dates become reminders, and the daily call report shows connected versus not reachable per person. Talk time per employee ended the "phone was busy all day" excuse.”
“Every visa enquiry moves through counselling, documents and filing as lead statuses, and the counsellor's phone rings for each follow-up. What I check daily is the employee call logs report: calls, connected, talk time per counsellor, on my phone. The register we used to maintain is gone.”
“We use RMDialer as the dialer layer under our own CRM through the API. Our system pushes the lead and the assignment, the agent's phone dials it, and every call event comes back by webhook with duration, outcome and remark. Integration took our developer about two days with the GitHub samples.”
“Subscription business: every client's plan expiry is a renewal reminder and every prospect from the webinar list is auto dialled the next morning. Paid vs due on each client is visible, so collections are not in my head anymore. The daily call report keeps my two callers honest.”
“Order calling to 350 chemists every week. The list auto dials from each MR's own SIM, the order remark goes on the chemist's number, and I see calls and talk time per MR every evening on the web. Bulk WhatsApp for the new scheme went to the whole list from the call log in one go.”
MKManoj KumarRegional head · Pharma distributionPatna
“Good telecalling CRM for a small Saudi team. Arabic app, calls from our STC SIMs, and the manager report per employee is what we bought it for. Four stars because I want a desktop app for the manager too, not only the web. Support fixed our SIM selection question the same day.”
AAAhmed Al-QahtaniSales supervisor · Car rental companyRiyadh, Saudi Arabia
Reviews are collected from customers on WhatsApp and on this website.
Share yours on WhatsApp
Same token
Call log API and its sibling endpoints
The outbound API has four read-only endpoints. Each takes the same page, per_page, from, to, updated_since and search parameters.
GET /api/datalake/outbound/call-logs
Every call from every phone on the account
from and to filter on: the time of the call
GET /api/datalake/outbound/leads
Leads with status, source, owner, latest remark and custom fields
from and to filter on: the date the lead was created
GET /api/datalake/outbound/followups
Follow-up reminders, open or done
from and to filter on: the time the follow-up is due
GET /api/datalake/outbound/remarks
Notes written after calls
from and to filter on: the date the remark was written
Which call log
Call log API vs the Android CallLog provider
Android has its own call log API, CallLog.Calls, and it is a different thing. It reads the log of the one phone your app is installed on, needs the READ_CALL_LOG permission, and Google Play only allows that permission for the default phone app and a short list of exceptions. It knows numbers and durations, not leads or employees.
RMDialer's call log API is the other half of the job: RMDialer is the dialer on each phone, so it reads CallLog.Calls there, attaches the lead and the caller, and your server reads every phone at once over HTTPS. If you are building the Android side yourself, start with how to read call logs in Android programmatically and the READ_CALL_LOG Google Play policy.
A call log API is a web endpoint that returns the calls made and received on a phone system as data: number, direction, time, duration and whether it connected. RMDialer's call log API returns those for every Android phone on your account, plus the caller and the lead each call belongs to.
Where do I get the call log API token?
In the RMDialer Web CRM, open Setup, then Outbound API. The page shows your base URL and your API token. Send the token as Authorization: Bearer <token>, or as ?token=<token> in the URL.
Is the call log API read-only?
Yes. Every request is a GET with no body and the filters go in the query string. Calls reach the API because the phones running RMDialer sync them, so nothing has to be posted to it.
Does the call log API return missed and rejected calls?
Yes. call_type is incoming, outgoing, missed, voicemail, rejected or blocked, and the type filter takes the same values, so type=missed returns only the calls nobody answered.
How do I get the call history of one phone number?
Pass the number as search. It matches the number or the contact name, so search=9812345678 returns every call with that number across the whole team. Add from and to to narrow it to a period.
How do I get one employee's calls?
Pass their user id as employee. The API returns the calls that employee made plus calls to numbers assigned to them. called_by on each row tells you who actually placed the call.
How do I sync only new calls?
Save the time your last sync started and send it as updated_since on the next run. You get the calls added or changed since then, and the stable id on each call lets you update a row instead of inserting it twice.
Is there a call log webhook?
Yes. Besides polling this endpoint, the RMDialer backend can push calls to a URL of yours as they sync, so your system hears about a call without asking. Webhooks are set up with our team for your account; message us with the URL you want calls sent to.
What is the call log API rate limit?
Up to 60 requests a minute. With per_page=500 that is 30,000 calls a minute. Going over returns 429; wait a few seconds and repeat the same page.
Are iPhone calls in the call log API?
Calls placed from the RMDialer iPhone app are not, because Apple does not open the iPhone call log to any app. Leads, remarks and follow-ups made on an iPhone are in the API like any other.
Is this a call history API too?
Yes. The same endpoint is the call history API: page through it with a date range for the team's history, with search for one number's history, or with employee for one person's.
Is there an API to get call logs from Android phones?
Yes, when the dialer on the phone provides one. RMDialer's call logs API streams every call on each user's SIM (direction, duration, outcome, the lead, the remark, the follow-up) to your own system by REST and webhooks, and accepts leads and assignments back. Working samples are open on GitHub.
How can a manager see every call the team makes?
With a call tracking app installed as the phone app on each staff phone, every incoming, outgoing and missed call on the business SIM syncs to the owner's dashboard by itself. The manager filters by employee and date to see calls made, calls connected, missed calls, talk time and the status saved after each call, without asking anyone for a report.
How to track employee calls on Android without call recording?
Install a call tracking app that becomes the phone app on each employee's Android phone. It reads the phone's own call log, so every call on the business SIM is counted with direction, duration and outcome, and syncs to the owner's report. You get who was called, when, for how long, what status was saved and what follow-up was set, and call recording is supported too, set up with you during training.
No trial clock on the dialer
RMDialer free plan vs paid plan
The business dialer is free forever with no account and no expiry: the keypad, contacts, caller ID, the call log and your call analytics, plus free WhatsApp sends every day. A plan adds the customer record after every call, follow-up reminders, list auto dialing, your team and WhatsApp automation.
Free forever
₹0, no expiry
Your phone app: keypad, contacts, call log and caller ID
Spam and unknown-number screening on every incoming call
Call analytics: your day counted, by outcome, and by who you called
Missed calls kept in their own list, so nothing is returned late
Sending WhatsApp from a call, free every day
Free WhatsApp sends every day with a free account: 15 a day for your first 15 days, then 3 a day. The dialer itself needs no login at all.
On a plan
₹159/user/month, yearly
The customer record: lead status and remarks saved against every call
Follow-up reminders that ring like an alarm on the day you set
Auto dialing a whole list without touching the phone
Your team: seats, assigned calling lists and per-person reports
Automatic WhatsApp after calls, bulk sending and the WhatsApp API inbox
Backup and restore, so a new phone carries on where the old one stopped
Leads arriving on their own from Google Sheets, APIs and lead portals
Try it free for 3 days: unlimited use, no credit card required. Prices are per user, exclusive of taxes.
Get your call log API token
Install RMDialer on your team's phones, open Setup, then Outbound API, and make the first request.
₹159/user/month on yearly · every feature included · Prices are per user, exclusive of taxes.
Free forever: the business dialer never expires, and needs no account
Call recording supported · our team sets it up with you during training
On iPhone and Android. The iPhone app has every feature except the native call log.