> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getmcp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import from Postman

> Parse a Postman 2.1 collection and import the selected requests as tools.

This endpoint accepts a Postman 2.1 collection JSON and runs the same two-phase parse-then-commit flow as the OpenAPI / Swagger importers.

<Note>
  Postman folders become **tags** on the resulting tools, and `{{variable}}` placeholders that resolve against the collection's environment / global variables are substituted at parse time. Unresolved placeholders are left in the URL so you can wire them up to tool inputs later.
</Note>

<Note>
  Phase 1 (no `commit` flag) parses the collection and returns candidates with `temp_id`s. Phase 2 (`commit: true`) takes `selected_temp_ids` and writes the chosen tools. Imports default to `draft` so nothing goes live without a review pass.
</Note>

## Path Parameters

<ParamField path="server_id" type="string" required>
  The UUID of the server to import into (e.g. `836995ae-1cff-41ec-823e-a4f07ccca3a0`). Numeric IDs are also accepted for backwards compatibility.
</ParamField>

## Body Parameters

<ParamField body="source" type="string" default="text">
  Where the collection content comes from. One of: `text` (use `content`), `url` (use `url`).
</ParamField>

<ParamField body="content" type="string">
  Raw Postman collection JSON. Required when `source` is `text`. Hard cap of 10 MB.
</ParamField>

<ParamField body="url" type="string">
  Public URL to fetch the collection from (Postman's "raw" share link works). Required when `source` is `url`.
</ParamField>

<ParamField body="commit" type="boolean" default="false">
  When `false` (default), parse and return candidates only. When `true`, persist the candidates listed in `selected_temp_ids`.
</ParamField>

<ParamField body="selected_temp_ids" type="array">
  Array of `temp_id` strings identifying which requests to create as tools. Required when `commit` is `true`.
</ParamField>

<ParamField body="on_conflict" type="string" default="skip">
  Slug-collision policy. One of: `skip`, `duplicate`.
</ParamField>

<ParamField body="imported_status" type="string" default="draft">
  Status for newly created tools. One of: `draft`, `active`.
</ParamField>

<RequestExample>
  ```bash cURL — Phase 1 (parse) theme={null}
  curl --request POST \
       --url https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-postman \
       --header 'Authorization: Bearer gmcp_your_api_key' \
       --header 'content-type: application/json' \
       --data @./my-collection.json
  ```

  ```bash cURL — Phase 2 (commit) theme={null}
  curl --request POST \
       --url https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-postman \
       --header 'Authorization: Bearer gmcp_your_api_key' \
       --header 'content-type: application/json' \
       --data '{
         "source": "url",
         "url": "https://www.postman.com/collections/abc123",
         "commit": true,
         "selected_temp_ids": ["pm_0", "pm_4", "pm_5"],
         "imported_status": "active"
       }'
  ```

  ```python Python theme={null}
  import json, requests

  with open("./my-collection.json") as f:
      collection = f.read()

  url = "https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-postman"
  headers = {
      "Authorization": "Bearer gmcp_your_api_key",
      "Content-Type": "application/json",
  }

  parse = requests.post(url, headers=headers, json={
      "source": "text",
      "content": collection,
  }).json()

  selected = [c["temp_id"] for c in parse["candidates"] if "users" in c.get("tags", [])]

  commit = requests.post(url, headers=headers, json={
      "source": "text",
      "content": collection,
      "commit": True,
      "selected_temp_ids": selected,
      "imported_status": "active",
  }).json()
  ```

  ```javascript JavaScript theme={null}
  const url = "https://yoursite.com/wp-json/getmcp/v1/servers/836995ae-1cff-41ec-823e-a4f07ccca3a0/tools/import-postman";
  const headers = {
    "Authorization": "Bearer gmcp_your_api_key",
    "Content-Type": "application/json",
  };
  const collection = await (await fetch("./my-collection.json")).text();

  const parse = await (await fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify({ source: "text", content: collection }),
  })).json();

  const commit = await (await fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify({
      source: "text",
      content: collection,
      commit: true,
      selected_temp_ids: parse.candidates.map(c => c.temp_id),
    }),
  })).json();
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK — Phase 1 (parse) theme={null}
  {
    "candidates": [
      {
        "temp_id": "pm_0",
        "name": "Get User",
        "slug": "get_user",
        "description": "Fetch a user by ID.",
        "endpoint_url": "https://api.example.com/v1/users/{{id}}",
        "http_method": "GET",
        "input_schema": {
          "type": "object",
          "properties": {
            "id": { "type": "string", "description": "id" }
          },
          "required": ["id"]
        },
        "headers": {
          "Accept": "application/json"
        },
        "tags": ["Users"]
      }
    ],
    "info": {
      "title": "My Collection",
      "version": "2.1.0"
    }
  }
  ```

  ```json 200 OK — Phase 2 (commit) theme={null}
  {
    "created": [
      { "tool_id": 44, "uuid": "5376af81-6bb8-4b01-800c-508d7672e394", "name": "Get User", "slug": "get_user" }
    ],
    "skipped": [],
    "failed": []
  }
  ```

  ```json 400 Bad Request theme={null}
  {
    "code": "invalid_spec",
    "message": "Not a Postman 2.1 collection.",
    "data": { "status": 400 }
  }
  ```

  ```json 403 Forbidden — tier limit theme={null}
  {
    "code": "tier_limit_import_method",
    "message": "Importing tools from POSTMAN is not available on your FREE plan.",
    "data": {
      "status": 403,
      "tier": "free",
      "upgrade_url": "https://getmcp.com/pricing"
    }
  }
  ```
</ResponseExample>

## Status Codes

| Code  | Meaning                                                    |
| ----- | ---------------------------------------------------------- |
| `200` | Collection parsed (phase 1) or commit completed (phase 2). |
| `400` | Malformed collection, empty content, or unfetchable URL.   |
| `402` | 14-day trial expired and no active license.                |
| `403` | Current license tier does not allow Postman import.        |
| `404` | Server not found.                                          |
