> ## 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.

# Edit a draft donor message

> Updates the subject, message body, and optional S3 attachment marker for an existing draft donor message. Admin users call this before approving draft communications in the email manager. Requires the admin API auth middleware and user permission checks.



## OpenAPI

````yaml patch /admin/message/draft/{email_id}/edit
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 sponsorship relationships, lifecycle transitions, and
      sponsorship-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: Client
    description: Client
  - name: Email Settings
    description: Email Settings
  - name: Admin Dashboard
    description: Admin Dashboard
  - name: Historical Archived Updates
    description: Historical Archived Updates
  - name: Team & access
    description: Team & access
  - name: Files
    description: Files
  - name: Wrapped
    description: Wrapped
  - name: Donor SignUp
    description: Donor SignUp
  - name: Frontend
    description: Frontend
  - name: User
    description: User
paths:
  /admin/message/draft/{email_id}/edit:
    patch:
      tags:
        - Communications
      summary: Edit a draft donor message
      description: >-
        Updates the subject, message body, and optional S3 attachment marker for
        an existing draft donor message. Admin users call this before approving
        draft communications in the email manager. Requires the admin API auth
        middleware and user permission checks.
      operationId: d3729790bb79b0945a50f5b0dfe4974e
      parameters:
        - name: email_id
          in: path
          description: >-
            Draft donor-email ID to update. The controller loads this ID from
            the donor email table before saving body and subject changes.
          required: true
          schema:
            type: integer
            format: int64
          example: 8712
      requestBody:
        description: >-
          Optional fields to update on a draft in the authenticated workspace.
          Body-only edits preserve the saved attachment identity; supplying
          fileName replaces its attachment marker.
        required: false
        content:
          application/json:
            schema:
              properties:
                subject:
                  description: Optional replacement subject for the draft.
                  type: string
                  example: Updated sponsorship message
                  nullable: true
                message:
                  description: >-
                    Optional replacement body. Saved attachment identity is
                    retained when no replacement file is supplied.
                  type: string
                  example: Thank you for your update.
                  nullable: true
                fileName:
                  description: >-
                    Optional display filename appended to the message as an
                    attachment marker.
                  type: string
                  example: letter.pdf
                  nullable: true
                fileStorageKey:
                  description: Optional S3 storage key paired with `fileName`.
                  type: string
                  example: messages/letter-8712.pdf
                  nullable: true
              type: object
      responses:
        '200':
          description: Draft was updated.
          content:
            application/json:
              schema:
                properties:
                  message:
                    description: Update confirmation.
                    type: string
                    example: Message draft successfully updated
                type: object
        '401':
          description: Missing or invalid API key or bearer token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
      security:
        - bearerAuth: []
        - apiKeyAuth: []
components:
  schemas:
    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
  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.