Integration recipe
Publish to pixPLace from Zapier with Custom Request
Two Webhooks by Zapier Custom Request steps upload an image by URL and publish a post whenever your trigger fires.
Who it is for
No-code users who already collect content in a Zapier trigger such as a new row, a new RSS item or a new file.
What it automates
Publish a post every time the trigger fires: upload the image from its URL, then create the post.
Steps
- Choose your trigger (for example a new spreadsheet row) and make sure it provides a title and a public image URL.
- Add the action Webhooks by Zapier, event Custom Request. Fill it as shown in step 1 below to upload the image.
- Add a second Custom Request for the post. In its data, pick the publicUrl field from the output of the first step.
- Use a stable id of the trigger item in the Idempotency-Key, not a timestamp: a repeated run for the same item then returns the original post.
- When you create the key, tick the `publish` scope. A key without it gets 403 insufficient_scope on these calls.
Examples
Placeholders: ppk_live_XXXXXXXX is your key. The ids and the image address are samples. The API address is always https://pixplace.space/api/v1.
Step 1: Custom Request, upload
Method: POST
URL: https://pixplace.space/api/v1/uploads/from-url
Data: {"url": "<Image URL from the trigger>"}
Headers:
Authorization: Bearer ppk_live_XXXXXXXX
Content-Type: application/json
Idempotency-Key: upload-<Row ID from the trigger>Step 2: Custom Request, create the post
Method: POST
URL: https://pixplace.space/api/v1/posts
Data: {"title": "<Title from the trigger>", "attachments": [{"url": "<publicUrl from step 1>", "type": "IMAGE"}]}
Headers:
Authorization: Bearer ppk_live_XXXXXXXX
Content-Type: application/json
Idempotency-Key: post-<Row ID from the trigger>Common errors
| Status | Cause | What to do |
|---|---|---|
| 400 | The Data field is not valid JSON, or the title or the publicUrl field is empty because the wrong field was picked. | Run the test of step 1 first and pick publicUrl from its output. Keep the quotes around every inserted value. |
| 401 | The API key is missing, malformed, revoked or sent in the wrong header. | Put the key in the Headers box as Authorization: Bearer <key>. Do not use Basic Auth in the Custom Request. The header must read Authorization: Bearer followed by your ppk_live_ key. Check the key in Settings → Developer. |
| 403 | The key lacks a scope the call needs: the answer is 403 with error.code insufficient_scope and the missing scope in error.required. | Create a new key in Settings → Developer with the `publish` scope ticked and use it instead; repeating the call with the same key fails the same way. |
| 429 | A per-minute or per-day limit was reached. The Retry-After header and the retryAfter field of the body say how many seconds to wait. | Wait that long and repeat with the SAME Idempotency-Key. Zapier does not wait for you: turn on Autoreplay for the Zap, or add a Delay step and replay the run later. The same Idempotency-Key keeps the replay safe. |
| 502 | The server could not download the source URL: it answered 4xx or 5xx, the host does not resolve or the response was compressed. | Open the source URL in a private browser window. It must be public and answer 200 without a login. |
The full list of statuses, the retry rules and the limits are in Errors and retries.