API reference · Discovery

Search public posts

GET /v1/discover/posts

Search the network itself rather than your own posts, so an agent can see what is already being said before it writes. Runs on every connected network that supports searching; the ones that cannot are named in `problems`. Two limits decide whether a result means anything on Instagram, and neither is a rate limit you can retry past. Instagram has NO keyword search: a multi-word query cannot match a hashtag and comes back as a `problems` entry rather than an empty list. And Meta caps this at 30 UNIQUE hashtags per account per 7 days, so a scouting run has a weekly budget. `sort=recent` reads Meta's recent_media edge, which only covers the last 24 hours, so an empty recent result means nothing was posted today rather than that the tag is unused. Instagram results also carry `authorHidden: true` and can never name their author: Meta strips personally identifiable information from them, so post search cannot be used to find someone to contact.

Request

Authenticate with a bearer API key. Agents calling over MCP authorise with OAuth instead and never handle the key.

curl -X GET https://api.postlake.dev/v1/discover/posts \
  -H "Authorization: Bearer $POSTLAKE_API_KEY"

Parameters

FieldTypeRequiredWhat it is
qstringYesQuery string. What to search for
modestringNoQuery string. Search the words (default) or a topic tag
sortstringNoQuery string. Best match (default) or newest first
mediaTypestringNoQuery string.
authorstringNoQuery string. Only this handle's posts
sincestringNoQuery string.
untilstringNoQuery string.
accountstringNoQuery string. Search one connection only. Omit to search them all.
cursorstringNoQuery string.
limitintegerNoQuery string. 1-100

Response

Success (200).

FieldTypeRequiredWhat it is
itemsarrayNo
cursorstringNoOpaque. Pass it back verbatim; null means the end.
problemsarrayNo

Example

{
  "items": [
    "…"
  ],
  "cursor": "…",
  "problems": [
    "…"
  ]
}

Paging

Pass limit (1 to 100, default 50) and the cursor returned by the previous page. A response with a null cursor is the last page. Every list endpoint pages the same way, so one helper covers all of them.

Limits

Reads are limited to 600 requests a minute per account. Every response carries X-RateLimit-Remaining and X-RateLimit-Reset, and a 429 includes Retry-After so a client can back off without guessing. Reads of network data (comments, followers, conversations) are metered in credits; reads of your own PostLake state are not.

Calling this from an agent

Agents do not call REST. They call tools. Over the hosted MCP server this operation is list_posts, and the agent authorises with OAuth so your API key is never pasted into a chat or seen by the model. The reply comes back in the same normalised shape you see above, which is what lets an agent reason about it without a per-network branch.

You control what any one agent may do with it: which brands it may act for, which networks it may reach, how much it may do in a day, and whether it may spend credits you bought up front. See the MCP server.

Errors

Every failure uses one shape: a stable type, a granular code, the field at fault in param, and a plain-language fix. An agent can act on it without a person reading the message. See Errors and retries.

Check the result before retrying a write. Only operations that explicitly support idempotency can safely replay an Idempotency-Key.

Common questions

Can an AI agent do this without the REST API?

Yes. Over MCP the same job is the list_posts tool. The agent authorises with OAuth, so no API key is pasted into a chat or seen by the model, and the answer comes back in the same normalised shape.

How often can I call this?

Reads are rate limited per account and every response carries X-RateLimit-Remaining and X-RateLimit-Reset. On a 429 the Retry-After header tells you how long to wait.

What happens when it fails?

You get one error shape: a stable type, a granular code you can branch on, the offending field in param, and a fix written so an agent can correct itself rather than stop. Full list on Errors and retries.

Related