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

# Queue a manual SMS reply

> Requires an active Sendblue line and a conversation that is neither blocked nor opted out. Supply nonblank text or unused outbound attachment ids uploaded for this organization. Creates one queued SMS per attachment, attaching text to the first; text-only sends create one message. Attachments are claimed atomically before jobs dispatch. Returns refreshed detail with HTTP 200; queued status does not establish provider delivery, and the worker rechecks donor consent. Conversations and available lines respect line visibility: restricted lines require assignment to the viewer or sms_inbox_manage/group_all. Requires permission: one of sms_inbox_reply, sms_inbox_manage; plus one of beta_features.



## OpenAPI

````yaml post /admin/sms_inbox/conversations/{conversation_id}/messages
openapi: 3.0.0
info:
  title: Gratona API
  description: >-
    REST API for the Gratona fundraising platform, including donor, donation,
    sponsorship, program, event, and integration workflows. Endpoints are
    organized by tag. Most endpoints require either a Passport bearer token or
    an issued API key — see the Security Schemes section.
  contact:
    name: Gratona Engineering
    url: https://gratona.com
    email: devs@gratona.com
  version: 1.0.0
servers:
  - url: https://api.gratona.com/v1
    description: Server Version 1.0.0
security: []
tags:
  - name: Auth
    description: >-
      Login, signup, logout, password reset, and email verification for admin
      users and donors.
  - name: Donors
    description: >-
      Donor records: CRUD, profile fields, household linkage, search, filters,
      merge, and duplicate detection.
  - name: Donations
    description: >-
      Individual donation records, recurring commitments, soft credits, refunds,
      designations, and exports.
  - name: Sponsorships
    description: >-
      Donor-to-entity commitment relationships, lifecycle transitions, and
      commitment-specific filters.
  - name: Entities
    description: >-
      Recipient records (children, families, projects, animals, etc.), their
      status, and entity-level fields.
  - name: Programs
    description: >-
      Program / campaign configuration: hierarchy, settings, and program-level
      metadata.
  - name: Forms
    description: >-
      Custom form builder (HysForm), form fields, standardized donor fields, and
      field migrations.
  - name: Trips
    description: >-
      Mission-trip management: trips, participants, budgets, tasks,
      e-signatures, fundraising milestones, and background checks.
  - name: Communications
    description: >-
      Email templates, SMS, newsletters, donor email manager, and per-donor
      notes.
  - name: Payments
    description: >-
      Payment-gateway management (Stripe, PayPal, Flutterwave, QuickBooks).
      Excludes inbound webhooks — see the Webhooks tag.
  - name: Reports
    description: Dashboards, analytics, scheduled reports, and exports.
  - name: Admin
    description: >-
      Client-account administration: users, groups/permissions, settings,
      integrations, and account lifecycle.
  - name: Donor Portal
    description: >-
      Endpoints consumed by the donor-facing portal (donor login, dashboard,
      donation history, messages).
  - name: Recipient Portal
    description: Endpoints consumed by the recipient-facing portal.
  - name: Public
    description: >-
      Unauthenticated public endpoints: donor signup, public trip pages,
      peer-to-peer campaigns, public checkout.
  - name: Webhooks
    description: >-
      Inbound webhooks from third parties (Stripe, PayPal, Flutterwave, Checkr,
      DropboxSign). Annotated minimally for reference; payload shapes are owned
      by the upstream provider.
  - name: Events
    description: >-
      Event setup, invitations, registration, ticketing, attendance and event
      reporting.
  - name: Journeys
    description: >-
      Journey graphs, activation, enrollment, message templates and event
      follow-up automations.
  - name: Tasks
    description: Workspace tasks, assignments, saved task views and record collaboration.
  - name: Fundraising
    description: >-
      Fundraising portfolios, stewardship plans, giving anniversaries and
      personal donor follow-up.
  - name: Impact Stories
    description: Story intake, review, assets, consent and publication workflows.
  - name: Integrations
    description: Workspace integration connections, mappings, synchronization and recovery.
  - name: Email Calendar
    description: Connected email/calendar accounts and donor interactions.
  - name: Spaces
    description: Workspace Spaces and collaborative Pages.
  - name: Library
    description: Workspace documents, source connections, files and analysis.
  - name: Intelligence
    description: Donor intelligence and Tali workspace workflows.
  - name: Automation
    description: >-
      V3 automation primitive discovery, input validation, invocation and Zapier
      contracts.
  - name: Schema
    description: V3 model, enum, capability and scope discovery.
  - name: Zapier
    description: Zapier automation connections, polling feeds and actions.
  - name: Files
    description: Files
  - name: Client
    description: Client
  - name: Payment Gateways
    description: Payment Gateways
  - name: Email Settings
    description: Email Settings
  - name: Admin Dashboard
    description: Admin Dashboard
  - name: Recipients
    description: Recipients
  - name: Historical Archived Updates
    description: Historical Archived Updates
  - name: Team & access
    description: Team & access
  - name: Settings
    description: Settings
  - name: Notifications
    description: Notifications
  - name: Participation
    description: Participation
  - name: Users
    description: Users
  - name: Wrapped
    description: Wrapped
  - name: Donor SignUp
    description: Donor SignUp
  - name: Frontend
    description: Frontend
  - name: User
    description: User
  - name: Workspace
    description: Workspace
paths:
  /admin/sms_inbox/conversations/{conversation_id}/messages:
    post:
      tags:
        - Communications
      summary: Queue a manual SMS reply
      description: >-
        Requires an active Sendblue line and a conversation that is neither
        blocked nor opted out. Supply nonblank text or unused outbound
        attachment ids uploaded for this organization. Creates one queued SMS
        per attachment, attaching text to the first; text-only sends create one
        message. Attachments are claimed atomically before jobs dispatch.
        Returns refreshed detail with HTTP 200; queued status does not establish
        provider delivery, and the worker rechecks donor consent. Conversations
        and available lines respect line visibility: restricted lines require
        assignment to the viewer or sms_inbox_manage/group_all. Requires
        permission: one of sms_inbox_reply, sms_inbox_manage; plus one of
        beta_features.
      operationId: communicationsSmsInboxSendMessage
      parameters:
        - name: conversation_id
          in: path
          description: Conversation id in the current organization.
          required: true
          schema:
            type: integer
          example: 42
      requestBody:
        description: Validated request fields for this operation.
        required: true
        content:
          application/json:
            schema:
              properties:
                content:
                  description: 'Content. Validation: nullable, string.'
                  type: string
                  example: Content
                  nullable: true
                attachment_ids:
                  description: 'Attachment ids. Validation: nullable, array.'
                  type: array
                  items:
                    description: 'Attachment ids item. Validation: integer, distinct.'
                    type: integer
                    example: 1
                  uniqueItems: true
                  nullable: true
              type: object
              anyOf:
                - required:
                    - content
                  properties:
                    content:
                      type: string
                      minLength: 1
                  type: object
                - required:
                    - attachment_ids
                  properties:
                    attachment_ids:
                      type: array
                      items:
                        description: Organization-owned record identifier.
                        type: integer
                        example: 42
                        nullable: false
                      minItems: 1
                  type: object
      responses:
        '200':
          description: Operation result.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/CommunicationsSmsConversationDetail'
                  - properties:
                      message:
                        type: string
                        example: Message queued.
                    type: object
        '401':
          description: Authentication is required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
        '403':
          description: >-
            The authenticated user lacks access to this workflow or its related
            records.
        '404':
          description: The conversation is unavailable to this viewer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: >-
            Reply eligibility, content or pending attachment
            ownership/availability is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
      security:
        - bearerAuth: []
        - apiKeyAuth: []
components:
  schemas:
    CommunicationsSmsConversationDetail:
      properties:
        conversation:
          $ref: '#/components/schemas/CommunicationsSmsConversation'
        donor:
          properties:
            id:
              description: Organization-owned record identifier.
              type: integer
              example: 42
              nullable: false
            name:
              description: Serialized value.
              type: string
              example: Example
              nullable: false
            phone_e164:
              type: string
              example: '+15551234567'
              nullable: true
            can_receive_sms:
              type: boolean
              example: true
          type: object
          nullable: true
        messages:
          type: array
          items:
            $ref: '#/components/schemas/CommunicationsSmsMessage'
        pagination:
          properties:
            current_page:
              type: integer
              example: 1
            last_page:
              type: integer
              example: 1
            per_page:
              type: integer
              example: 50
            total:
              type: integer
              example: 1
          type: object
        reply_eligibility:
          properties:
            can_reply:
              type: boolean
              example: true
            blocked:
              type: boolean
              example: true
            opted_out:
              type: boolean
              example: true
            line_active:
              type: boolean
              example: true
          type: object
        channel:
          properties:
            key:
              type: string
              enum:
                - texts
              example: texts
            label:
              type: string
              enum:
                - Texts
              example: Texts
          type: object
      type: object
    UnauthorizedResponse:
      title: UnauthorizedResponse
      description: >-
        Returned with HTTP 401 when the request lacks a valid Passport bearer
        token, a valid `X-HYS-API-Key`, or a valid session. The body is the
        simple `{message, status}` envelope emitted by `AuthenticateApiOrKey`.
      required:
        - message
        - status
      properties:
        message:
          description: >-
            Always the literal string `Unauthorized` from the `auth.api_or_key`
            middleware. Login endpoints return `Invalid Credentials` instead.
          type: string
          example: Unauthorized
        status:
          type: string
          example: error
      type: object
    NotFoundResponse:
      title: NotFoundResponse
      description: >-
        Returned with HTTP 404 when a resource lookup misses (typically because
        the id doesn't exist OR is scoped to a different `client_id`). Note:
        many endpoints intentionally collapse 'not found' and 'forbidden' into a
        single 404 to avoid leaking which records exist in another tenant.
      required:
        - message
      properties:
        message:
          description: >-
            Human-readable message. Often a more specific string like `Donor not
            found` or `Trip not found`.
          type: string
          example: Not Found
        status:
          type: string
          example: error
      type: object
    RequestRejection:
      description: >-
        Request or workflow rejection. Framework field-validation failures
        contain errors; semantic rejections may contain message without errors;
        legacy/provider failures may use error and error_code. The operation
        description identifies the rejected condition. Domain responses may add
        current revision, limits or other conflict context.
      anyOf:
        - $ref: '#/components/schemas/ValidationErrorResponse'
        - $ref: '#/components/schemas/ErrorResponse'
        - required:
            - error
          properties:
            error:
              description: Legacy or provider-facing error message.
              type: string
              example: The request could not be completed.
            error_code:
              description: Stable domain error code, when provided.
              type: string
              example: WORKFLOW_UNAVAILABLE
          type: object
    CommunicationsSmsConversation:
      properties:
        id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: false
        donor_id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: true
        donor_name:
          type: string
          example: Jane Donor
        participant_phone_e164:
          type: string
          example: '+15551234567'
        routing_status:
          type: string
          enum:
            - matched
            - unmatched
            - ambiguous
          example: matched
        inbox_status:
          type: string
          enum:
            - open
            - closed
            - spam
            - archived
          example: open
        messaging_status:
          type: string
          enum:
            - active
            - opted_out
            - blocked
          example: active
        assigned_user_id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: true
        assigned_user_name:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        sms_line:
          oneOf:
            - allOf:
                - $ref: '#/components/schemas/CommunicationsSmsInboxLine'
            - type: string
              enum:
                - null
              nullable: true
        last_message_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        last_inbound_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        last_outbound_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        last_read_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        unread_count:
          type: integer
          example: 0
        needs_reply:
          type: boolean
          example: true
        last_message_preview:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        last_message_direction:
          type: string
          enum:
            - inbound
            - outbound
            - null
          example: inbound
          nullable: true
        has_attachments:
          type: boolean
          example: true
        messages:
          description: >-
            Detailed message page is repeated here for detail responses; null in
            list responses.
          type: array
          items:
            $ref: '#/components/schemas/CommunicationsSmsMessage'
          nullable: true
      type: object
    CommunicationsSmsMessage:
      properties:
        id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: false
        direction:
          type: string
          enum:
            - inbound
            - outbound
          example: outbound
        message_kind:
          type: string
          example: manual
        user_id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: true
        sender:
          properties:
            id:
              description: Organization-owned record identifier.
              type: integer
              example: 42
              nullable: false
            name:
              type: string
              example: Jane Admin
            initials:
              type: string
              example: JA
          type: object
          nullable: true
        content:
          type: string
          example: Thank you for your support.
        trigger:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        provider_status:
          type: string
          example: QUEUED
        provider_message_handle:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        error_code:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        error_message:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        to_number:
          type: string
          example: '+15551234567'
        from_number:
          type: string
          example: '+15557654321'
        received_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        created_at:
          type: string
          format: date-time
          example: '2026-10-20T12:00:00Z'
          nullable: true
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/CommunicationsSmsAttachment'
      type: object
    ValidationErrorResponse:
      title: ValidationErrorResponse
      description: >-
        Returned with HTTP 422 when `Validator::make($data, $rules)` fails. The
        `errors` map is keyed by the failing field name; each value is an array
        of human-readable error messages for that field. Most controllers also
        include a top-level `status: error`.
      required:
        - errors
      properties:
        errors:
          description: >-
            Map of field name to array of validator error messages. Example:
            `{email: [The email field is required.], amount: [The amount must be
            a number.]}`.
          type: object
          additionalProperties:
            type: array
            items:
              type: string
        status:
          description: Always the literal string `error`.
          type: string
          example: error
        message:
          description: >-
            Optional summary message — present on some endpoints, absent on
            others.
          type: string
          example: The given data was invalid.
          nullable: true
      type: object
    ErrorResponse:
      title: ErrorResponse
      description: >-
        Generic error envelope used by most controllers. Most error responses
        pair a human-readable `message` with `status: error`. Some endpoints
        additionally include `errors` (validator errors), `error` (legacy
        single-error string), `code`, or domain-specific context fields.
      required:
        - message
      properties:
        message:
          description: Human-readable error message.
          type: string
          example: Something went wrong. Please try again.
        status:
          description: >-
            Always the literal string `error` for failures. Some endpoints omit
            this field.
          type: string
          example: error
        error:
          description: Legacy single error code/string used by older endpoints.
          type: string
          example: invalid_request
          nullable: true
        code:
          description: >-
            Optional application-level error code (not all endpoints populate
            this).
          type: string
          example: DONOR_NOT_FOUND
          nullable: true
      type: object
    CommunicationsSmsInboxLine:
      allOf:
        - $ref: '#/components/schemas/CommunicationsSendblueLine'
        - properties:
            assigned_user_name:
              description: Serialized value.
              type: string
              example: Example
              nullable: true
          type: object
    CommunicationsSmsAttachment:
      properties:
        id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: false
        upload_id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: true
        original_filename:
          type: string
          example: school-update.pdf
        mime_type:
          type: string
          example: application/pdf
        file_size_bytes:
          type: integer
          example: 10240
        ingest_status:
          type: string
          example: ready
        download_url:
          type: string
          format: uri
          nullable: true
        preview_url:
          type: string
          format: uri
          nullable: true
      type: object
    CommunicationsSendblueLine:
      properties:
        id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: false
        phone_number:
          type: string
          example: '+15551234567'
        provider_line_id:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        label:
          description: Serialized value.
          type: string
          example: Example
          nullable: true
        source:
          type: string
          example: client_managed_imported
        status:
          type: string
          example: active
        is_default:
          type: boolean
          example: true
        line_role:
          type: string
          example: general
        assigned_user_id:
          description: Organization-owned record identifier.
          type: integer
          example: 42
          nullable: true
        visibility:
          type: string
          example: shared
        metadata:
          description: Stored line/provisioning metadata; provider fields vary.
          oneOf:
            - type: object
              additionalProperties: {}
            - type: array
              items: {}
      type: object
  securitySchemes:
    bearerAuth:
      type: http
      description: Passport bearer token authentication for legacy admin sessions.
      scheme: bearer
      bearerFormat: JWT
    apiKeyAuth:
      type: apiKey
      description: Gratona API key sent with the compatibility header X-HYS-API-Key.
      name: X-HYS-API-Key
      in: header

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.