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

# Start bank redirect for a campaign donation

> Public, throttled to 30 requests per minute. Submit one recipient with amount/donation_amount, or a non-empty designations cart. Amounts must be positive decimals and allowed recurring selections must satisfy each program amount policy. Additional gifts must use designations allowed by the donor form and valid recipient routing. Existing donor emails require the verified checkout session; new donors must satisfy public donor identity and conditional form requirements. Recurring gifts require reusable bank support, while a valid future next date confirms the bank account for later collection. return_path is relative to the client app. A stale supplied policy_revision returns 409; a missing configured donor form returns 400. The method stores validated checkout details for bank-confirmed replay.



## OpenAPI

````yaml post /frontend/checkout/campaign-ideal/{client_id}/{program_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 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/checkout/campaign-ideal/{client_id}/{program_id}:
    post:
      tags:
        - Public
      summary: Start bank redirect for a campaign donation
      description: >-
        Public, throttled to 30 requests per minute. Submit one recipient with
        amount/donation_amount, or a non-empty designations cart. Amounts must
        be positive decimals and allowed recurring selections must satisfy each
        program amount policy. Additional gifts must use designations allowed by
        the donor form and valid recipient routing. Existing donor emails
        require the verified checkout session; new donors must satisfy public
        donor identity and conditional form requirements. Recurring gifts
        require reusable bank support, while a valid future next date confirms
        the bank account for later collection. return_path is relative to the
        client app. A stale supplied policy_revision returns 409; a missing
        configured donor form returns 400. The method stores validated checkout
        details for bank-confirmed replay.
      operationId: docDonorSignupPrepareStripeIdealCampaignCheckoutPOST
      parameters:
        - name: client_id
          in: path
          description: Client id.
          required: true
          schema:
            type: integer
            minimum: 1
            example: 207
          example: 207
        - name: program_id
          in: path
          description: Program id.
          required: true
          schema:
            description: >-
              Program route; order/cart methods may accept hyphen-separated
              program IDs.
            type: string
            example: '11'
          example: '11'
      requestBody:
        description: >-
          Request fields accepted by this operation. Omitted optional properties
          retain the behavior described above.
        required: true
        content:
          application/json:
            schema:
              required:
                - return_path
                - email
              properties:
                first_name:
                  type: string
                last_name:
                  type: string
                firstName:
                  type: string
                lastName:
                  type: string
                phone:
                  type: string
                street:
                  type: string
                street2:
                  type: string
                city:
                  type: string
                state:
                  type: string
                zip:
                  type: string
                country:
                  type: string
                organization_name:
                  type: string
                  maxLength: 255
                signup_username:
                  description: >-
                    Required and unique within the organization when
                    checkout_mode=signup.
                  type: string
                  minLength: 5
                policy_revision:
                  type: string
                type:
                  description: >-
                    Organization identity requires organization_name (max 255).
                    Missing type normalizes to INDIVIDUAL.
                  type: string
                  default: INDIVIDUAL
                  enum:
                    - INDIVIDUAL
                    - ORGANIZATION
                email:
                  description: >-
                    Required for campaign and new signup checkout. Existing
                    donor email requires a verified checkout session before
                    payment.
                  type: string
                  format: email
                custom_fields:
                  description: >-
                    Public donation-field map, at most 100 keys, admitted by
                    donation_field_checkout_v1 and currently visible
                    definitions. Required public fields and select choices are
                    enforced; hidden conditional children are excluded. Text is
                    at most 5000 characters; date values use Y-m-d, numbers are
                    numeric. With the rollout disabled, this map must be empty.
                  maxProperties: 100
                  type: object
                  nullable: true
                  additionalProperties:
                    oneOf:
                      - type: string
                        maxLength: 5000
                        nullable: true
                      - type: number
                        nullable: true
                return_path:
                  description: >-
                    Required app-relative return path: starts with one slash,
                    never //, and contains no backslash.
                  type: string
                  maxLength: 2000
                  minLength: 1
                  pattern: ^/(?!/)[^\\\\]*$
                  example: /donate/return
                check_number:
                  type: string
                  maxLength: 100
                  nullable: true
                next:
                  description: >-
                    Optional recurring start date; a valid future date creates a
                    setup-only bank confirmation.
                  type: string
                  format: date
                entity_id:
                  description: Required when no non-empty designations cart is supplied.
                  type: integer
                amount:
                  description: >-
                    Single recipient amount; required without donation_amount
                    unless a cart is supplied.
                  type: number
                  minimum: 0.01
                donation_amount:
                  description: Legacy single-recipient amount alias.
                  type: number
                  minimum: 0.01
                frequency:
                  description: Single-recipient payment frequency label.
                  type: string
                  default: one time
                is_custom_amount:
                  type: boolean
                designations:
                  type: array
                  items:
                    required:
                      - entity_id
                      - amount
                      - frequency
                    properties:
                      entity_id:
                        description: 'Validation: `required|integer`.'
                        type: integer
                      amount:
                        description: 'Validation: `required|numeric|min:0.01`.'
                        type: number
                        minimum: 0.01
                      frequency:
                        description: 'Validation: `required|string`.'
                        type: string
                      is_custom_amount:
                        description: 'Validation: `nullable|boolean`.'
                        type: boolean
                        nullable: true
                    type: object
                  minItems: 1
                additional_gifts:
                  type: array
                  items:
                    required:
                      - designation_id
                      - amount
                    properties:
                      designation_id:
                        description: 'Validation: `required|integer`.'
                        type: integer
                      amount:
                        description: 'Validation: `required|numeric|min:0.01`.'
                        type: number
                        minimum: 0.01
                      attach_to_other_entity:
                        description: 'Validation: `nullable|boolean`.'
                        type: boolean
                        nullable: true
                      other_entity_id:
                        description: 'Validation: `nullable|integer`.'
                        type: integer
                        nullable: true
                    type: object
                  nullable: true
                confirmation_token:
                  description: >-
                    Optional Stripe native iDEAL confirmation token for this
                    checkout processor.
                  type: string
                  maxLength: 255
                  pattern: ^ctoken_[A-Za-z0-9]+$
                  example: ctoken_example123
                  nullable: true
              type: object
              additionalProperties: true
      responses:
        '200':
          description: Start bank redirect for a campaign donation response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicIdealRedirectReceiptDoc'
        '400':
          description: >-
            The requested operation cannot be applied to the current resource or
            input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
        '404':
          description: >-
            The organization-owned resource or parent was not found or is not
            available for this operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
        '409':
          description: >-
            The request conflicts with the current resource state or service
            configuration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
        '422':
          description: Request validation or a domain constraint failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
        '429':
          description: The request rate limit was exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RequestRejection'
      security: []
components:
  schemas:
    PublicIdealRedirectReceiptDoc:
      properties:
        status:
          type: string
          enum:
            - redirect
        checkout_token:
          type: string
          format: uuid
        checkout_secret:
          description: >-
            Browser possession secret for disclosing the full result; retain
            alongside the checkout token.
          type: string
        redirect_url:
          description: >-
            Provider bank redirect, possibly null when already confirmed or no
            next action is required.
          type: string
          format: uri
          nullable: true
        program_id:
          description: >-
            Present for order checkout. Use this anchor ID when
            completing/canceling an order with a composite program route.
          type: integer
      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.