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

# Submit a story with signed consent

> Creates a ready_for_review story from an active public intake path, stores the signed consent release privately and records optional media and offer details. It does not approve or publish the story. Limited to 20 submissions per organization per hour as well as the route throttle. Requires the impact_stories feature.



## OpenAPI

````yaml post /frontend/impact-stories/intake/{slug}
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:
  /frontend/impact-stories/intake/{slug}:
    post:
      tags:
        - Impact Stories
      summary: Submit a story with signed consent
      description: >-
        Creates a ready_for_review story from an active public intake path,
        stores the signed consent release privately and records optional media
        and offer details. It does not approve or publish the story. Limited to
        20 submissions per organization per hour as well as the route throttle.
        Requires the impact_stories feature.
      operationId: impactStoryPublicSubmitIntake
      parameters:
        - name: slug
          in: path
          description: Public intake path slug.
          required: true
          schema:
            type: string
          example: education-updates
      requestBody:
        description: Validated request fields for this operation.
        required: true
        content:
          multipart/form-data:
            schema:
              required:
                - short_update
                - consent_scope
                - signer_name
                - signature_text
                - release_accepted
              properties:
                program_id:
                  description: 'Program id. Validation: nullable, integer.'
                  type: integer
                  example: 1
                  nullable: true
                program_label:
                  description: 'Program label. Validation: nullable, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Education
                  nullable: true
                short_update:
                  description: 'Short update. Validation: required, string, max:1000.'
                  type: string
                  maxLength: 1000
                  example: Students received their new school supplies.
                impact_metrics:
                  description: 'Impact metrics. Validation: nullable, string, max:2000.'
                  type: string
                  maxLength: 2000
                  example: Impact Metrics
                  nullable: true
                media_source_url:
                  description: 'Media source url. Validation: nullable, url, max:2048.'
                  type: string
                  format: uri
                  maxLength: 2048
                  example: https://example.org/story
                  nullable: true
                cost_amount:
                  description: 'Cost amount. Validation: nullable, numeric, min:0.'
                  type: number
                  minimum: 0
                  example: 25
                  nullable: true
                cost_currency:
                  description: 'Cost currency. Validation: nullable, string, max:16.'
                  type: string
                  maxLength: 16
                  example: Cost Currency
                  nullable: true
                cost_label:
                  description: 'Cost label. Validation: nullable, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Cost Label
                  nullable: true
                submitter_name:
                  description: 'Submitter name. Validation: nullable, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Submitter Name
                  nullable: true
                submitter_email:
                  description: 'Submitter email. Validation: nullable, email, max:255.'
                  type: string
                  format: email
                  maxLength: 255
                  example: jane@example.org
                  nullable: true
                consent_scope:
                  description: >-
                    Consent scope. Validation: required, string; allowed values:
                    donor_safe, public_safe.
                  type: string
                  enum:
                    - donor_safe
                    - public_safe
                  example: donor_safe
                signer_name:
                  description: 'Signer name. Validation: required, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Jane Donor
                signer_email:
                  description: 'Signer email. Validation: nullable, email, max:255.'
                  type: string
                  format: email
                  maxLength: 255
                  example: jane@example.org
                  nullable: true
                signer_role:
                  description: 'Signer role. Validation: nullable, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Signer Role
                  nullable: true
                signature_text:
                  description: 'Signature text. Validation: required, string, max:255.'
                  type: string
                  maxLength: 255
                  example: Jane Donor
                release_text:
                  description: 'Release text. Validation: nullable, string, max:4000.'
                  type: string
                  maxLength: 4000
                  example: Release Text
                  nullable: true
                release_accepted:
                  description: 'Release accepted. Validation: accepted.'
                  type: boolean
                  example: true
                release_file:
                  description: >-
                    Release file. Validation: nullable, file, max:10240,
                    mimes:pdf,jpg,jpeg,png,webp,doc,docx; maximum file size
                    10240 KiB.
                  type: string
                  format: binary
                  nullable: true
              type: object
      responses:
        '201':
          description: Operation result.
          content:
            application/json:
              schema:
                properties:
                  status:
                    type: string
                    example: success
                  data:
                    properties:
                      story_id:
                        description: Record identifier.
                        type: integer
                        example: 42
                        nullable: false
                      title:
                        description: Value returned by the story workflow.
                        type: string
                        example: Education update
                        nullable: true
                      status:
                        type: string
                        enum:
                          - ready_for_review
                        example: ready_for_review
                      submitted_at:
                        description: Timestamp.
                        type: string
                        format: date-time
                        example: '2026-10-20T12:00:00Z'
                        nullable: true
                    type: object
                type: object
        '404':
          description: >-
            The impact_stories feature is disabled, the program does not exist
            in this organization, or the public intake path is
            inactive/unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
        '422':
          description: Request validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
        '429':
          description: >-
            The public upload throttle or organization hourly submission limit
            was exceeded.
      security: []
components:
  schemas:
    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
    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

````

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