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

# Pinterest Integration for AI Agents & Workflows

> Visual discovery and social media platform for managing boards, pins, and content. Create pins, organize boards, and manage visual content for marketing and inspiration.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/pinterest.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=c9ca7e47d2546a02df4fc928090ccf13" alt="Pinterest logo" width="72" height="72" data-path="logos/pinterest.svg" />

## Overview

Add **Pinterest** to any ModuleX agent or workflow. Manage boards, board sections, and pins via the Pinterest REST API v5.

<Info>
  **Categories**: Social Media · Marketing & Email · Social Media · Automation · Development · Miscellaneous · Pinterest · **Auth**: OAuth Access Token, OAuth 2.0 · **Actions**: 4
</Info>

## Authentication

<Tabs>
  <Tab title="OAuth Access Token">
    ### OAuth Access Token

    Authenticate using your Pinterest OAuth access token. The token can be obtained through Pinterest's OAuth 2.0 flow.

    #### Required Credentials

    | Field        | Description                       | Required | Format |
    | ------------ | --------------------------------- | -------- | ------ |
    | Access Token | Your Pinterest OAuth access token | Yes      | `-`    |
  </Tab>

  <Tab title="OAuth 2.0">
    ### OAuth 2.0

    Authenticate using Pinterest OAuth 2.0 for full API access with token refresh capabilities.

    #### Required Credentials

    | Field      | Description                                         | Required | Format |
    | ---------- | --------------------------------------------------- | -------- | ------ |
    | App ID     | Your Pinterest App ID from the developer portal     | Yes      | `-`    |
    | App Secret | Your Pinterest App Secret from the developer portal | Yes      | `-`    |

    #### OAuth Configuration

    * **Authorization URL**: `https://www.pinterest.com/oauth/`
    * **Token URL**: `https://api.pinterest.com/v5/oauth/token`
    * **Scopes**: `boards:read`, `boards:write`, `pins:read`, `pins:write`, `user_accounts:read`
  </Tab>
</Tabs>

## Available Actions

<AccordionGroup>
  <Accordion title="list_boards — List all Pinterest boards for the authenticated user">
    ### Parameters

    <ResponseField name="page_size" type="integer">
      Number of boards per page (max 250) (Default: `25`)
    </ResponseField>

    <ResponseField name="bookmark" type="string">
      Cursor for pagination to get the next page
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "boards": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Boards",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "bookmark": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Bookmark"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListBoardsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_board_sections — Get sections of a Pinterest board to organize pins">
    ### Parameters

    <ResponseField name="board_id" type="string" required>
      The ID of the board to get sections from
    </ResponseField>

    <ResponseField name="page_size" type="integer">
      Number of sections per page (max 250) (Default: `25`)
    </ResponseField>

    <ResponseField name="bookmark" type="string">
      Cursor for pagination
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "board_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Board Id"
        },
        "sections": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Sections",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "bookmark": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Bookmark"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetBoardSectionsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_pin — Create a new pin on a Pinterest board with an image URL">
    ### Parameters

    <ResponseField name="board_id" type="string" required>
      The ID of the board to pin to
    </ResponseField>

    <ResponseField name="title" type="string" required>
      Title of the pin
    </ResponseField>

    <ResponseField name="media_url" type="string" required>
      URL of the image to pin
    </ResponseField>

    <ResponseField name="description" type="string">
      Description of the pin
    </ResponseField>

    <ResponseField name="link" type="string">
      Source link/URL for the pin
    </ResponseField>

    <ResponseField name="alt_text" type="string">
      Alt text for accessibility
    </ResponseField>

    <ResponseField name="board_section_id" type="string">
      ID of the board section
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Title"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Description"
        },
        "link": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Link"
        },
        "board_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Board Id"
        },
        "board_section_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Board Section Id"
        },
        "created_at": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Created At"
        },
        "pin": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Pin"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreatePinOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_pins — List pins from a Pinterest board or board section">
    ### Parameters

    <ResponseField name="board_id" type="string" required>
      The ID of the board to list pins from
    </ResponseField>

    <ResponseField name="board_section_id" type="string">
      ID of the board section (optional)
    </ResponseField>

    <ResponseField name="page_size" type="integer">
      Number of pins per page (max 250) (Default: `25`)
    </ResponseField>

    <ResponseField name="bookmark" type="string">
      Cursor for pagination
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "board_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Board Id"
        },
        "board_section_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Board Section Id"
        },
        "pins": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Pins",
          "type": "array"
        },
        "count": {
          "default": 0,
          "title": "Count",
          "type": "integer"
        },
        "bookmark": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Bookmark"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListPinsOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* `page_size` is clamped to \[1, 250].
* 401 → auth error; 404 → resource-not-found; 400 on create → likely
  invalid `media_url` or board id.

## Related integrations

<CardGroup cols={3}>
  <Card title="Klaviyo" href="/integrations/tools/klaviyo" />

  <Card title="ServiceNow" href="/integrations/tools/servicenow" />

  <Card title="Telegram Bot" href="/integrations/tools/telegram" />
</CardGroup>

## Links

* [Pinterest](https://www.pinterest.com)
