Contents
On this page

Start Import - Plugixa Permalink Manager

POST /plugixa-permalink-manager/v1/import/{source}

Start a job that imports another plugin’s addresses, patterns, settings or redirects.

Needs the plugixa_permalink_manager_import_export capability.

An import is a preview unless you send "dry_run": false. Leaving dry_run out previews.

Starting it returns a job and changes nothing yet: call Tick Job until its status is no longer queued or running. See jobs.

Request

POST https://your-site.example/wp-json/plugixa-permalink-manager/v1/import/pmp

Path parameters

Name Type Description
source string One of the sources below

Request body

Content type: application/json

Field Type Required Description
dry_run boolean No Defaults to true.
settings boolean No pmp only: also import its settings. Defaults to true.
structures boolean No pmp only: also import its patterns. Defaults to true.
Source Imports from Edition
pmp Permalink Manager (Lite or Pro) Free
custom-permalinks Custom Permalinks Free
rank-math The exact-match redirects of Rank Math Pro
yoast The exact-match redirects of Yoast SEO Premium Pro
seopress The exact-match redirects of SEOPress Pro

Other fields are ignored. The job’s type is import-pmp, import-custom-permalinks or import-seo-redirects, and it can be undone like a tool run. See Import.

{
  "dry_run": true,
  "settings": true,
  "structures": true
}

Responses

201 Created. data is the new job.

{
  "success": true,
  "data": {
    "id": 62,
    "type": "import-pmp",
    "status": "queued",
    "dry_run": true,
    "params": {
      "settings": true,
      "structures": true,
      "keep_old": true
    },
    "total": 52,
    "processed": 0,
    "changed": 0,
    "skipped": 0,
    "failed": 0,
    "samples": [],
    "undoable": false,
    "last_error": null,
    "created_at": "2026-11-12 09:30:00",
    "finished_at": null
  }
}
Field Type Meaning
data.id integer The job id: tick it with Tick Job
data.type string What the job does
data.status string queued, running, done, failed or cancelled
data.dry_run boolean true for a preview that changes nothing
data.params object The parameters as the job will use them, after cleaning
data.total integer Items the job expects to go through, counted when it was created
data.processed integer Items gone through so far
data.changed integer Items changed, or that a preview would change
data.skipped integer Items left alone
data.failed integer Items that could not be changed
data.samples array Up to 500 changed or failed items: status, kind, id, title, before, after and message
data.undoable boolean Whether Undo Job will accept it
data.last_error string|null Why a failed job stopped
data.created_at string UTC datetime
data.finished_at string|null UTC datetime, once it has stopped

Errors

Status Code When
404 plugixa_permalink_manager_unknown_source No such source on this site. The SEO sources need Pro.
422 plugixa_permalink_manager_nothing_to_import The source has no data on this site.
500 plugixa_permalink_manager_db_error The job could not be created.

Plus the errors every endpoint can return.

Examples

curl -s -X POST "https://your-site.example/wp-json/plugixa-permalink-manager/v1/import/pmp" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"dry_run":true,"settings":true,"structures":true}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-permalink-manager/v1/import/pmp');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'admin:' . getenv('WP_APP_PASSWORD'),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'dry_run'    => true,
        'settings'   => true,
        'structures' => true,
    ]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const auth = 'Basic ' + btoa(`admin:${process.env.WP_APP_PASSWORD}`);
const response = await fetch('https://your-site.example/wp-json/plugixa-permalink-manager/v1/import/pmp', {
  method: 'POST',
  headers: {
    'Authorization': auth,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ dry_run: true, settings: true, structures: true }),
});
const { data } = await response.json();

Quick Links

Share