Mobile feed

The mobile feed holds the posts a user forwarded to Brandsearch from the Instagram or Facebook app: reels, photos and videos, as they appear in the Mobile feed tab of Swipe Files. These endpoints let a tool do by code what the user does by hand in that tab: read their posts, keep folders, file a post in a folder, and take a post out of the feed.

You choose the folders. Brandsearch files nothing by itself: your automation (Zapier, Make, n8n, your own code) or your AI assistant reads the new posts and decides where each one goes.

Instagram and Facebook. Posts and folders belong to one platform, given by platform. A post goes only in a folder of its own platform. Facebook is in early access in the app: until it opens to everyone, only accounts with that access see Facebook posts and folders. Other accounts get Instagram only, and asking for Facebook by name is a 403 feature_not_available.


Watch for new posts

To act on every post a user forwards, ask for the posts received since the last one you handled, every few minutes:

  1. List the feed once (GET /v1/swipe/mobile-feed/posts) and keep the received_at of the newest post.
  2. On each run, ask for GET /v1/swipe/mobile-feed/posts?received_after=<that received_at>. Only newer posts come back, newest first.
  3. Handle them, then keep the newest received_at for the next run.

Reading the feed is free: it does not count against your quota, so checking every few minutes costs nothing. Rate limits still apply.


Pricing and limits

  • Reads are free: listing and reading posts and folders do not count against your quota (X-Quota-Charged: false).
  • Writes count as 1 request and cost 0 credits.
  • Creating, renaming and deleting a folder each have their own limit of 1 request per second and 5 per minute per key, separate from the other Swipe folders' limits.
  • Filing a post, taking it out of a folder, and taking it out of the feed share a separate limit of 2 requests per second and 60 per minute per key, enough to sort a backlog one post at a time.

The post record

  • Name
    id
    Type
    string
    Description

    The post's identifier. Every endpoint below takes it.

  • Name
    platform
    Type
    string
    Description

    instagram or facebook.

  • Name
    type
    Type
    string
    Description

    reel, or post for a photo or a video that is not a reel.

  • Name
    media_format
    Type
    string
    Description

    video or image. null when we could not tell.

  • Name
    received_at
    Type
    string
    Description

    When Brandsearch received the post (ISO 8601, UTC, to the millisecond). Pass it back as received_after to get only newer posts.

  • Name
    posted_at
    Type
    string
    Description

    When the post was published on Instagram or Facebook (ISO 8601, UTC). null when unknown.

  • Name
    caption
    Type
    string
    Description

    The post's caption. null when it has none.

  • Name
    hashtags
    Type
    string[]
    Description

    The hashtags in the caption, # included.

  • Name
    media_url
    Type
    string
    Description

    The video or image. When we keep a copy, this is our copy, and it expires 3 days after the response like every media URL in the API. Otherwise it is the address Instagram or Facebook serves the media from: during the first few minutes after the post arrives, until our copy is ready, and for most Facebook posts. null when we hold no media for the post.

  • Name
    permalink
    Type
    string
    Description

    The post on Instagram or Facebook. null when unknown.

  • Name
    duration_seconds
    Type
    number
    Description

    Length of a video, in seconds.

  • Name
    like_count
    Type
    integer
    Description

    Likes. On Facebook, the reactions when Facebook gives no like count. null when unknown, including when the author hid them.

  • Name
    comment_count
    Type
    integer
    Description

    Comments.

  • Name
    view_count
    Type
    integer
    Description

    Views, or plays when Instagram shows no view count; plays on Facebook. null when unknown.

  • Name
    share_count
    Type
    integer
    Description

    Shares. Facebook only; always null on Instagram.

  • Name
    author
    Type
    object
    Description

    The account that published the post: id, username, name, is_verified, follower_count, profile_pic_url. On Facebook, username, is_verified and follower_count are null. null when unknown.

  • Name
    folder_ids
    Type
    string[]
    Description

    The user's folders holding the post.

  • Name
    dashboard_url
    Type
    string
    Description

    The post's page in the Brandsearch app.


Post filters

  • Name
    platform
    Type
    string
    Description

    instagram or facebook. Omit for both (Facebook only with early access).

  • Name
    type
    Type
    string
    Description

    reel or post.

  • Name
    media_format
    Type
    string
    Description

    video or image.

  • Name
    folder_id
    Type
    string
    Description

    Only the posts filed in this folder. Another user's folder, or one that does not exist, is a 404 swipe_folder_not_found.

  • Name
    q
    Type
    string
    Description

    Words from the caption or title, a hashtag, or the name of the account the post came from. The last word may be the start of a word. Max 200 characters.

  • Name
    received_from
    Type
    string
    Description

    Posts received on or after this date. YYYY-MM-DD means the start of that day in UTC; an ISO 8601 timestamp or unix seconds is an exact moment.

  • Name
    received_to
    Type
    string
    Description

    Posts received on or before this date. YYYY-MM-DD includes that whole day in UTC.

  • Name
    received_after
    Type
    string
    Description

    Posts received strictly after this moment. Pass the received_at of the newest post you have handled.

  • Name
    sort_by
    Type
    string
    Description

    received_at (default), posted_at, like_count, comment_count or view_count. A post without the figure comes last.

  • Name
    sort_order
    Type
    string
    Description

    desc (default) or asc.

platform, type, media_format, sort_by and sort_order are case-insensitive. Any other value is a 400 invalid_parameter naming the parameter, with details.allowed listing the accepted values; a date we cannot read is a 400 invalid_parameter too. Results are paginated with page and page_size (up to 100).


GET/v1/swipe/mobile-feed/posts

List posts

The user's feed, newest received first, filtered with the post filters. Free.

Request

GET
/v1/swipe/mobile-feed/posts
curl -G https://api.brandsearch.co/v1/swipe/mobile-feed/posts \
  -H "X-API-Key: bsk_your_api_key" \
  -d type=reel \
  -d received_after=2026-10-11T08:00:00.000Z

200 OK

{
  "data": [
    {
      "id": "reel_18189285490405380",
      "platform": "instagram",
      "type": "reel",
      "media_format": "video",
      "received_at": "2026-10-11T13:58:10.930Z",
      "posted_at": "2026-10-09T11:07:33.000Z",
      "caption": "3 steps to glass skin #skincare",
      "hashtags": ["#skincare"],
      "media_url": "https://cdn.brandsearch.co/mobile-feed/18189285490405380.mp4",
      "permalink": "https://www.instagram.com/reel/DPq1aBcDeFg/",
      "duration_seconds": 21.5,
      "like_count": 1200,
      "comment_count": 40,
      "view_count": 56000,
      "share_count": null,
      "author": {
        "id": "999",
        "username": "glowbrand",
        "name": "Glow Brand",
        "is_verified": true,
        "follower_count": 81000,
        "profile_pic_url": "https://cdn.brandsearch.co/instagram/pp_999.jpg"
      },
      "folder_ids": ["cmv8lulla7yn3n9769tujw1cv"],
      "dashboard_url": "https://app.brandsearch.co/swipe-files/mobile-feed/reel_18189285490405380"
    }
  ],
  "pagination": { "page": 1, "page_size": 20, "total": 1, "total_pages": 1 }
}

GET/v1/swipe/mobile-feed/posts/:post_id

Get a post

One post of the user's feed, as in the list. Free. A post that is not in the user's feed is a 404 mobile_feed_post_not_found, whether or not it exists.

Path parameters

  • Name
    post_id
    Type
    string
    Description

    The post's id.

Request

GET
/v1/swipe/mobile-feed/posts/:post_id
curl https://api.brandsearch.co/v1/swipe/mobile-feed/posts/reel_18189285490405380 \
  -H "X-API-Key: bsk_your_api_key"

DELETE/v1/swipe/mobile-feed/posts/:post_id

Remove a post from the feed

Take a post out of the user's feed, like Remove from feed in the app. It no longer shows in the feed or in the user's folders. Only this user's feed changes: anyone else who forwarded the same post keeps it. Forwarding it again brings it back.

A post that is not in the feed is a 404 mobile_feed_post_not_found.

Path parameters

  • Name
    post_id
    Type
    string
    Description

    The post's id.

Request

DELETE
/v1/swipe/mobile-feed/posts/:post_id
curl -X DELETE \
  https://api.brandsearch.co/v1/swipe/mobile-feed/posts/reel_18189285490405380 \
  -H "X-API-Key: bsk_your_api_key"

200 OK

{
  "id": "reel_18189285490405380",
  "removed": true
}

The folder record

Mobile feed folders are the user's own: they are not shared, and every folder below belongs to the API key's user. Folders, and filing posts in them, need an active paid plan.

  • Name
    id
    Type
    string
    Description

    The folder's identifier.

  • Name
    name
    Type
    string
    Description

    Its name, 1-50 characters.

  • Name
    platform
    Type
    string
    Description

    instagram or facebook: the platform of the posts it holds.

  • Name
    item_count
    Type
    integer
    Description

    How many posts of the user's feed it holds.

  • Name
    created_at
    Type
    string
    Description

    When it was created (ISO 8601).

  • Name
    updated_at
    Type
    string
    Description

    When it was last renamed (ISO 8601).


GET/v1/swipe/mobile-feed/folders

List folders

The user's folders, newest first, paginated. Free. To list a folder's posts, use List posts with folder_id.

Query parameters

  • Name
    platform
    Type
    string
    Description

    instagram or facebook. Omit for both.

Request

GET
/v1/swipe/mobile-feed/folders
curl https://api.brandsearch.co/v1/swipe/mobile-feed/folders \
  -H "X-API-Key: bsk_your_api_key"

200 OK

{
  "data": [
    {
      "id": "cmv8lulla7yn3n9769tujw1cv",
      "name": "Skincare hooks",
      "platform": "instagram",
      "item_count": 12,
      "created_at": "2026-10-11T14:02:00+00:00",
      "updated_at": "2026-10-11T14:02:00+00:00"
    }
  ],
  "pagination": { "page": 1, "page_size": 20, "total": 1, "total_pages": 1 }
}

POST/v1/swipe/mobile-feed/folders

Create a folder

Create a folder for the user's Instagram (default) or Facebook posts. Returns the folder, 201 Created.

A name the user already gave a folder of that platform is a 409 swipe_folder_name_taken. Each plan allows a number of folders per platform (100 by default); past it, 429 swipe_folder_quota_exceeded. An unknown body field is a 400 validation_error.

Body parameters

  • Name
    name
    Type
    string
    Description

    The folder's name, 1-50 characters.

  • Name
    platform
    Type
    string
    Description

    instagram (default) or facebook.

Request

POST
/v1/swipe/mobile-feed/folders
curl -X POST https://api.brandsearch.co/v1/swipe/mobile-feed/folders \
  -H "X-API-Key: bsk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"name": "Skincare hooks"}'

201 Created

{
  "id": "cmv8lulla7yn3n9769tujw1cv",
  "name": "Skincare hooks",
  "platform": "instagram",
  "item_count": 0,
  "created_at": "2026-10-11T14:02:00+00:00",
  "updated_at": "2026-10-11T14:02:00+00:00"
}

GET/v1/swipe/mobile-feed/folders/:folder_id

Get, rename or delete a folder

  • GET /v1/swipe/mobile-feed/folders/{folder_id} returns the folder. Free.
  • PATCH on the same path renames it. Body: { "name": "..." }, 1-50 characters. A name already used on that platform is a 409 swipe_folder_name_taken.
  • DELETE on the same path deletes it and returns { "id": "...", "deleted": true }. Its posts stay in the feed.

Another user's folder, or one that does not exist, is a 404 swipe_folder_not_found.

Request

PATCH
/v1/swipe/mobile-feed/folders/:folder_id
curl -X PATCH \
  https://api.brandsearch.co/v1/swipe/mobile-feed/folders/cmv8lulla7yn3n9769tujw1cv \
  -H "X-API-Key: bsk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"name": "Skincare hooks, best"}'

POST/v1/swipe/mobile-feed/folders/:folder_id/items

File a post in a folder

Put a post of the user's feed in one of their folders. The post stays in its other folders. Answers 201 with already_in_folder: true if it was already there, so filing twice is harmless.

The post must be from the folder's platform: an Instagram post in a Facebook folder, or the reverse, is a 400 invalid_parameter on post_id. A post that is not in the user's feed is a 404 mobile_feed_post_not_found.

If the same post changes at the same moment (another user filing it, for example), your change is applied on top, never lost. In the rare case it keeps clashing, the answer is 409 mobile_feed_write_conflict: send the request again.

Path parameters

  • Name
    folder_id
    Type
    string
    Description

    The folder's id.

Body parameters

  • Name
    post_id
    Type
    string
    Description

    The post's id.

Request

POST
/v1/swipe/mobile-feed/folders/:folder_id/items
curl -X POST \
  https://api.brandsearch.co/v1/swipe/mobile-feed/folders/cmv8lulla7yn3n9769tujw1cv/items \
  -H "X-API-Key: bsk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"post_id": "reel_18189285490405380"}'

201 Created

{
  "folder_id": "cmv8lulla7yn3n9769tujw1cv",
  "post_id": "reel_18189285490405380",
  "already_in_folder": false
}

DELETE/v1/swipe/mobile-feed/folders/:folder_id/items/:post_id

Take a post out of a folder

Take a post out of one of the user's folders. It stays in the feed and in its other folders. A post that was not in the folder still answers 200, with already_removed: true. A post that is not in the user's feed is a 404 mobile_feed_post_not_found.

Path parameters

  • Name
    folder_id
    Type
    string
    Description

    The folder's id.

  • Name
    post_id
    Type
    string
    Description

    The post's id.

Request

DELETE
/v1/swipe/mobile-feed/folders/:folder_id/items/:post_id
curl -X DELETE \
  https://api.brandsearch.co/v1/swipe/mobile-feed/folders/cmv8lulla7yn3n9769tujw1cv/items/reel_18189285490405380 \
  -H "X-API-Key: bsk_your_api_key"

200 OK

{
  "folder_id": "cmv8lulla7yn3n9769tujw1cv",
  "post_id": "reel_18189285490405380",
  "removed": true,
  "already_removed": false
}

From your AI assistant

The MCP server gives the same access to an AI assistant: get_mobile_feed lists the posts with the same filters, remove_from_mobile_feed takes one out of the feed, and the folder tools (except get_folder_ads and get_folder_brands) take folder_type="mobile_feed". A user can ask, for example, to sort their latest reels into folders by theme.


Errors

  • 403 plan_required: a folder endpoint, or filing a post in a folder or taking it out, on a trial, a cancelled plan or no paid plan. Listing, reading and removing posts work on any plan.
  • 403 swipe_not_provisioned, 409 account_link_broken: the API key is not linked to a Brandsearch user, or is linked to one that no longer exists (see Errors).
  • 403 feature_not_available: Facebook asked for by an account without early access.
  • 404 mobile_feed_post_not_found: the post is not in the user's feed.
  • 404 swipe_folder_not_found: the folder does not exist or is not the user's.
  • 409 swipe_folder_name_taken: when creating or renaming a folder. 429 swipe_folder_quota_exceeded: when creating one past the plan's folder cap.
  • 409 mobile_feed_write_conflict: a post kept changing while it was being saved. Send the request again.
  • 400 invalid_parameter or 400 validation_error for a bad value, with the parameter named.

See Errors for the full list.

Was this page helpful?