Appearance
All endpoints
Look up any of the 175 REST routes by resource, with its method, path and permission. Each path links to its full entry with parameters, response fields and errors.
Link Manager Pro registers 175 REST routes under one base URL. Select a path to open its full entry.
All paths are relative to the base URL /wp-json/link-manager-pro/v1. Authentication, responses and pagination are in REST API overview. The routes serve the plugin's own screens, so a release can change a route or a field; read the Changelog before you update an integration.
Permissions
Every route needs a logged-in user, except the one public route. The Permission column names what that user must have.
link_manager_pro_access: administrators, and other users the access setting allows.manage_options: administrators only.edit_postsorlink_manager_pro_access: anyone who can edit posts, or has plugin access. Thelink_manager_pro_picker_capabilityfilter can change the post capability.- Creating a short link through
POST /linksor/ai/convert-urlalso needs full plugin access, or the capability thelink_manager_pro_picker_create_capabilityfilter returns (publish_postsby default).
A request without a login gets 401. A logged-in user without the permission gets 403.
Links
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /links | link_manager_pro_access | List short links |
| GET | /links/addresses/conflicts | link_manager_pro_access | Counts other addresses that open something else, and the links they belong to. |
| GET | /links/{id} | link_manager_pro_access | Get a short link |
| GET | /links/{id}/report | link_manager_pro_access | Get a link report |
| GET | /links/{id}/report/recent | link_manager_pro_access | Returns recent clicks for a link, with paging. |
| GET | /links/{id}/report/export | link_manager_pro_access | Streams a CSV of the link clicks. |
| GET | /links/{id}/clicks | link_manager_pro_access | Get link clicks over time |
| GET | /links/{id}/categories | link_manager_pro_access | List categories of a link |
| GET | /links/{id}/tags | link_manager_pro_access | List tags of a link |
| PUT | /links/{id}/tags | link_manager_pro_access | Set tags of a link |
| PUT | /links/{id} | link_manager_pro_access | Update a short link |
| PUT | /links/{id}/categories | link_manager_pro_access | Set categories of a link |
| DELETE | /links/{id} | link_manager_pro_access | Delete a short link |
| POST | /links/{id}/addresses | link_manager_pro_access | Adds another address that opens the link. |
| POST | /links/{id}/addresses/{hash}/remove | link_manager_pro_access | Removes one other address from the link. |
| POST | /links/{id}/addresses/{hash}/claim | link_manager_pro_access | Makes an other address open this link instead of what it opens now. |
| POST | /links/{id}/addresses/{hash}/keep | link_manager_pro_access | Keeps what the other address opens now and stops counting it as a conflict. |
| POST | /links | edit_posts or link_manager_pro_access, plus the create right | Create a short link. Without the create right it answers 403 lmp_cannot_create_links |
Link rules
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /links/{id}/rules | link_manager_pro_access | Lists the redirect rules of a link. |
| POST | /links/{id}/rules | link_manager_pro_access | Adds one redirect rule to a link. |
| PUT | /links/{id}/rules/sync | link_manager_pro_access | Replaces all rules of a link in one step. |
| PUT | /links/{id}/rules/{ruleId} | link_manager_pro_access | Updates one rule of a link. |
| DELETE | /links/{id}/rules/{ruleId} | link_manager_pro_access | Deletes one rule of a link. |
Categories
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /categories | link_manager_pro_access | List categories |
| POST | /categories | link_manager_pro_access | Create a category |
| PUT | /categories/{id} | link_manager_pro_access | Update a category |
| DELETE | /categories/{id} | link_manager_pro_access | Delete a category |
Tags
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /tags | link_manager_pro_access | List tags |
| POST | /tags | link_manager_pro_access | Create a tag |
| PUT | /tags/{id} | link_manager_pro_access | Update a tag |
| DELETE | /tags/{id} | link_manager_pro_access | Delete a tag |
Affiliates
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /affiliates | link_manager_pro_access | List affiliates |
| GET | /affiliates/{id}/report | link_manager_pro_access | Returns the report for one affiliate. |
| GET | /affiliates/{id}/report/recent | link_manager_pro_access | Returns recent clicks for an affiliate, with paging. |
| GET | /affiliates/{id}/report/export | link_manager_pro_access | Streams a CSV of the affiliate clicks. |
| GET | /affiliates/{id}/clicks | link_manager_pro_access | Returns daily clicks for an affiliate. |
| GET | /affiliates/{id}/posts | link_manager_pro_access | Lists posts that send clicks to an affiliate. |
| GET | /affiliates/{id}/keywords | link_manager_pro_access | Lists the affiliate keywords with the posts that contain them. |
| GET | /affiliates/{id}/links | link_manager_pro_access | Lists short links that point to the affiliate domain. |
| POST | /affiliates | link_manager_pro_access | Create an affiliate |
| PUT | /affiliates/{id} | link_manager_pro_access | Update an affiliate |
| DELETE | /affiliates/{id} | link_manager_pro_access | Delete an affiliate |
Campaigns
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /campaigns | link_manager_pro_access | Lists campaigns with filters and paging. |
| GET | /campaigns/all | link_manager_pro_access | Lists every stored campaign. |
| GET | /campaigns/sync/preview | link_manager_pro_access | Lists campaign values found on links that no stored campaign covers. |
| POST | /campaigns | link_manager_pro_access | Creates a campaign. |
| PUT | /campaigns/{campaign} | link_manager_pro_access | Updates a campaign. |
| DELETE | /campaigns/{campaign} | link_manager_pro_access | Deletes a campaign. |
| GET | /campaigns/{name}/report | link_manager_pro_access | Returns the report for one campaign. |
| GET | /campaigns/{name}/report/export | link_manager_pro_access | Streams a CSV of the campaign clicks. |
| GET | /campaigns/{name}/links | link_manager_pro_access | Lists the short links of a campaign, with paging. |
| GET | /campaigns/{name}/clicks | link_manager_pro_access | Returns daily clicks for a campaign, optionally split by source. |
| GET | /campaigns/{name}/utm-breakdown | link_manager_pro_access | Returns the UTM breakdown of a campaign. |
| GET | /campaigns/{name}/countries | link_manager_pro_access | Returns clicks by country for a campaign. |
UTM templates
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /utm-templates | link_manager_pro_access | Lists saved UTM templates. |
| POST | /utm-templates | link_manager_pro_access | Creates a UTM template. |
| PUT | /utm-templates/{id} | link_manager_pro_access | Updates a UTM template. |
| DELETE | /utm-templates/{id} | link_manager_pro_access | Deletes a UTM template. |
Redirects
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /redirects | link_manager_pro_access | List redirects |
| GET | /redirects/review/sources | link_manager_pro_access | Lists redirects whose stored source address needs a look. |
| POST | /redirects/{id}/resave | link_manager_pro_access | Rewrites one redirect key so it matches its stored address again. |
| POST | /redirects | link_manager_pro_access | Create a redirect |
| GET | /redirects/{id} | link_manager_pro_access | Get a redirect |
| PUT | /redirects/{id} | link_manager_pro_access | Update a redirect |
| DELETE | /redirects/{id} | link_manager_pro_access | Delete a redirect |
| POST | /redirects/review/adopt | manage_options | Records an earlier site address so its redirects match here. |
| POST | /redirects/review/forget | manage_options | Removes a recorded earlier site address. |
Stats
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /stats | link_manager_pro_access | Returns dashboard totals for a date range and for all time, plus link health counts. |
| GET | /stats/clicks | link_manager_pro_access | Returns daily total and unique clicks for the dashboard range. |
| GET | /stats/heatmap | link_manager_pro_access | Returns clicks by weekday and hour for the dashboard range. |
| GET | /stats/countries | link_manager_pro_access | Returns clicks by country for the dashboard range. |
| GET | /stats/links | link_manager_pro_access | Returns the top short links by recorded clicks. |
| GET | /stats/posts | link_manager_pro_access | Returns the top posts by clicks on the links they contain. |
| GET | /stats/affiliates | link_manager_pro_access | Returns the top 10 affiliates by recorded clicks. |
| GET | /stats/top | link_manager_pro_access | Returns the largest rows for one tab: links, campaigns, partners or posts. |
Link Health
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /link-health | link_manager_pro_access | Lists link health issues with counts, last scan and sitemap state. |
| POST | /link-health/scan | link_manager_pro_access | Scans one batch of posts for broken links and returns the next offset. |
| POST | /link-health/sitemap | link_manager_pro_access | Reads the sitemap again now. |
| PUT | /link-health/{id}/status | link_manager_pro_access | Sets an issue to active, ignored or fixed. |
| POST | /link-health/{id}/redirect | link_manager_pro_access | Fixes an issue by creating a redirect. |
| DELETE | /link-health/{id} | link_manager_pro_access | Deletes one issue. |
| DELETE | /link-health | link_manager_pro_access | Clears the issues of a tab. |
Link Audit
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /link-audit | link_manager_pro_access | Lists audited posts with inbound and outbound link counts; filters, sort and paging. |
| GET | /link-audit/stats | link_manager_pro_access | Returns summary counts of the audit. |
| GET | /link-audit/slugs-to-review | link_manager_pro_access | Lists short link slugs saved before the current slug rule. |
| GET | /link-audit/coverage-score | link_manager_pro_access | Returns the internal link coverage score with its history. |
| POST | /link-audit/scan | link_manager_pro_access | Scans one batch of posts for the audit and returns the next offset. |
| POST | /link-audit/scan/{id} | link_manager_pro_access | Rescans one post for the audit. |
| GET | /link-audit/{id}/suggestions | link_manager_pro_access | Suggests internal links for one post. |
| POST | /link-audit/insert-link | link_manager_pro_access | Adds an internal link to a post around the anchor text you send. |
Link Equity
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /link-equity | link_manager_pro_access | Returns the link equity report by URL or domain, with search and paging. |
| GET | /link-equity/stats | link_manager_pro_access | Returns the link equity summary. |
| POST | /link-equity/scan | link_manager_pro_access | Recomputes link equity in one batch and returns the next offset. |
Webhooks
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /webhooks | manage_options | Lists webhooks. |
| POST | /webhooks | manage_options | Creates a webhook and returns its signing secret. |
| GET | /webhooks/{id}/deliveries | manage_options | Lists the latest 50 deliveries of a webhook. |
| GET | /webhooks/{id}/secret | manage_options | Returns the signing secret of a webhook. |
| POST | /webhooks/{id}/test | manage_options | Sends a test delivery to a webhook. |
| POST | /webhooks/{id}/regenerate-secret | manage_options | Creates a new signing secret for a webhook. |
| PUT | /webhooks/{id} | manage_options | Updates a webhook. |
| DELETE | /webhooks/{id} | manage_options | Deletes a webhook. |
Editor and AI
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /editor/optimization/{id} | edit_posts or link_manager_pro_access | Returns the internal link count and recommendation for a post in the editor. |
| POST | /ai/detect-urls | edit_posts or link_manager_pro_access | Finds URLs in post content that can become short links. |
| POST | /ai/convert-url | edit_posts or link_manager_pro_access | Returns the short link for a URL and its masked URL. It creates one only with the create right, otherwise it answers 403 lmp_cannot_create_links when none exists. |
| POST | /ai/dismiss-url | edit_posts or link_manager_pro_access | Remembers a URL as dismissed for a post. |
| POST | /ai/analyze | edit_posts or link_manager_pro_access | Returns link suggestions for post content. |
Content scan
| Method | Path | Permission | What it does |
|---|---|---|---|
| POST | /scan | link_manager_pro_access | Masks external links in one batch of posts and returns the cursor for the next batch. |
| GET | /scan/preview | link_manager_pro_access | Returns how many posts a scan would check, by status. |
Settings
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /settings/general | manage_options | Reads the general settings. |
| POST | /settings/general | manage_options | Saves the general settings. |
| GET | /settings/link-intelligence | manage_options | Reads the link intelligence settings. |
| POST | /settings/link-intelligence | manage_options | Saves the link intelligence settings. |
| GET | /settings/notifications | manage_options | Reads the notification settings. |
| POST | /settings/notifications | manage_options | Saves the notification settings. |
| GET | /settings/advanced | manage_options | Reads the advanced settings. |
| POST | /settings/advanced | manage_options | Saves the advanced settings. |
| GET | /settings/integrations | manage_options | Reads the integration settings. |
| POST | /settings/integrations | manage_options | Saves the integration settings. |
| GET | /settings/integrations/status | manage_options | Reports which supported plugins are detected. |
| GET | /settings/integrations/seo/status | manage_options | Reports which SEO plugins can be imported from. |
| GET | /settings/integrations/seo/{source}/analyze | manage_options | Counts the redirects an SEO plugin import would bring in. |
| POST | /settings/integrations/seo/{source}/import | manage_options | Imports one batch of redirects from an SEO plugin. |
| GET | /settings/redirection | manage_options | Reads the redirection settings. |
| POST | /settings/redirection | manage_options | Saves the redirection settings. |
| GET | /settings/tracking | manage_options | Reads the tracking settings. |
| POST | /settings/tracking | manage_options | Saves the tracking settings. |
| GET | /settings/autolink | manage_options | Reads the auto-link settings. |
| POST | /settings/autolink | manage_options | Saves the auto-link settings. |
| GET | /settings/disclosure | manage_options | Reads the disclosure settings. |
| POST | /settings/disclosure | manage_options | Saves the disclosure settings. |
| GET | /settings/post-types | manage_options | Lists public post types. |
| GET | /settings/ai | manage_options | Reads the AI settings. |
| POST | /settings/ai | manage_options | Saves the AI settings. |
| POST | /settings/ai/test | manage_options | Tests the configured AI provider. |
| GET | /settings/geoip/status | manage_options | Reports the state of the country database. |
| POST | /settings/geoip/download | manage_options | Downloads the country database. |
| POST | /settings/geoip/remove | manage_options | Removes the country database. |
| GET | /settings/license | manage_options | Used by the license screen. |
| POST | /settings/license/activate | manage_options | Used by the license screen. |
| POST | /settings/license/deactivate | manage_options | Used by the license screen. |
| POST | /settings/license/refresh | manage_options | Used by the license screen. |
| POST | /settings/license/remove | manage_options | Used by the license screen. |
| GET | /settings/prefix-links | manage_options | Summarizes post links that use a previous short link prefix. |
| GET | /settings/prefix-links/review | manage_options | Shows the next posts and what would change in each. |
| POST | /settings/prefix-links/apply | manage_options | Updates those post links in a batch. |
| GET | /settings/prefix-links/page | manage_options | Lists the next page of posts with links to move, with the changes in each. |
| POST | /settings/prefix-links/apply-posts | manage_options | Updates the post links in the posts you pick. |
Backup
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /settings/backup/export/csv | manage_options | Streams a CSV of all short links. |
| POST | /settings/backup/export/start | manage_options | Starts a backup export job. |
| POST | /settings/backup/export/progress | manage_options | Runs the next batch of an export job. |
| POST | /settings/backup/import/start | manage_options | Starts a backup import job. |
| POST | /settings/backup/import/chunk | manage_options | Receives one part of an uploaded backup file. |
| POST | /settings/backup/import/progress | manage_options | Runs the next batch of an import job. |
| GET | /settings/backup/import/active | manage_options | Returns the import job that is running, if any. |
| POST | /settings/backup/import/cancel | manage_options | Cancels an import job. |
Migration
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /settings/migration/prompt | link_manager_pro_access | Returns whether to offer a migration from a detected plugin. |
| GET | /settings/migration/detect | manage_options | Detects plugins that links can be migrated from. |
| POST | /settings/migration/dismiss | manage_options | Hides the migration offer for one source. |
| POST | /settings/migration/start | manage_options | Starts a migration job for the chosen items. |
| GET | /settings/migration/status | manage_options | Returns the status of a migration job. |
| POST | /settings/migration/process | manage_options | Runs the next batch of a migration job. |
| POST | /settings/migration/cancel | manage_options | Cancels a migration job. |
| GET | /settings/migration/shortcodes | manage_options | Counts posts that still hold shortcodes of an imported plugin. |
| GET | /settings/migration/shortcodes/scan | manage_options | Shows the next posts and what replacing would change. |
| POST | /settings/migration/shortcodes/replace | manage_options | Replaces those shortcodes in the next posts. |
Onboarding
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /onboarding | link_manager_pro_access | Returns the setup state and a snapshot of the settings it covers. |
| POST | /onboarding/status | link_manager_pro_access | Resets the setup state to pending. |
| POST | /onboarding/step | link_manager_pro_access | Marks one setup step complete. |
| POST | /onboarding/scan | link_manager_pro_access | Scans one batch of posts during setup. |
| POST | /onboarding/settings | manage_options | Saves the general, tracking and redirection settings chosen during setup. |
| POST | /onboarding/complete | manage_options | Marks setup as finished. |
| POST | /onboarding/skip | manage_options | Marks setup as skipped. |
System
| Method | Path | Permission | What it does |
|---|---|---|---|
| GET | /system-info | manage_options | Returns environment, theme and plugin details for support, without secrets. |
| GET | /wp-terms | link_manager_pro_access | Lists WordPress categories and tags for the auto-link targeting picker. |
Public tracking
| Method | Path | Permission | What it does |
|---|---|---|---|
| POST | /track/internal-click | None (public) | Records a click on a link inside your own content. The guards are listed below. |
Public tracking guards
POST /track/internal-click is the only route that needs no login. It reads source_post_id, lmp_nonce, target_url and anchor_text. These guards decide what happens:
- It records nothing, and still answers
{"ok": true}, unless the tracking settingstrack_clicksandtrack_internal_clicksare bothyes. - A logged-in visitor needs
lmp_nonce, a nonce made for the actionlmp_internal_click_plus the source post ID. Without a valid one it answers 403invalid_nonce. A logged-out request skips the nonce check. Asource_post_idof 0 or less answers 403invalid_noncefor everyone. - It needs an
Originheader, or aRefererwhen there is noOrigin, from the same host as the site. Thewww.prefix is ignored. Otherwise it answers 403invalid_origin. - It allows 30 hits per minute for each visitor IP address and source post. Hits over that limit answer
{"ok": true}and are not recorded.