Search loads only when you use it. Browse all categories below.

MCP tool

Read direct Threads replies

sosoapi_query_threads_direct_replies

Verify an own Graph root, then read one direct reply page. Two GETs share eight seconds.

Read as Markdown

Profiles and transports

Profiles: full · Transports: stdio, http

Choose core or full to control which tools your client sees; this does not change its permissions. Local file upload requires stdio and is unavailable over HTTP. Set SOSOAPI_OUTPUT_SCHEMAS=1 to include output schemas in discovery. Tools return structured results with or without that setting.

Permissions and side effects

Annotations help clients describe a tool. Each call still checks the user’s authentication, role, resource access and capability grants.

{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}

Input fields

Required means required inside its parent object and selected branch. A required child does not make an optional parent required. Rules and field names below are copied from the contract.

Input fields
Field / branchType / requiredConstraints
$objectRequired in parent
  • additionalProperties: false
workspace_idstringRequired in parent
  • format: "uuid"
social_account_idstringRequired in parent
  • format: "uuid"
root_post_idstringRequired in parent
  • pattern: "^\\d{2,20}$"
limitintegerOptional / item
  • minimum: 1
  • maximum: 100
afterstringOptional / item
  • minLength: 1
  • maxLength: 4096
reversebooleanOptional / item—
Complete JSON Schema
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "format": "uuid"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid"
    },
    "root_post_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "after": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "reverse": {
      "type": "boolean"
    }
  },
  "required": [
    "workspace_id",
    "social_account_id",
    "root_post_id"
  ],
  "additionalProperties": false
}

Structured output

This schema describes structuredContent in a successful tool result. The MCP response also includes content and may set isError when a call fails. For publishing, read the post’s final result rather than treating an accepted request or text response as confirmation. The linked API operation explains permissions and retry rules.

Required means required inside its parent object and selected branch. A required child does not make an optional parent required. Rules and field names below are copied from the contract.

Structured output
Field / branchType / requiredConstraints
$objectRequired in parent
  • additionalProperties: false
contract_versionstringRequired in parent
  • const: "threads-reads/v1"
operationstringRequired in parent
  • const: "direct_replies"
sourcestringRequired in parent
  • const: "official_threads_api"
workspace_idstringRequired in parent
  • format: "uuid"
social_account_idstringRequired in parent
  • format: "uuid"
provider_account_idstringRequired in parent
  • pattern: "^\\d{2,20}$"
provider_app_identitystring | nullRequired in parent—
provider_app_identityanyOf 1stringRequired in parent
  • minLength: 1
  • maxLength: 100
provider_app_identityanyOf 2nullRequired in parent—
oauth_snapshot_idstring | nullRequired in parent—
oauth_snapshot_idanyOf 1stringRequired in parent
  • format: "uuid"
oauth_snapshot_idanyOf 2nullRequired in parent—
fetched_atstringRequired in parent
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
statusstringRequired in parent
  • enum: ["available","partial","unavailable"]
unavailable_reasonstring | nullRequired in parent—
unavailable_reasonanyOf 1stringRequired in parent
  • enum: ["grant_inventory_unknown","missing_permissions","issuing_app_unknown","credential_unavailable","credential_expired","account_unhealthy","provider_denied","provider_rate_limited","provider_unavailable","provider_response_invalid"]
unavailable_reasonanyOf 2nullRequired in parent—
accessobjectRequired in parent
  • additionalProperties: false
access.required_permissionsarrayRequired in parent
  • maxItems: 4
access.required_permissions[]stringOptional / item
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.missing_permissionsarrayRequired in parent
  • maxItems: 4
access.missing_permissions[]stringOptional / item
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.permission_statestringRequired in parent
  • enum: ["granted","missing","unknown"]
access.grant_evidencestringRequired in parent
  • enum: ["exact","unknown"]
access.app_accessstringRequired in parent
  • const: "unverified"
dataarrayRequired in parent
  • maxItems: 100
data[]objectOptional / item
  • additionalProperties: false
data[].idstringRequired in parent
  • pattern: "^\\d{2,20}$"
data[].textstring | nullRequired in parent—
data[].textanyOf 1stringRequired in parent
  • maxLength: 30000
data[].textanyOf 2nullRequired in parent—
data[].usernamestring | nullRequired in parent—
data[].usernameanyOf 1stringRequired in parent
  • pattern: "^[A-Za-z0-9._]{1,30}$"
data[].usernameanyOf 2nullRequired in parent—
data[].permalinkstring | nullRequired in parent—
data[].permalinkanyOf 1stringRequired in parent
  • format: "uri"
data[].permalinkanyOf 2nullRequired in parent—
data[].timestampstring | nullRequired in parent—
data[].timestampanyOf 1stringRequired in parent
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
data[].timestampanyOf 2nullRequired in parent—
data[].media_typestring | nullRequired in parent—
data[].media_typeanyOf 1stringRequired in parent
  • enum: ["TEXT","TEXT_POST","IMAGE","VIDEO","CAROUSEL_ALBUM","AUDIO","REPOST_FACADE"]
data[].media_typeanyOf 2nullRequired in parent—
data[].is_replyboolean | nullRequired in parent—
data[].is_quote_postboolean | nullRequired in parent—
data[].has_repliesboolean | nullRequired in parent—
data[].root_post_idstring | nullOptional / item—
data[].root_post_idanyOf 1stringOptional / item
  • pattern: "^\\d{2,20}$"
data[].root_post_idanyOf 2nullOptional / item—
data[].replied_to_idstring | nullOptional / item—
data[].replied_to_idanyOf 1stringOptional / item
  • pattern: "^\\d{2,20}$"
data[].replied_to_idanyOf 2nullOptional / item—
profileobject | nullRequired in parent—
profileanyOf 1objectRequired in parent
  • additionalProperties: false
profile.usernameanyOf 1stringRequired in parent
  • pattern: "^[A-Za-z0-9._]{1,30}$"
profile.nameanyOf 1string | nullRequired in parent—
profile.nameanyOf 1 / anyOf 1stringRequired in parent
  • maxLength: 200
profile.nameanyOf 1 / anyOf 2nullRequired in parent—
profile.biographyanyOf 1string | nullRequired in parent—
profile.biographyanyOf 1 / anyOf 1stringRequired in parent
  • maxLength: 2000
profile.biographyanyOf 1 / anyOf 2nullRequired in parent—
profile.is_verifiedanyOf 1boolean | nullRequired in parent—
profile.follower_countanyOf 1integer | nullRequired in parent—
profile.follower_countanyOf 1 / anyOf 1integerRequired in parent
  • minimum: 0
  • maximum: 9007199254740991
profile.follower_countanyOf 1 / anyOf 2nullRequired in parent—
profileanyOf 2nullRequired in parent—
locationsarrayOptional / item
  • maxItems: 100
locations[]objectOptional / item
  • additionalProperties: false
locations[].idstringRequired in parent
  • pattern: "^\\d{2,20}$"
locations[].namestring | nullRequired in parent—
locations[].nameanyOf 1stringRequired in parent
  • maxLength: 200
locations[].nameanyOf 2nullRequired in parent—
locations[].addressstring | nullRequired in parent—
locations[].addressanyOf 1stringRequired in parent
  • maxLength: 500
locations[].addressanyOf 2nullRequired in parent—
locations[].citystring | nullRequired in parent—
locations[].cityanyOf 1stringRequired in parent
  • maxLength: 200
locations[].cityanyOf 2nullRequired in parent—
locations[].countrystring | nullRequired in parent—
locations[].countryanyOf 1stringRequired in parent
  • maxLength: 200
locations[].countryanyOf 2nullRequired in parent—
locations[].postal_codestring | nullRequired in parent—
locations[].postal_codeanyOf 1stringRequired in parent
  • maxLength: 100
locations[].postal_codeanyOf 2nullRequired in parent—
root_post_idstringRequired in parent
  • pattern: "^\\d{2,20}$"
target_usernamestringOptional / item
  • pattern: "^[A-Za-z0-9._]{1,30}$"
coverageobjectRequired in parent
  • additionalProperties: false
coverage.completebooleanRequired in parent
  • const: false
coverage.next_cursorstring | nullRequired in parent—
coverage.next_cursoranyOf 1stringRequired in parent
  • minLength: 1
  • maxLength: 4096
coverage.next_cursoranyOf 2nullRequired in parent—
coverage.omitted_rowsintegerRequired in parent
  • minimum: 0
  • maximum: 9007199254740991
coverage.reasonsarrayRequired in parent
  • maxItems: 8
coverage.reasons[]stringOptional / item
  • maxLength: 400
quotaarrayRequired in parent
  • maxItems: 1
quota[]objectOptional / item
  • additionalProperties: false
quota[].providerstringRequired in parent
  • const: "meta"
quota[].usageobjectRequired in parent
  • additionalProperties: false
quota[].usage.call_countnumberOptional / item—
quota[].usage.total_cputimenumberOptional / item—
quota[].usage.total_timenumberOptional / item—
quota[].usage.estimated_time_to_regain_accessnumberOptional / item—
quota[].sourcesarrayRequired in parent
  • maxItems: 2
quota[].sources[]stringOptional / item
  • enum: ["x-app-usage","x-business-use-case-usage"]
Complete JSON Schema
{
  "type": "object",
  "properties": {
    "contract_version": {
      "type": "string",
      "const": "threads-reads/v1"
    },
    "operation": {
      "type": "string",
      "const": "direct_replies"
    },
    "source": {
      "type": "string",
      "const": "official_threads_api"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid"
    },
    "provider_account_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "provider_app_identity": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "oauth_snapshot_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid"
        },
        {
          "type": "null"
        }
      ]
    },
    "fetched_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "status": {
      "type": "string",
      "enum": [
        "available",
        "partial",
        "unavailable"
      ]
    },
    "unavailable_reason": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "grant_inventory_unknown",
            "missing_permissions",
            "issuing_app_unknown",
            "credential_unavailable",
            "credential_expired",
            "account_unhealthy",
            "provider_denied",
            "provider_rate_limited",
            "provider_unavailable",
            "provider_response_invalid"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "access": {
      "type": "object",
      "properties": {
        "required_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "missing_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "permission_state": {
          "type": "string",
          "enum": [
            "granted",
            "missing",
            "unknown"
          ]
        },
        "grant_evidence": {
          "type": "string",
          "enum": [
            "exact",
            "unknown"
          ]
        },
        "app_access": {
          "type": "string",
          "const": "unverified"
        }
      },
      "required": [
        "required_permissions",
        "missing_permissions",
        "permission_state",
        "grant_evidence",
        "app_access"
      ],
      "additionalProperties": false
    },
    "data": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "text": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30000
              },
              {
                "type": "null"
              }
            ]
          },
          "username": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[A-Za-z0-9._]{1,30}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "permalink": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "TEXT",
                  "TEXT_POST",
                  "IMAGE",
                  "VIDEO",
                  "CAROUSEL_ALBUM",
                  "AUDIO",
                  "REPOST_FACADE"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "is_reply": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "is_quote_post": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "has_replies": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "root_post_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "replied_to_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "text",
          "username",
          "permalink",
          "timestamp",
          "media_type",
          "is_reply",
          "is_quote_post",
          "has_replies"
        ],
        "additionalProperties": false
      }
    },
    "profile": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "username": {
              "type": "string",
              "pattern": "^[A-Za-z0-9._]{1,30}$"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "biography": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2000
                },
                {
                  "type": "null"
                }
              ]
            },
            "is_verified": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "follower_count": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "username",
            "name",
            "biography",
            "is_verified",
            "follower_count"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "locations": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "postal_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "address",
          "city",
          "country",
          "postal_code"
        ],
        "additionalProperties": false
      }
    },
    "root_post_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "target_username": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._]{1,30}$"
    },
    "coverage": {
      "type": "object",
      "properties": {
        "complete": {
          "type": "boolean",
          "const": false
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            {
              "type": "null"
            }
          ]
        },
        "omitted_rows": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reasons": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 400
          }
        }
      },
      "required": [
        "complete",
        "next_cursor",
        "omitted_rows",
        "reasons"
      ],
      "additionalProperties": false
    },
    "quota": {
      "maxItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "const": "meta"
          },
          "usage": {
            "type": "object",
            "properties": {
              "call_count": {
                "type": "number"
              },
              "total_cputime": {
                "type": "number"
              },
              "total_time": {
                "type": "number"
              },
              "estimated_time_to_regain_access": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "sources": {
            "maxItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "x-app-usage",
                "x-business-use-case-usage"
              ]
            }
          }
        },
        "required": [
          "provider",
          "usage",
          "sources"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "contract_version",
    "operation",
    "source",
    "workspace_id",
    "social_account_id",
    "provider_account_id",
    "provider_app_identity",
    "oauth_snapshot_id",
    "fetched_at",
    "status",
    "unavailable_reason",
    "access",
    "data",
    "profile",
    "root_post_id",
    "coverage",
    "quota"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Example tool call

These examples use fictional values checked against the schemas. Replace the IDs with ones you are authorized to use, the media with ready assets and the dates with your confirmed publishing time. Check the account’s eligibility before submitting a write. This page sends no API requests.

{
  "name": "sosoapi_query_threads_direct_replies",
  "arguments": {
    "workspace_id": "11111111-1111-4111-8111-111111111111",
    "social_account_id": "22222222-2222-4222-8222-222222222222",
    "root_post_id": "54321",
    "limit": 25,
    "reverse": true
  }
}

structuredContent

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "social_account_id": "22222222-2222-4222-8222-222222222222",
  "contract_version": "threads-reads/v1",
  "operation": "direct_replies",
  "source": "official_threads_api",
  "provider_account_id": "12345",
  "provider_app_identity": null,
  "oauth_snapshot_id": null,
  "fetched_at": "2099-01-15T09:00:00Z",
  "status": "unavailable",
  "unavailable_reason": "issuing_app_unknown",
  "access": {
    "required_permissions": [
      "threads_basic",
      "threads_read_replies"
    ],
    "missing_permissions": [],
    "permission_state": "unknown",
    "grant_evidence": "unknown",
    "app_access": "unverified"
  },
  "data": [],
  "profile": null,
  "root_post_id": "54321",
  "quota": [],
  "coverage": {
    "complete": false,
    "next_cursor": null,
    "omitted_rows": 0,
    "reasons": [
      "Fictional documentation example: no provider request was made and no account data was read.",
      "App access and any pending permission review remain unverified; this is not successful provider or public-access evidence."
    ]
  }
}
Install or connect MCP