Package Information
Documentation
n8n-nodes-pinbridge
PinBridge community node for n8n. It publishes, schedules, and manages Pinterest workflows through the PinBridge API.
This repo targets PinBridge v1.0.2.
Features
- Credentials: PinBridge API Key + Base URL
- Boards:
- Create Board
- Delete Board
- List Boards
- Board dropdown via loadOptions
- Pins:
- Delete Pin
- Get Pin
- Get Import
- Import CSV
- Import JSON
- List Pins
- List Imports
- Publish Pin (item-by-item bulk from incoming n8n items)
- Get Pin Status (job status)
- Assets:
- Upload Image
- Upload Video
- Get Asset
- Schedules:
- Create Schedule
- Get Schedule
- List Schedules
- Cancel Schedule
- Connections:
- Start OAuth
- Complete OAuth Callback
- List connected Pinterest accounts
- Revoke connected Pinterest account
- Rate Meter:
- Get rate limit status for a connected account
- Webhooks:
- Create Webhook
- Delete Webhook
- Get Webhook
- List Webhooks
- Update Webhook
Authentication
PinBridge accepts:
X-API-Key: <key>Authorization: Bearer <jwt-or-api-key>
This node uses X-API-Key.
Installation (self-hosted n8n)
- In your n8n custom nodes environment, install the package:
npm install n8n-nodes-pinbridge
Restart n8n.
In n8n, create credentials:
- Credential type:
PinBridge API Key - Base URL:
https://api.pinbridge.io(or your self-hosted API URL) - API Key: your PinBridge API key
If you do not already have a key, create one from your PinBridge setup flow (dashboard/API, depending on your deployment).
Operations
Connections -> List
Calls GET /v1/pinterest/accounts.
Connections -> Start OAuth
Calls GET /v1/pinterest/oauth/start.
Connections -> Complete OAuth Callback
Calls GET /v1/pinterest/oauth/callback?code=...&state=....
Connections -> Revoke
Calls DELETE /v1/pinterest/accounts/{account_id}.
Boards -> List
Calls GET /v1/pinterest/boards?account_id=....
Boards -> Create
Calls POST /v1/pinterest/boards.
Boards -> Delete
Calls DELETE /v1/pinterest/boards/{board_id}?account_id=....
Assets -> Upload Image
Calls POST /v1/assets/images with multipart/form-data from an incoming n8n binary property.
Assets -> Upload Video
Calls POST /v1/assets/videos with multipart/form-data from an incoming n8n binary property.
Assets -> Get
Calls GET /v1/assets/{asset_id}.
Pins -> Publish
Calls POST /v1/pins with:
account_idboard_idtitle(max 100 chars)description(optional, max 800 chars)link_url(optional, max 2048 chars)alt_text(optional, max 500 chars)related_terms(optional)dominant_color(optional, hex)image_urlorasset_idcover_image_urlorcover_image_asset_id(optional, video pins)idempotency_key
Idempotency key defaults to {{$execution.id}}-{{$itemIndex}}.
Pins -> Get
Calls GET /v1/pins/{pin_id}.
Pins -> List
Calls GET /v1/pins.
Pins -> Get Status
Calls GET /v1/jobs/{job_id}.
Pins -> Import JSON
Calls POST /v1/pins/imports/json.
Rows can optionally include run_at as an absolute ISO 8601 timestamp with timezone offset.
Rows without run_at are queued for immediate publishing.
Pins -> Import CSV
Calls POST /v1/pins/imports/csv.run_at column is optional per row (same behavior as JSON import).
Pins -> Get Import
Calls GET /v1/pins/imports/{job_id}.
Pins -> List Imports
Calls GET /v1/pins/imports.
Optional filters:
status(queued,processing,completed,completed_with_errors,failed)source_type(json,csv)
Pins -> Delete
Calls DELETE /v1/pins/{pin_id}.
Schedules -> Create
Calls POST /v1/schedules with:
title(max 100 chars)description(optional, max 800 chars)link_url(optional, max 2048 chars)image_urlorasset_idcover_image_urlorcover_image_asset_id(optional, video pins)Run Atmust be an absolute ISO 8601 timestamp with timezone offset.
Schedules -> Get
Calls GET /v1/schedules/{schedule_id}.
Schedules -> List
Calls GET /v1/schedules.
Schedules -> Cancel
Calls POST /v1/schedules/{schedule_id}/cancel.
Rate Meter -> Get
Calls GET /v1/rate-meter?account_id=....
Webhooks -> Create
Calls POST /v1/webhooks.
Webhooks -> List
Calls GET /v1/webhooks.
Webhooks -> Get
Calls GET /v1/webhooks/{webhook_id}.
Webhooks -> Update
Calls PATCH /v1/webhooks/{webhook_id}.
Webhooks -> Delete
Calls DELETE /v1/webhooks/{webhook_id}.
Notes
- Upload Image is the recommended path when your source image is already present in the n8n workflow as binary data.
- Upload Video is the recommended path for video pins because PinBridge publishes videos from uploaded assets.
- Plan/billing errors may return structured details under
detail.error(code,message,upgrade_url). - This node intentionally focuses on publishing workflows and does not include admin, password-reset, or billing-management endpoints.
Example workflows
1) Upload a binary image and publish by asset ID
- Set
resource=Assets,operation=Upload Image. - Point
Binary Propertyto the incoming image data. - Feed the returned
idinto a second PinBridge node withresource=Pins,operation=Publish, andMedia Source=Uploaded Asset.
2) Upload a binary video and publish by asset ID
- Set
resource=Assets,operation=Upload Video. - Point
Binary Propertyto the incoming video data. - Feed the returned
idinto a second PinBridge node withresource=Pins,operation=Publish, andMedia Source=Uploaded Asset.
3) Publish one pin from image URL + link
- Set
resource=Pins,operation=Publish. - Choose Connection and Board.
- Set
Media Source=Public Image URL. - Fill
Title,Image URL, optionalLink URLandDescription. - Execute node.
4) Publish multiple pins via SplitInBatches
- Feed a list of pin payload items into
SplitInBatches. - Map fields into PinBridge Publish parameters with expressions.
- Keep default idempotency key or map your own unique key per item.
- Each incoming item publishes one pin.
5) Poll status after publish
- Use Publish output
id. - Add another PinBridge node with
resource=Pins,operation=Get StatusandPin ID={{$json.id}}. - Optional: place
Wait+ loop until status ispublishedorfailed.
6) Schedule a future publish
- Set
resource=Schedules,operation=Create. - Choose Connection and Board.
- Choose
Media Source=Uploaded AssetorPublic Image URL. - Fill
Run At,Title, and the relevant media field plus optional metadata. - Use the returned schedule ID for later status or cancellation steps.
7) Check rate limit headroom before publishing
- Set
resource=Rate Meter,operation=Get. - Choose the Connection.
- Branch in n8n based on
accountTokensAvailableorglobalTokensAvailable.
Development
npm install
npm run lint
npm run build
npm run dev