> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mymarky.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve post comment

> Mark a review comment as handled, or reopen it.

Set `resolved` to true once your team has acted on the feedback (e.g. the
caption was fixed), or false to reopen it. Resolving is your team's own
bookkeeping — it does not change the post or its status.

Errors:
    401 authentication_required: API key or token is missing, invalid, or revoked.
    403 permission_denied: Your plan does not include API access, or this business is not in your org.
    404 resource_not_found: No post or comment with that ID exists, or it is not in this business.
    429 rate_limit_exceeded: You sent too many requests this minute.



## OpenAPI

````yaml public-openapi.json patch /api/businesses/{business_id}/posts/{post_id}/comments/{comment_id}
openapi: 3.1.0
info:
  title: Marky Public API
  version: '2026-08-06'
  description: >-
    Create and schedule posts, manage businesses, library, media, and webhooks.


    ## Versioning

    The API uses dated versions (Stripe-style). Send an optional `Marky-Version`
    request header to opt into a version; the response echoes the version it was
    served as. Unpinned requests stay on the floor (2026-04-08) forever, so
    existing integrations never break. Pin to a newer date (e.g. 2026-08-06) to
    receive the newest response shapes; unknown values fall back to the floor.
    Full docs: https://docs.mymarky.ai.


    ## Tolerant reader

    Be a tolerant reader: **ignore unknown fields** in responses (we add fields
    additively, without a version bump) and **tolerate unknown enum values** for
    growing sets like platforms, AI models, statuses, and error codes (marked
    `x-extensible-enum` in this schema). Do not hard-fail on either — treat an
    unrecognized enum value as an opaque string.


    ## Hypermedia

    Responses on the newest version (from 2026-07-17) carry a `self` link — the
    absolute URL of the resource (single reads/updates) or the current page
    (collections) — so you can navigate without rebuilding URLs. Newly created
    resources return their canonical URL in the `Location` header instead.
  termsOfService: https://www.mymarky.ai/legal/terms-and-conditions
  contact:
    name: Marky API Support
    url: https://docs.mymarky.ai
    email: support@mymarky.ai
  license:
    name: Proprietary — © Marky. All rights reserved.
    url: https://www.mymarky.ai/legal/terms-and-conditions
servers:
  - url: https://api.mymarky.ai
    description: Production
security: []
tags:
  - name: businesses
    description: >-
      Set up and manage the brand profiles (businesses) Marky works for — the
      account every post, asset, and connection belongs to.
  - name: posts
    description: >-
      Generate, schedule, queue, and publish on-brand posts — the core job of
      getting a batch of quality content out the door.
  - name: library
    description: >-
      Store and organize the media, files, folders, and templates your posts
      draw from, so on-brand assets are ready when you create.
  - name: integrations
    description: >-
      Connect social accounts and read how published posts performed on each
      platform.
  - name: topics
    description: >-
      Manage the topics and categories that steer what Marky writes about,
      keeping generated content on-message.
  - name: webhooks
    description: >-
      Subscribe to events so your own systems react the moment a post publishes
      or changes.
  - name: keys
    description: Create and revoke the API keys that authenticate your integration.
externalDocs:
  description: Marky API docs
  url: https://docs.mymarky.ai
paths:
  /api/businesses/{business_id}/posts/{post_id}/comments/{comment_id}:
    patch:
      tags:
        - posts
      summary: Resolve post comment
      description: >-
        Mark a review comment as handled, or reopen it.


        Set `resolved` to true once your team has acted on the feedback (e.g.
        the

        caption was fixed), or false to reopen it. Resolving is your team's own

        bookkeeping — it does not change the post or its status.


        Errors:
            401 authentication_required: API key or token is missing, invalid, or revoked.
            403 permission_denied: Your plan does not include API access, or this business is not in your org.
            404 resource_not_found: No post or comment with that ID exists, or it is not in this business.
            429 rate_limit_exceeded: You sent too many requests this minute.
      operationId: resolve_post_comment
      parameters:
        - name: business_id
          in: path
          required: true
          schema:
            type: string
            description: A UUID identifier.
            title: Business Id
          description: A UUID identifier.
        - name: post_id
          in: path
          required: true
          schema:
            type: string
            description: A UUID identifier.
            title: Post Id
          description: A UUID identifier.
        - name: comment_id
          in: path
          required: true
          schema:
            type: string
            description: A UUID identifier.
            title: Comment Id
          description: A UUID identifier.
        - name: Marky-Version
          in: header
          required: false
          schema:
            type: string
            enum:
              - '2026-04-08'
              - '2026-07-17'
              - '2026-08-02'
              - '2026-08-04'
              - '2026-08-06'
            example: '2026-08-06'
          description: >-
            Opt into a dated API version. Omit to stay on the floor (2026-04-08)
            forever — unpinned clients never break. Pin to a newer date (e.g.
            2026-08-06) to receive the newest response shapes. Unknown values
            fall back to the floor. See https://docs.mymarky.ai for the
            versioning model.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostCommentResolveRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostCommentResponse'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '400':
          description: Bad request — the input was malformed or otherwise invalid.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '401':
          description: Authentication failed — the API key is missing or invalid.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '403':
          description: Forbidden — the key is valid but may not access this resource.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '404':
          description: Not found — no resource matches the id in the path.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '422':
          description: Validation error — one or more fields failed validation.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
        '429':
          description: Rate limited — retry after the window resets (see Retry-After).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
            Retry-After:
              description: Seconds to wait before retrying (RFC 9110 delta-seconds).
              schema:
                type: string
        '500':
          description: >-
            Server error — something failed on our side; retry or quote
            X-Request-Id.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          headers:
            RateLimit-Limit:
              description: >-
                Requests allowed in the current window (IETF/Zalando name;
                preferred).
              schema:
                type: string
            RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
            RateLimit-Reset:
              description: UNIX epoch (seconds) when the current window resets.
              schema:
                type: string
            X-RateLimit-Limit:
              description: Back-compat alias of RateLimit-Limit.
              schema:
                type: string
            X-RateLimit-Remaining:
              description: Back-compat alias of RateLimit-Remaining.
              schema:
                type: string
            X-RateLimit-Reset:
              description: Back-compat alias of RateLimit-Reset.
              schema:
                type: string
            X-Request-Id:
              description: Unique id for THIS request (req_…). Quote it to support.
              schema:
                type: string
            X-Flow-ID:
              description: >-
                Correlation id for the whole logical flow; echoes the request's
                X-Flow-ID if sent.
              schema:
                type: string
            Marky-Version:
              description: The dated API version this response was served as.
              schema:
                type: string
      security:
        - HTTPBearer:
            - uid
components:
  schemas:
    PostCommentResolveRequest:
      properties:
        resolved:
          type: boolean
          title: Resolved
          description: true = mark the comment handled; false = reopen it.
      additionalProperties: false
      type: object
      required:
        - resolved
      title: PostCommentResolveRequest
    PostCommentResponse:
      properties:
        id:
          type: string
          title: Id
          description: Comment ID
        body:
          type: string
          title: Body
          description: The comment text
        user_id:
          type: string
          title: User Id
          description: ID of the team member who wrote the comment
        author_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Author Name
          description: >-
            Display name of the team member who wrote the comment. Null when the
            account has no name set.
        resolved:
          type: boolean
          title: Resolved
          description: Whether your team marked this comment as handled
        created_at:
          type: string
          title: Created At
          description: When the comment was written
        updated_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Updated At
          description: Last update time
      type: object
      required:
        - id
        - body
        - user_id
        - resolved
        - created_at
      title: PostCommentResponse
    Problem:
      type: object
      description: >-
        RFC 9457 Problem Details. Returned as application/problem+json to
        clients pinned to 2026-07-17 or later. Match on the stable `code`, never
        on text.
      properties:
        type:
          type: string
          format: uri
          description: URI for the problem type; dereferences to the docs entry for `code`.
        title:
          type: string
          description: >-
            Short human-readable summary of the problem type (the broad error
            category).
        status:
          type: integer
          description: The HTTP status code, repeated in the body.
        detail:
          type: string
          description: >-
            Explanation specific to this occurrence. Display/logging only — do
            not parse.
        instance:
          type: string
          description: The request path that produced this problem.
        code:
          $ref: '#/components/schemas/ErrorCode'
        request_id:
          type: string
          description: >-
            Id of this request (also the X-Request-Id header). Quote it to
            support.
        param:
          type: string
          description: The offending request field, when the problem is field-specific.
      required:
        - type
        - title
        - status
        - detail
        - code
    ErrorEnvelope:
      description: >-
        The body of every non-2xx response.


        `detail` is retained on internal routes for backward-compatibility while
        the

        frontend migrates to reading `error.code`.
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      required:
        - error
      title: ErrorEnvelope
      type: object
    ErrorCode:
      type: string
      title: ErrorCode
      description: >-
        The full set of stable `error.code` values the API can return.


        Two groups: (1) GENERIC codes the global handler derives from the HTTP
        status

        or message keyword for plain raises (see api_errors._error_code + the
        handlers),

        and (2) the typed BUSINESS codes (mirror of ErrorType) for raises the
        frontend

        must tell apart from other same-status errors.


        This enum exists so OpenAPI emits an `enum` for error.code — a canonical
        list in

        the docs and a typed union for codegen — instead of a bare string. It
        does NOT

        validate runtime responses (those are plain dicts built in
        _build_error_response),

        so a code missing here only means incomplete docs, never a 500. The

        test_error_code_enum_covers_* tests keep it in sync with ErrorType +
        _error_code

        so it can't silently drift.
      x-extensible-enum:
        - authentication_required
        - permission_denied
        - resource_not_found
        - rate_limit_exceeded
        - validation_error
        - internal_error
        - invalid_value
        - invalid_id
        - already_exists
        - invalid_request
        - WORKSPACE_NOT_SUPPORTED
        - INSUFFICIENT_CREDITS
        - BUSINESS_CREDIT_LIMIT_EXCEEDED
        - NO_ENABLED_TOPICS
        - GENERATION_CAP_REACHED
        - CHECKOUT_BLOCKED
        - INVALID_API_KEY
        - SOCIAL_TOKEN_EXPIRED
        - FB_ACCOUNT_BLOCKED
        - PAYMENT_REQUIRED
        - NO_CONNECTED_SOCIALS
        - NOT_ENOUGH_POSTS_FOR_TOPICS
        - WORKSPACE_LIMIT_EXCEEDED
        - RECIPIENT_WORKSPACE_LIMIT_EXCEEDED
        - ADVANCED_WHITELABEL_QUOTA_FROZEN
        - RESELLER_WHITELABEL_AT_CAPACITY
        - RESELLER_WHITELABEL_NOT_PURCHASED
        - CHANNEL_LIMIT_EXCEEDED
        - PHONE_NOT_VERIFIED
        - FILE_TOO_LARGE
        - INVALID_FILE_TYPE
        - SUBSCRIPTION_ALREADY_ACTIVE
        - UPSTREAM_PROVIDER_ERROR
        - PLATFORM_MEDIA_UNSUPPORTED
        - SOCIAL_CONNECT_FAILED
        - SOCIAL_CONNECT_LINK_EXPIRED
        - SOCIAL_APP_PAUSED
        - NO_PHOTO_SOURCE
        - TEMPLATE_FORMAT_MISMATCH
        - TEMPLATE_NOT_FOUND
        - INVALID_CSV_ROW
        - IMAGE_GENERATION_FAILED
        - IMAGE_REFERENCE_INVALID
        - PDF_HAS_NO_TEXT
        - POST_RENDER_FAILED
        - POST_DESIGN_SELECTION_FAILED
        - POST_CONTENT_GENERATION_FAILED
        - POST_IDEATION_FAILED
        - POST_MEDIA_FAILED
        - POST_AI_MEDIA_FAILED
        - POST_AI_MEDIA_BLOCKED
        - POST_RENDER_UNAVAILABLE
        - IDEMPOTENCY_KEY_CONFLICT
        - NO_STRIPE_CUSTOMER
        - X_AGENCY_NOT_ENABLED
        - NO_ACTIVE_SUBSCRIPTION
        - POST_HAS_NO_VIDEO
        - POST_ALREADY_PUBLISHED
        - SCHEDULE_HAS_NO_TIMESLOTS
    ErrorDetail:
      properties:
        type:
          type: string
          title: Type
          description: >-
            Broad error category derived from the HTTP status
            (invalid_request_error, authentication_error, permission_error,
            not_found_error, rate_limit_error, api_error).
        code:
          $ref: '#/components/schemas/ErrorCode'
          description: >-
            Stable, machine-readable error code. Match on THIS, never on the
            message. Codes never change even when the message is reworded.
        message:
          type: string
          title: Message
          description: Human-readable explanation. For display/logging only — do not parse.
        doc_url:
          type: string
          title: Doc Url
          description: Link to the docs entry for this error code.
        param:
          anyOf:
            - type: string
            - type: 'null'
          title: Param
          description: The offending request field, when the error is field-specific.
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: >-
            The id of this request (also returned as the X-Request-Id header).
            Quote it to support so they can find the exact request in our logs.
        reconnect_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Reconnect Url
          description: >-
            Present on social token-expired errors (SOCIAL_TOKEN_EXPIRED /
            REFRESH_TOKEN_EXPIRED): the page where the user reconnects the
            affected account, so an agent can surface the fix without a second
            call.
        is_reconnect_fixable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Reconnect Fixable
          description: >-
            True on social token-expired errors — the failure is fixed by
            reconnecting the account (paired with reconnect_url).
      type: object
      required:
        - type
        - code
        - message
        - doc_url
      title: ErrorDetail
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer
      description: >-
        Bearer an mk_live_ API key. A key is ORG-SCOPED: it grants full access
        to every resource in that organization, with no per-endpoint scoping
        (see the `uid` pseudo-permission on each operation). Manage keys at
        https://app.mymarky.ai.

````