Name
Organization overview
Inventory, range activity against the previous period, trends, top links and breakdowns for your whole organization.
HTTP method and path
/ api/ v6/ urlshortener/ overviewhttps:
What happens when you run it
- Read only: it does not change your organization’s data.
- The call is not charged.
What it does
Your organization’s whole URL shortener in a single call, without walking the links one by one. Days and hours are Colombia’s (America/).
inventoryis a snapshot of the moment and does not depend on the range: live links by status (expiredare active ones whose expiry has passed), aliases, those that never received a visit and lifetime visits.totalsis what happened in the range, andtoday, the same for today. The previous period is requested withcompare=: thenprevious previous,previousTotalsand, withseries,previousSeriescome, for the previous period of the same length (30 days up to today are compared with the 30 before, not with the calendar month). Without asking for it they come asnull.- Optional blocks are requested in
include. Those you do not request come asnull; those you request that have no data, empty.
include block | What it adds |
|---|---|
series | series (and previousSeries when comparing): links created, visits and uniques per day or hour, with idle points as zero. |
top | topLinks: the links with the most visits within the range, excluding deleted ones. |
recent | recent: the last 5 links created and the last 5 visited. |
dimensions | dimensions: the dimensions breakdowns summed over all your links, with the same rules as a single link’s statistics. |
heatmap | heatmap: visits by weekday and hour (168 cells). With a range longer than 31 days, it is computed over its last 31, and the response says which. |
The overview walks every link of your organization, so its quota goes by what it costs: each overview spends units from a quota of 150 per minute for your organization. It spends 2 for the query; 1 for each block that does not depend on the length of the range (inventory, today, recent, heatmap), and, for every 31 days of the range, 1 for each block that walks it (totals, series, top, dimensions, and the previous-period ones if you compare). A 30-day overview with series, spends 8; comparing, 10; a one-year one with everything, 78. Without units, 429 with Retry-After. And at most two overviews of your organization are computed at once: one arriving with two in progress waits a few seconds and, if it does not get a turn, gets 429.
Availability and prerequisites
- Published and available in the production API v6.
- Every path starts at
https:./ / developers. hablame. co - You need a Hablame API key to call it.
Authentication and permissions
- Send your API key in the
Authorizationheader with the Bearer scheme.
Who can call it: An API key with the urlshortener service enabled.
Limits and operational notes
Usage limit: 120 requests per minute.
- Windows of up to 366 days by day, and up to 31 days by hour.
- Up to 100 values per dimension and per ranking.
- Cost quota: 150 units per minute per organization (see above). Two overviews at once per organization.
Path parameters
This endpoint has no path parameters.
Query parameters
| Name | Type | Description and rules |
|---|---|---|
fromOptional | string | First day of the window, Format: |
toOptional | string | Last day of the window, Format: |
granularityOptional | string | Size of each point of the series. Allowed values: |
compareOptional | string |
Allowed values: |
includeOptional | string | Comma-separated optional blocks: Example: |
dimensionsOptional | string | Comma-separated breakdown dimensions: Example: |
topOptional | integer | How many values each dimension (and each ranking) returns. Max 100. Default value: |
HTTP headers
| Name | Type | Description and rules |
|---|---|---|
AuthorizationRequired | string | Your API key with the Bearer scheme. Example: |
Request body
This endpoint takes no request body.
Successful responses
200
Organization overview. The example is with compare=.
{
"success": true,
"data": {
"range": { "from": "2026-08-25", "to": "2026-09-23", "granularity": "day", "timezone": "America/Bogota" },
"previous": { "from": "2026-07-26", "to": "2026-08-24" },
"inventory": {
"total": 1250, "active": 1190, "expired": 40, "disabled": 20, "blocked": 0,
"aliases": 35, "neverClicked": 610, "clicks": 48210, "uniqueClicks": 30115
},
"today": { "linksCreated": 42, "clicks": 1310, "uniqueClicks": 902, "linksWithClicks": 118 },
"totals": { "linksCreated": 820, "clicks": 21400, "uniqueClicks": 14020, "linksWithClicks": 540 },
"previousTotals": { "linksCreated": 610, "clicks": 17950, "uniqueClicks": 11800, "linksWithClicks": 455 },
"series": [
{ "at": "2026-08-25", "linksCreated": 25, "clicks": 690, "uniqueClicks": 455 }
],
"previousSeries": [
{ "at": "2026-07-26", "linksCreated": 18, "clicks": 540, "uniqueClicks": 360 }
],
"topLinks": [
{
"domain": "h0b.co", "code": "promo-septiembre", "shortUrl": "https://h0b.co/promo-septiembre",
"longUrl": "https://example.com/promo", "status": "active", "expiresAt": null,
"clicks": 3120, "uniqueClicks": 2210, "lastClickAt": "2026-09-23T18:22:10Z"
}
],
"dimensions": null,
"recent": { "created": [], "clicked": [] },
"heatmap": null
},
"meta": {
"requestId": "8f0c0e2a4b1d4c8f",
"clientIp": "203.0.113.45",
"timestamp": "2026-09-23T18:30:00+00:00",
"responseTimeMs": 7.2
}
}The example values are illustrative.
Response fields
| Name | Type | Description and rules |
|---|---|---|
successAlways present | boolean | |
dataAlways present | object | |
data.Always present | object | |
data.Always present | string | Format: |
data.Always present | string | Format: |
data.Always present | string | Allowed values: |
data.Always present | string | Example: |
data.Always present | object | The previous period, or May come as |
data.Always present | string | Format: |
data.Always present | string | Format: |
data.Always present | object | Snapshot of live links. |
data.Always present | integer | |
data.Always present | integer | Active and not expired. |
data.Always present | integer | Active with their expiry already past. |
data.Always present | integer | |
data.Always present | integer | Blocked by Hablame. |
data.Always present | integer | |
data.Always present | integer | Never received a visit. |
data.Always present | integer | Lifetime visits. |
data.Always present | integer | |
data.Always present | object | What happened in a window of days. |
data.Always present | integer | Links created in the window, including those deleted afterwards. |
data.Always present | integer | Visits in the window. |
data.Always present | integer | Sum of each day’s unique visits in the window. |
data.Always present | integer | Links that received at least one visit in the window. |
data.Always present | object | What happened in a window of days. |
data.Always present | integer | Links created in the window, including those deleted afterwards. |
data.Always present | integer | Visits in the window. |
data.Always present | integer | Sum of each day’s unique visits in the window. |
data.Always present | integer | Links that received at least one visit in the window. |
data.Always present | object | What happened in a window of days. May come as |
data.Always present | integer | Links created in the window, including those deleted afterwards. |
data.Always present | integer | Visits in the window. |
data.Always present | integer | Sum of each day’s unique visits in the window. |
data.Always present | integer | Links that received at least one visit in the window. |
data.Always present | array<object> | May come as |
data.Always present | string | The day ( Example: |
data.Always present | integer | |
data.Always present | integer | |
data.Always present | integer | |
data.Always present | array<object> | May come as |
data.Always present | string | The day ( Example: |
data.Always present | integer | |
data.Always present | integer | |
data.Always present | integer | |
data.Always present | array<object> | May come as |
data.Always present | string | |
data.Always present | string | |
data.Always present | string | Format: |
data.Always present | string | Format: |
data.Always present | string | Allowed values: |
data.Always present | string | May come as Format: |
data.Always present | integer | |
data.Always present | integer | |
data.Always present | string | May come as Format: |
data.Always present | object | May come as |
data. | array<object> | |
data.Always present | string | The value as recorded ( |
data.Always present | integer | |
data.Always present | object | May come as |
data.Always present | array<object> | |
data.Always present | string | Domain of the link, lowercase. If the domain no longer belongs to your organization ( |
data.Always present | string | Link code, lowercase: 7 |
data.Always present | string | The full short URL: always Format: |
data.Always present | string | Destination URL. Format: |
data.Always present | boolean |
|
data.Always present | string |
Allowed values: |
data. | string | Whether the domain lets the link open, apart from its own Allowed values: |
data.Always present | string | Expiry in UTC, or May come as Format: |
data.Always present | string | Creation date, in UTC. Format: |
data.Always present | integer | Lifetime visits of the link. A background process consolidates them: a visit can take from seconds to a few minutes to show up. Bots and the previews generated by social networks and chat apps are not counted. |
data.Always present | integer | Sum of each day’s unique visits: the first visit of the day from each browser. Not distinct people over the life of the link. |
data.Always present | string | First visit, in UTC. May come as Format: |
data.Always present | string | Last visit, in UTC. May come as Format: |
data.Always present | array<object> | |
data.Always present | string | Domain of the link, lowercase. If the domain no longer belongs to your organization ( |
data.Always present | string | Link code, lowercase: 7 |
data.Always present | string | The full short URL: always Format: |
data.Always present | string | Destination URL. Format: |
data.Always present | boolean |
|
data.Always present | string |
Allowed values: |
data. | string | Whether the domain lets the link open, apart from its own Allowed values: |
data.Always present | string | Expiry in UTC, or May come as Format: |
data.Always present | string | Creation date, in UTC. Format: |
data.Always present | integer | Lifetime visits of the link. A background process consolidates them: a visit can take from seconds to a few minutes to show up. Bots and the previews generated by social networks and chat apps are not counted. |
data.Always present | integer | Sum of each day’s unique visits: the first visit of the day from each browser. Not distinct people over the life of the link. |
data.Always present | string | First visit, in UTC. May come as Format: |
data.Always present | string | Last visit, in UTC. May come as Format: |
data.Always present | object | May come as |
data.Always present | string | Format: |
data.Always present | string | Format: |
data.Always present | array<object> | |
data.Always present | integer | Day of the week: |
data.Always present | integer | Hour from 0 to 23, in Colombia time. |
data.Always present | integer | |
metaAlways present | object | Response metadata. |
meta.Always present | string | Unique request identifier (16 hexadecimal characters). It matches the Example: |
meta.Always present | string | IP the API saw your request come from. Useful if your API key only accepts certain networks. Example: |
meta.Always present | string | Date and time the response was built (ISO 8601 with offset). Format: |
meta.Always present | number | Time (ms) the server took to process the request. Example: |
Error codes
Every error response has the same shape: success set to false and an error object whose code says what happened. They are grouped here by kind, with the codes this endpoint can return.
Shape of an error response
| Name | Type | Description and rules |
|---|---|---|
successAlways present | boolean | Fixed value: |
metaAlways present | object | Response metadata. |
meta.Always present | string | Unique request identifier (16 hexadecimal characters). It matches the Example: |
meta.Always present | string | IP the API saw your request come from. Useful if your API key only accepts certain networks. Example: |
meta.Always present | string | Date and time the response was built (ISO 8601 with offset). Format: |
meta.Always present | number | Time (ms) the server took to process the request. Example: |
errorAlways present | object | |
error.Always present | string | Stable UPPER_SNAKE_CASE identifier. Clients branch on this value. Example: |
error. | integer | Legacy v5 numeric code, only when a bridge exists. Omitted for codes born in v6. Example: |
error.Always present | string | URL to the error documentation. Format: |
error.Always present | string | Human readable text, in English. It is for the developer log, not the end user: do not parse it. |
error.Always present | array<object> | Structured context (validation issues, affected resource). Empty array when there is no extra context. |
Validation
- 400An invalid date or a window above the limit, or a
compareorincludevalue that does not exist.
The stats range or granularity is invalid.
Message the API returns: The requested statistics range or granularity is invalid.
400VALIDATION_INVALID_PARAMETER
A parameter or a body field is not valid.
Authentication
- 401Invalid or missing credentials.
No Bearer token was sent, and every call requires one.
Message the API returns: Authentication is required. Send your API key as `Authorization: Bearer <token>`.
The API key is not recognized: wrong format, revoked or expired.
Message the API returns: The provided API key is invalid or has expired. Please verify the value sent in the `Authorization: Bearer` header.
Permissions
- 403The API key does not have the URL shortener enabled (or it is turned off for your organization), the key cannot be used from the request network, or the organization is not active.
The key is not allowed to use the service behind this endpoint.
Message the API returns: This API key is not authorized to use the requested service.
The key only works from certain networks and your IP is not one of them.
Message the API returns: This API key cannot be used from this IP address. The address we saw is in `meta.clientIp`: call from one of the networks allowed for the key, or use a key that allows this one.
Your organization is suspended or closed.
Message the API returns: The organization associated with this API key is not active. Please contact support.
Usage limits
- 429Request limit exceeded.
You exceeded your organization quota for this endpoint.
Message the API returns: You have exceeded the allowed request rate for this endpoint. Please wait before retrying.
Resource not found
This endpoint does not declare responses of this kind.
Internal errors and availability
- 504The query took too long and we stopped it. It happens with very large queries for organizations with many links: narrow it (fewer days, fewer sections, more filters). Repeating it as is does not help.
An internal query took too long and was cut off.
Other responses
This endpoint does not declare responses of this kind.
Special considerations
Unique visits are the sum of each day’s, not distinct people. Responses can be up to one minute old (X-Cache header).
Change of 2026-09-30: the previous period used to come always; now only with compare=. If you use it, add the parameter.