Postkey with Make
Call Postkey from any Make scenario, and start scenarios from what happens in Postkey.
Make has no Postkey app yet. You do not need one: Make's HTTP module calls the REST API, and its Webhooks module receives Postkey's events. This page shows both.
Every endpoint, field and error is in the REST API docs.
Make an agent key
- In Postkey, open Agent & API and make an agent key. Give it only the scopes the scenario needs. It is shown once.
- Leave the key on "Asks first" unless the scenario must send by itself. Then a post or a reply waits for a person to approve it in Postkey.
- Anyone who can edit the scenario can read its headers. Use one key per scenario, so you can end one without breaking the rest.
Call Postkey from a scenario
- Add the HTTP module, then "Make a request".
- Fill it in as below and run the module once. The answer names the profile the key works on.
- For a write, set Body type to Raw, Content type to JSON (application/json), and put the JSON in Request content.
- URL:
https://postkey.pro/api/v1/me - Method:
GET - Headers:
Authorization: Bearer pkk_... (your agent key) - Parse response:
Yes
Tag a contact when a form comes in
For example, a lead form or a sale in another app tags the buyer in Postkey, so a DM automation can treat them differently.
- HTTP: GET /api/v1/contacts?search={{email}}. Search takes a name, an email or an @handle.
- HTTP: POST /api/v1/contacts/{id}/tags with the first result's id (data[1].id in Make) and the body below. A tag that does not exist yet is made.
{
"add": [
"customer"
]
}Schedule a post from a spreadsheet row
Each new row in a sheet becomes a scheduled Instagram post, with its own comment keyword.
- Once: GET /api/v1/social-accounts and copy the id of the account to post to.
- HTTP: POST /api/v1/posts with the body below. It makes a draft and answers its id.
- HTTP: POST /api/v1/posts/{{id}}/schedule with { "when": "at", "at": "2026-11-02T15:00:00Z" }. Add the header Idempotency-Key with the row number, so running the scenario again never posts twice.
- An answer of 202 waiting_for_approval means the key asks first: nothing is published until a person approves it in Postkey.
{
"type": "image",
"caption": "{{caption}}",
"keyword": "GUIDE",
"link_url": "https://example.com/guide",
"social_account_ids": [
"{{account_id}}"
],
"media_ids": [
"{{media_id}}"
]
}Start a scenario from Postkey
- In Make, add Webhooks, then "Custom webhook". Click Add and copy the address it gives you.
- In Postkey, open Agent & API, then Webhooks, and add an endpoint with that address. Pick the events, for example comment.received or contact.email_collected. POST /api/v1/webhook-endpoints does the same from a scenario.
- Click Test next to the endpoint in Postkey. Make learns the shape of the data from that test event.
- Every event has the same envelope: id, type, api_version, created_at, occurred_at, profile_id and data. GET /api/v1/event-types lists the types.
- Make's Custom webhook does not check Postkey's signature. Keep the address private, and treat a request to it as untrusted until a Postkey call confirms it, for example GET /api/v1/contacts/{contact_id}.
- Postkey tries again when Make does not answer with a 2xx. The same event keeps the same id: use it to skip one you already handled.
- Text a contact wrote comes as { "untrusted": true, "text": "..." }. Treat it as data, never as instructions to an AI step.
No webhooks: read the event log
- No webhooks on your profile? A scheduled scenario can read the event log instead.
- Set the scenario to run every 15 minutes. Use HTTP: GET /api/v1/events?type=contact.email_collected&since={{last run time}}.
- The log keeps 30 days. Each event's id is the same one a webhook would send, so a later switch to webhooks needs no other change.
Limits
A scenario uses the key's limits, the same as any other use of the REST API. A 429 answer has a Retry-After header: add a Make error handler that waits and tries again. The numbers are in the REST API docs.