Sign in with your staff or client account.

Emergency sign-in with the admin token

Enter the 6-digit code from your authenticator app.

Can’t scan it? Add an account by hand with this key:

Choose a password for your account.

Emergency access with the ADMIN_TOKEN from the server’s .env file. Use it to set up the first owner account, or when nobody can sign in. Every use is recorded in the audit log.

Tell us about your dialer. We’ll review the request, set up your caller-ID pool and email you when your account is ready.

Overview

What your dialers can draw from right now.

Needs attention

Live traffic

Caller-ID requests per minute from each client over the last hour. Updates every 5 seconds.

Coverage by state

Green bar = share of that state’s DIDs in batches that are live now.

DIDs by supplier

Recent denied requests

Requests the API refused because the IP isn’t on a client’s list, is blocked, or sent no key. Block an address or add it to a client from here.

Overview

Your caller-ID pool and today’s traffic. This account can view everything here but can’t change settings; contact support for changes.

Live traffic

Caller-ID requests per minute from your dialers over the last hour.

Your batches

Allowed dialer IPs

Requests from any other address are refused.

Batches

Each batch runs live for its run period, rests, then comes back on its own. New batches start paused: activate them now, or schedule a start time. A daily limit of 0 means no limit; once a DID reaches its limit it sits out until midnight.

New batch

DIDs

The caller IDs in your batches. Click a column heading to sort.

Upload, move, switch off or delete numbers. Files can be .txt, .csv or .xlsx; any column holding 10- or 11-digit US numbers is picked up, and the leading 1 is dropped.

Bulk upload

Bulk delete

Every number in the file or list is removed from all batches.

0 selected
DIDStateBatchSupplierOnTodayUsesLast used

Clients & IP access

Each client gets an API key, a list of IPs allowed to use it, and the batches it draws caller IDs from. A client with no IPs listed can’t make requests.

New client

When the paid period and any grace days run out, every IP of this client is refused until you renew. Leave “Paid until” empty for no end date.

Batches

Signup requests

People who asked for access from the website. Approving creates the client, its read-only login and an API key; pick its batches now or later.

Clients

Unauthorized access attempts

IPs that tried the caller-ID API without being on a client’s list. Each new address raises an alert on the dashboard and in Discord.

Blocked IPs

Blocked addresses can’t reach the API or this admin page, even if a client allows them.

Rejections

Calls the far end refused (SIP 603, 607 or 608, or hangup cause 21), reported by your dial plan when a call doesn’t connect. Rates are worked out against the caller IDs the portal handed out. A DID that keeps getting rejected usually has a reputation problem, so check its registration with Hiya, First Orion and the other registries before using it again.

Flagged DIDs

0 selected

DIDStateBatchClientsRejectionsSIP codesReputationLast rejectionOn

Call log

Every failed call your dial plan reported: who dialed what, from which caller ID, and what the carrier sent back. Click a heading to sort.

TimeClientDialedCaller IDMatchBatch RouteStatusSIPCauseCaller ID rejectionsLead

By day

Failure codes

By route

By batch

By supplier

DIDs with the most rejections

0 selected
DIDStateBatchCallsRejectedRateOn

Usage

Caller IDs handed out to each client, requests that got no caller ID, and requests refused by a client’s rate limit. Days run midnight to midnight in the portal’s time zone ().

Totals

By month

By day

Alerts

The portal checks these every minute. Every alert shows on the dashboard until someone acknowledges it, and also posts to Discord when a webhook is set. Each alert repeats at most once per cooldown period.

Open alerts

Discord

In Discord: channel settings → Integrations → Webhooks → New Webhook → Copy Webhook URL.

Counts DIDs in the client’s live batches that haven’t hit their daily limit. Only checked for clients that made requests in the last 24 hours.

For clients with area-code or state-match batches, when calls to a state fall back to rotation or get nothing.

Fires on the first request from an IP that isn’t on any client’s list, or that uses a client’s key from the wrong IP. Block it or add it to the client from the Clients page.

Counts SIP 603, 607 and 608 and hangup cause 21 per caller ID. A DID is also flagged when the reputation check below marks it as spam.

Reputation check

Saved for the provider’s licensed business API, one request per DID per check. The connection to each provider is added once its API documentation is in hand; until then flags come from rejections. Consumer lookup sites aren’t supported: they rate-limit by design and their terms forbid automated checks.

When someone requests access from the website.

When a client’s live batches are all about to rest and nothing else will be live.

One reminder before the end date, and one alert when a client’s IPs are cut off.

A short note when a scheduled batch starts.

Recent alerts

Staff & audit log

Who can sign in to the portal, what each role can do, and a record of every change.

Staff accounts

What each role can do
RoleView everythingBatches, DIDs, blocking IPs, acknowledging alertsClients, API keys, signups, alert settingsStaff accounts
OwnerYesYesYesYes
AdminYesYesYesNo
NOCYes (API keys hidden)YesNoNo
ViewerYes (API keys hidden)NoNoNo
ClientOnly its own DIDs, calls and usageNoNoNo

Audit log

WhenWhoRoleActionOnDetailsIP

Dialer setup

Point VICIdial’s carrier dial plan at the portal so every outbound call gets a caller ID from the client’s live batches.

1. API request


        

Returns just the 10-digit DID, or an empty 404 when nothing is live (the call then keeps the campaign’s default caller ID). Add &format=json to see the match details.

2. VICIdial carrier dial plan

Admin → Carriers → your carrier → Dialplan Entry. The lines after Dial() report how each call went, which feeds the Rejections page and its call log. To record the SIP code (603, 608…), set storesipcause=yes under [general] in sip.conf and reload. Without it the SIP column stays empty and only the hangup cause is stored.


        

If the portal returns nothing, the call hangs up. To dial with the campaign’s default caller ID instead, change the Hangup() under invalid to Goto(next).

3. Try it

4. Monitoring

Point Uptime Kuma (or any uptime checker) at the health address. It returns 503 if the portal can’t reach its database. Prometheus or Grafana Agent can scrape the metrics address; allow your monitoring server with METRICS_IPS or METRICS_TOKEN.


        

A client that goes over its requests-per-second limit gets HTTP 429 with an empty body, so the dial plan treats it like no caller ID.

Export

Copy it from the box below.