PATCH/api/v6/urlshortener/links/{domain}/{code}

Update a short link

Change the destination, the status or the expiry. Domain and code do not change.

Scope and limits

Scope

API key with the urlshortener service enabled and the urlshortener.write capability granted

Usage limit

35 requests per second

Changes the destination URL (longUrl, revalidated as on creation), the status (status) or the expiry (expiresAt). Send only what you want to change; at least one field is required. Domain and code cannot change: that would break every short URL already handed out. Editing is free.

Every change is recorded with the previous value, the new one and who made it (the API key or the portal user). A link blocked by Hablame (status: blocked) cannot be edited: it returns 409 LINK_BLOCKED.

Keys it does not recognize are ignored: a body like {"active": false} (from the previous contract) changes nothing and returns 400 NOTHING_TO_UPDATE. To disable, send {"status": "disabled"}.

Requires a key that can write

Besides the urlshortener service, the API key needs the urlshortener.write capability, which only an owner or an administrator of your organization can grant when creating the key. Without it, the key lists and reads links, statistics, the overview, the domains and the pricing, and gets 403 AUTH_CAPABILITY_NOT_ALLOWED here.

Path parameters

domain
stringrequired
Domain of the link, as the API returns it in domain. Compared in lowercase. It names the link that answers at that short URL today; for one on a domain that no longer belongs to your organization (domainStatus: released), add domainStatus=released.
code
stringrequired
Code or alias of the link. Compared in lowercase.

Query parameters

domainStatus
stringoptional
With released, the link is the one on a domain that no longer belongs to your organization (the one the list returns with domainStatus: released), even if that name is today another domain with the same code. Without it, domain names the domain that has that name today. Any other value returns 400 VALIDATION_INVALID_PARAMETER.
released

Request body

application/json
longUrl
stringoptional
New destination URL. Same rules as on creation.
status
stringoptional
disabled stops redirecting right away (the visitor gets 404); active turns it back on.
activedisabled
expiresAt
stringoptional
New expiry, always in the future. Without a time zone it is read in Colombia time (-05:00). null or an empty string clears it.
{
  "status": "disabled"
}

Responses

200

Link updated, as it ended up.

{
  "success": true,
  "data": {
    "domain": "h0b.co",
    "code": "a1b2c3d",
    "shortUrl": "https://h0b.co/a1b2c3d",
    "longUrl": "https://example.com/landing?utm_source=sms",
    "isAlias": false,
    "status": "active",
    "domainStatus": "active",
    "expiresAt": null,
    "createdAt": "2026-09-23T15:04:05Z",
    "clicks": 0,
    "uniqueClicks": 0,
    "firstClickAt": null,
    "lastClickAt": null
  },
  "meta": {
    "requestId": "8f0c0e2a4b1d4c8fae2b7a91e0c5d3f6",
    "timestamp": "2026-09-23T18:30:00+00:00",
    "responseTimeMs": 7.2
  }
}
400

Nothing to change was sent, a field has the wrong type, or a value is invalid.

401

Invalid or missing credentials.

403

The API key does not have the URL shortener enabled (or it is turned off for your organization), lacks the urlshortener.write capability to create and edit links, cannot be used from the request network, or the organization is not active.

404

No link of your organization with that domain and code (or it was deleted). A link from another organization also returns 404: its existence is not disclosed.

409

The link is blocked by Hablame and cannot be changed.

429

Request limit exceeded.

Possible errors

Codes this endpoint can return in error.code. The full detail lives in the catalog.

See the full catalog
PATCH /api/v6/urlshortener/links/{domain}/{code}
curl -X PATCH 'https://developers.hablame.co/api/v6/urlshortener/links/h0b.co/a1b2c3d' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer hk_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"status":"disabled"}'

Try-It

Run the request against the real API with your own API key.

The key is used only in your browser for this request. It is not stored nor sent anywhere else.

Parameters

Domain of the link, as the API returns it in domain. Compared in lowercase. It names the link that answers at that short URL today; for one on a domain that no longer belongs to your organization (domainStatus: released), add domainStatus=released.

Code or alias of the link. Compared in lowercase.

With released, the link is the one on a domain that no longer belongs to your organization (the one the list returns with domainStatus: released), even if that name is today another domain with the same code. Without it, domain names the domain that has that name today. Any other value returns 400 VALIDATION_INVALID_PARAMETER.

Request body

New destination URL. Same rules as on creation.

disabled stops redirecting right away (the visitor gets 404); active turns it back on.

New expiry, always in the future. Without a time zone it is read in Colombia time (-05:00). null or an empty string clears it.

PATCH https://developers.hablame.co/api/v6/urlshortener/links/h0b.co/a1b2c3d

Response

You have not sent a request yet.