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

# Add a one-time donation from the donor dashboard

> Creates an additional donation from the donor portal — a logged-in donor adds a one-off gift on top of (or independent of) their existing commitments. Requires an authenticated Redis donor session.



## OpenAPI

````yaml post /frontend/donor/dashboard/{client_id}/{program_id}/{session_id}
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:
  /frontend/donor/dashboard/{client_id}/{program_id}/{session_id}:
    post:
      tags:
        - Donor Portal
      summary: Add a one-time donation from the donor dashboard
      description: >-
        Creates an additional donation from the donor portal — a logged-in donor
        adds a one-off gift on top of (or independent of) their existing
        commitments. Requires an authenticated Redis donor session.
      operationId: b74f784ed09053ea031793f0fcb1dca3
      parameters:
        - name: client_id
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: program_id
          in: path
          required: true
          schema:
            type: string
        - name: session_id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        description: >-
          Donation form payload (amount, currency, designation/entity_id,
          payment method details). Field set is large and depends on payment
          method; see the donation form on the donor dashboard for the canonical
          contract.
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: Donation processed.
          content:
            application/json:
              schema:
                properties:
                  status:
                    type: string
                    example: success
                  donation:
                    $ref: '#/components/schemas/Donation'
                type: object
        '401':
          description: No active donor session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
        '422':
          description: Validation failed or gateway rejected the charge.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorResponse'
      security: []
components:
  schemas:
    Donation:
      title: Donation
      description: >-
        An individual donation transaction. Donations may be one-time or part of
        a recurring `Commitment`. Despite the name, the `designation` column
        actually stores the recipient `entity_id` (it predates entities and was
        never renamed). Tax/refund/QuickBooks state lives on the donation row
        alongside the gateway transaction id.
      required:
        - id
        - client_id
        - donor_id
        - amount
        - currency
      properties:
        id:
          description: Internal donation ID.
          type: integer
          format: int64
          example: 983221
        client_id:
          description: Owning Gratona client (multi-tenant scope).
          type: integer
          format: int64
          example: 207
        donor_id:
          description: Donor who gave this donation.
          type: integer
          format: int64
          example: 12345
        designation:
          description: >-
            Recipient entity ID — see `Entity` schema. Historical naming: this
            is NOT an accounting designation, it is the entity / sponsorship
            target. Null for unrestricted gifts.
          type: integer
          format: int64
          example: 4711
          nullable: true
        type:
          description: >-
            Donation type code (gateway / source family). Internal enum; values
            include cash, check, credit card, ACH, in-kind, etc.
          type: integer
          example: 1
        method:
          description: >-
            Payment method code: 1=cash, 2=check, 3=Stripe-connect, 6=PayPal,
            9=Flutterwave, 10=Flutterwave-standard, 11=QPayPro,
            12=ACH-direct-debit, 13=in-kind. See `config/constants.php` for
            canonical mapping.
          type: integer
          example: 3
          nullable: true
        frequency:
          description: >-
            Recurrence cadence: 1=every-month, 2=every-3-months,
            3=every-6-months, 4=every-year, 5=one-time, 6=bi-weekly,
            7=every-2-months.
          type: integer
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
            - 6
            - 7
          example: 5
          nullable: true
        one_time:
          description: >-
            True for one-off gifts; false when the donation is part of a
            recurring commitment.
          type: boolean
          example: true
        duration:
          description: Optional end date for time-bounded recurring donations.
          type: string
          format: date
          example: '2027-01-15'
          nullable: true
        amount:
          description: >-
            Donor-stated gift amount in `currency`. Amounts are floats; do NOT
            do exact-money math without converting to minor units.
          type: number
          format: float
          example: 50
        actual_charged_amount:
          description: >-
            Amount the gateway actually captured (may differ from `amount` due
            to fees absorbed by donor or covered by Gratona).
          type: number
          format: float
          example: 49.45
          nullable: true
        currency:
          description: ISO 4217 currency code.
          type: string
          example: USD
        in_kind_category:
          description: Set only when `method` is in-kind (13).
          type: string
          enum:
            - stocks
            - goods
            - services
            - cryptocurrency
            - other
          example: goods
          nullable: true
        result:
          description: >-
            Free-form gateway result (e.g. successful, failed, pending).
            Gateway-specific values are common.
          type: string
          example: successful
          nullable: true
        transaction_id:
          description: >-
            External payment-gateway transaction ID (Stripe charge id, PayPal
            capture id, etc.).
          type: string
          example: ch_3OqXXXXX
          nullable: true
        transaction_status:
          description: External gateway status string.
          type: string
          example: succeeded
          nullable: true
        refunded:
          description: True if the donation has been at least partially refunded.
          type: boolean
          example: false
        refunded_amount:
          description: Amount refunded so far (in `currency`).
          type: number
          format: float
          example: 0
          nullable: true
        refundable:
          description: >-
            Whether the gateway integration believes this donation can still be
            refunded.
          type: boolean
          example: true
        is_tax_deductible:
          description: Whether the donation is reportable as tax-deductible giving.
          type: boolean
          example: true
        tags:
          description: Free-form donor / admin tags.
          type: array
          items:
            type: string
          example:
            - matching-gift
            - year-end
          nullable: true
        notes:
          description: Plaintext notes attached to the donation (memo line, admin remarks).
          type: string
          example: 'Memo: in honor of John Doe'
          nullable: true
        quickbooks_receipt_id:
          description: QuickBooks receipt id, if synced.
          type: string
          example: qbo_5512
          nullable: true
        receipt_sent_at:
          description: When the donation receipt email was last sent (null if never).
          type: string
          format: date-time
          example: '2026-01-02T08:30:00Z'
          nullable: true
        acknowledged_at:
          description: >-
            When this gift was acknowledged for stewardship tracking. Null means
            pending acknowledgement.
          type: string
          format: date-time
          example: '2026-01-03T10:15:00Z'
          nullable: true
        acknowledged_by_user_id:
          description: Admin user who last acknowledged the gift, when known.
          type: integer
          format: int64
          example: 42
          nullable: true
        acknowledgement_source:
          description: How the gift was acknowledged.
          type: string
          enum:
            - manual
            - auto_email
            - receipt
            - mailing
            - interaction
            - import
          example: manual
          nullable: true
        acknowledgement_context_json:
          description: >-
            Lightweight acknowledgement metadata such as note, previous state,
            or receipt context.
          type: object
          nullable: true
          additionalProperties: true
        json_fields:
          description: >-
            Custom donation fields configured per client (similar to
            donor/entity custom fields).
          type: object
          nullable: true
          additionalProperties: true
        batch_id:
          description: Set when imported via CSV; groups donations imported together.
          type: integer
          format: int64
          example: null
          nullable: true
        is_csv_import:
          description: >-
            True when the row was created from a CSV import (vs. live gateway
            charge).
          type: boolean
          example: false
        created_at:
          type: string
          format: date-time
          example: '2026-01-02T08:25:00Z'
        updated_at:
          type: string
          format: date-time
          example: '2026-01-02T08:30:00Z'
        deleted_at:
          type: string
          format: date-time
          example: null
          nullable: true
      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
    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

````

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