{
  "components": {
    "schemas": {
      "DonationRequest": {
        "properties": {
          "bank_transaction_ref": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Bank Transaction Ref",
            "type": "string"
          },
          "cardholder_message": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cardholder Message"
          },
          "dollar_amount": {
            "description": "USD value after points conversion. Must be strictly positive.",
            "exclusiveMinimum": 0.0,
            "title": "Dollar Amount",
            "type": "number"
          },
          "fund_designation": {
            "title": "Fund Designation",
            "type": "string"
          },
          "loyalty_program_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Loyalty Program Id"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          },
          "notify_cardholder": {
            "default": true,
            "title": "Notify Cardholder",
            "type": "boolean"
          },
          "points_per_dollar": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Points Per Dollar"
          },
          "points_redeemed": {
            "default": 0,
            "minimum": 0.0,
            "title": "Points Redeemed",
            "type": "integer"
          },
          "recurrence_cadence": {
            "anyOf": [
              {
                "enum": [
                  "monthly",
                  "quarterly"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recurrence Cadence"
          },
          "recurring": {
            "default": false,
            "title": "Recurring",
            "type": "boolean"
          },
          "school_id": {
            "title": "School Id",
            "type": "string"
          },
          "wishbone_user_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wishbone User Id"
          }
        },
        "required": [
          "school_id",
          "fund_designation",
          "dollar_amount",
          "bank_transaction_ref"
        ],
        "title": "DonationRequest",
        "type": "object"
      },
      "EmbedTokenRequest": {
        "properties": {
          "cancel_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cancel Url"
          },
          "dollar_amount": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dollar Amount"
          },
          "expires_in": {
            "default": 600,
            "description": "Token TTL in seconds. Max 900 (15 min).",
            "maximum": 900.0,
            "minimum": 60.0,
            "title": "Expires In",
            "type": "integer"
          },
          "fund_designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fund Designation"
          },
          "lock_amount": {
            "default": false,
            "title": "Lock Amount",
            "type": "boolean"
          },
          "lock_school": {
            "default": false,
            "title": "Lock School",
            "type": "boolean"
          },
          "return_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Return Url"
          },
          "school_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "School Id"
          },
          "theme_override": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Theme Override"
          },
          "wishbone_user_id": {
            "title": "Wishbone User Id",
            "type": "string"
          }
        },
        "required": [
          "wishbone_user_id"
        ],
        "title": "EmbedTokenRequest",
        "type": "object"
      },
      "FollowRequest": {
        "properties": {
          "follow": {
            "title": "Follow",
            "type": "boolean"
          }
        },
        "required": [
          "follow"
        ],
        "title": "FollowRequest",
        "type": "object"
      },
      "ForgotPasswordRequest": {
        "properties": {
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "title": "ForgotPasswordRequest",
        "type": "object"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "title": "Detail",
            "type": "array"
          }
        },
        "title": "HTTPValidationError",
        "type": "object"
      },
      "LinkRequest": {
        "properties": {
          "bank_user_id": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Bank User Id",
            "type": "string"
          },
          "display_name": {
            "maxLength": 255,
            "minLength": 1,
            "title": "Display Name",
            "type": "string"
          },
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          },
          "fund_designation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fund Designation"
          },
          "loyalty_program_id": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Loyalty Program Id",
            "type": "string"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          },
          "phone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phone"
          },
          "redirect_uri": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Redirect Uri"
          },
          "school_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "School Id"
          },
          "tax_receipt_email": {
            "anyOf": [
              {
                "format": "email",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tax Receipt Email"
          }
        },
        "required": [
          "bank_user_id",
          "email",
          "display_name",
          "loyalty_program_id"
        ],
        "title": "LinkRequest",
        "type": "object"
      },
      "LoginRequest": {
        "properties": {
          "email": {
            "format": "email",
            "title": "Email",
            "type": "string"
          },
          "mfa_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Mfa Code"
          },
          "password": {
            "title": "Password",
            "type": "string"
          }
        },
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest",
        "type": "object"
      },
      "LogoutRequest": {
        "properties": {
          "refresh_token": {
            "title": "Refresh Token",
            "type": "string"
          }
        },
        "required": [
          "refresh_token"
        ],
        "title": "LogoutRequest",
        "type": "object"
      },
      "PasswordChange": {
        "properties": {
          "current_password": {
            "title": "Current Password",
            "type": "string"
          },
          "new_password": {
            "title": "New Password",
            "type": "string"
          }
        },
        "required": [
          "current_password",
          "new_password"
        ],
        "title": "PasswordChange",
        "type": "object"
      },
      "PortalDonationRequest": {
        "properties": {
          "cardholder_message": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cardholder Message"
          },
          "dollar_amount": {
            "exclusiveMinimum": 0.0,
            "title": "Dollar Amount",
            "type": "number"
          },
          "fund_designation": {
            "title": "Fund Designation",
            "type": "string"
          },
          "loyalty_account_id": {
            "format": "uuid",
            "title": "Loyalty Account Id",
            "type": "string"
          },
          "notify_by_email": {
            "default": true,
            "title": "Notify By Email",
            "type": "boolean"
          },
          "school_id": {
            "title": "School Id",
            "type": "string"
          }
        },
        "required": [
          "loyalty_account_id",
          "school_id",
          "fund_designation",
          "dollar_amount"
        ],
        "title": "PortalDonationRequest",
        "type": "object"
      },
      "PreferencesUpdate": {
        "properties": {
          "email_campaign_updates": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email Campaign Updates"
          },
          "email_donation_confirmation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email Donation Confirmation"
          },
          "email_tax_receipt": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email Tax Receipt"
          },
          "email_wishbone_newsletter": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email Wishbone Newsletter"
          },
          "marketing_opt_in": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketing Opt In"
          },
          "push_donation_confirmation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Push Donation Confirmation"
          },
          "push_school_campaigns": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Push School Campaigns"
          },
          "sms_campaign_alerts": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sms Campaign Alerts"
          },
          "sms_donation_confirmation": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sms Donation Confirmation"
          }
        },
        "title": "PreferencesUpdate",
        "type": "object"
      },
      "ProfileUpdate": {
        "properties": {
          "display_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "password": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PasswordChange"
              },
              {
                "type": "null"
              }
            ]
          },
          "phone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phone"
          },
          "preferred_fund": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preferred Fund"
          },
          "preferred_school_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Preferred School Id"
          },
          "tax_receipt_email": {
            "anyOf": [
              {
                "format": "email",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tax Receipt Email"
          }
        },
        "title": "ProfileUpdate",
        "type": "object"
      },
      "RefreshRequest": {
        "properties": {
          "refresh_token": {
            "title": "Refresh Token",
            "type": "string"
          }
        },
        "required": [
          "refresh_token"
        ],
        "title": "RefreshRequest",
        "type": "object"
      },
      "ResendRequest": {
        "properties": {
          "email": {
            "anyOf": [
              {
                "format": "email",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Email"
          }
        },
        "title": "ResendRequest",
        "type": "object"
      },
      "UnlinkRequest": {
        "properties": {
          "reason": {
            "anyOf": [
              {
                "enum": [
                  "cardholder_request",
                  "bank_policy",
                  "fraud_review",
                  "account_closure"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          }
        },
        "title": "UnlinkRequest",
        "type": "object"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Location",
            "type": "array"
          },
          "msg": {
            "title": "Message",
            "type": "string"
          },
          "type": {
            "title": "Error Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "type": "object"
      }
    },
    "securitySchemes": {
      "APIKeyHeader": {
        "in": "header",
        "name": "X-Wishbone-API-Key",
        "type": "apiKey"
      },
      "HTTPBearer": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "\nWishbone converts loyalty and credit card reward points into contributions\nto university athletic foundations.\n\n**This is the sandbox environment.** No real money moves. Use the test API key\nissued at signup. All platform adapter calls return realistic stub responses.\n\n**Sandbox base URL:** `https://sandbox.api.getwishbone.io`\n    ",
    "title": "Wishbone API",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/accounts/link": {
      "post": {
        "operationId": "link_account_v1_accounts_link_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LinkRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Link a Cardholder",
        "tags": [
          "Accounts"
        ]
      }
    },
    "/v1/accounts/linked": {
      "get": {
        "operationId": "list_linked_v1_accounts_linked_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "default": "active",
              "title": "Status",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "in": "query",
            "name": "created_after",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created After"
            }
          },
          {
            "in": "query",
            "name": "created_before",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Created Before"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "List Linked Accounts",
        "tags": [
          "Accounts"
        ]
      }
    },
    "/v1/accounts/{wishbone_user_id}": {
      "delete": {
        "operationId": "unlink_account_v1_accounts__wishbone_user_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "wishbone_user_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Wishbone User Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/UnlinkRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Unlink a Cardholder",
        "tags": [
          "Accounts"
        ]
      },
      "get": {
        "operationId": "get_account_v1_accounts__wishbone_user_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "wishbone_user_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Wishbone User Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Get Single Linked Account",
        "tags": [
          "Accounts"
        ]
      }
    },
    "/v1/donations/request": {
      "post": {
        "operationId": "request_donation_v1_donations_request_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DonationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Submit Donation Request",
        "tags": [
          "Donations"
        ]
      }
    },
    "/v1/donations/{donation_id}": {
      "get": {
        "operationId": "get_donation_v1_donations__donation_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "donation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Donation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Get Donation Status",
        "tags": [
          "Donations"
        ]
      }
    },
    "/v1/embed/token": {
      "post": {
        "operationId": "generate_embed_token_v1_embed_token_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmbedTokenRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Generate Embed Token",
        "tags": [
          "Embed"
        ]
      }
    },
    "/v1/portal/auth/forgot-password": {
      "post": {
        "operationId": "forgot_password_v1_portal_auth_forgot_password_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPasswordRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Forgot Password",
        "tags": [
          "Portal \u2014 Auth"
        ]
      }
    },
    "/v1/portal/auth/login": {
      "post": {
        "operationId": "login_v1_portal_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Cardholder Login",
        "tags": [
          "Portal \u2014 Auth"
        ]
      }
    },
    "/v1/portal/auth/logout": {
      "post": {
        "operationId": "logout_v1_portal_auth_logout_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LogoutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Logout",
        "tags": [
          "Portal \u2014 Auth"
        ]
      }
    },
    "/v1/portal/auth/refresh": {
      "post": {
        "operationId": "refresh_v1_portal_auth_refresh_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RefreshRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "summary": "Refresh Token",
        "tags": [
          "Portal \u2014 Auth"
        ]
      }
    },
    "/v1/portal/donations": {
      "get": {
        "operationId": "list_donations_v1_portal_donations_get",
        "parameters": [
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "school_id",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "School Id"
            }
          },
          {
            "in": "query",
            "name": "from",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "From"
            }
          },
          {
            "in": "query",
            "name": "to",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "format": "date-time",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "To"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 25,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "List My Donations",
        "tags": [
          "Portal \u2014 Donations"
        ]
      },
      "post": {
        "operationId": "create_donation_v1_portal_donations_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortalDonationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Create Donation (Portal-Initiated)",
        "tags": [
          "Portal \u2014 Donations"
        ]
      }
    },
    "/v1/portal/donations/{donation_id}": {
      "get": {
        "operationId": "get_donation_v1_portal_donations__donation_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "donation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Donation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Donation Detail",
        "tags": [
          "Portal \u2014 Donations"
        ]
      }
    },
    "/v1/portal/donations/{donation_id}/receipt": {
      "get": {
        "operationId": "get_receipt_v1_portal_donations__donation_id__receipt_get",
        "parameters": [
          {
            "in": "path",
            "name": "donation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Donation Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Tax Receipt",
        "tags": [
          "Portal \u2014 Donations"
        ]
      }
    },
    "/v1/portal/donations/{donation_id}/receipt/resend": {
      "post": {
        "operationId": "resend_receipt_v1_portal_donations__donation_id__receipt_resend_post",
        "parameters": [
          {
            "in": "path",
            "name": "donation_id",
            "required": true,
            "schema": {
              "format": "uuid",
              "title": "Donation Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ResendRequest"
                  },
                  {
                    "type": "null"
                  }
                ],
                "title": "Body"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Resend Tax Receipt",
        "tags": [
          "Portal \u2014 Donations"
        ]
      }
    },
    "/v1/portal/me": {
      "get": {
        "operationId": "get_me_v1_portal_me_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get My Profile",
        "tags": [
          "Portal \u2014 Profile"
        ]
      },
      "patch": {
        "operationId": "update_me_v1_portal_me_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update My Profile",
        "tags": [
          "Portal \u2014 Profile"
        ]
      }
    },
    "/v1/portal/me/loyalty-accounts": {
      "get": {
        "operationId": "get_loyalty_accounts_v1_portal_me_loyalty_accounts_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Linked Loyalty Accounts",
        "tags": [
          "Portal \u2014 Profile"
        ]
      }
    },
    "/v1/portal/preferences": {
      "get": {
        "operationId": "get_preferences_v1_portal_preferences_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Get Communication Preferences",
        "tags": [
          "Portal \u2014 Preferences"
        ]
      },
      "patch": {
        "operationId": "update_preferences_v1_portal_preferences_patch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreferencesUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Update Communication Preferences",
        "tags": [
          "Portal \u2014 Preferences"
        ]
      }
    },
    "/v1/portal/schools": {
      "get": {
        "operationId": "browse_schools_v1_portal_schools_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State"
            }
          },
          {
            "in": "query",
            "name": "conference",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Conference"
            }
          },
          {
            "in": "query",
            "name": "followed",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Followed"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Browse Schools (Portal)",
        "tags": [
          "Portal \u2014 Schools"
        ]
      }
    },
    "/v1/portal/schools/{school_id}/follow": {
      "post": {
        "operationId": "follow_school_v1_portal_schools__school_id__follow_post",
        "parameters": [
          {
            "in": "path",
            "name": "school_id",
            "required": true,
            "schema": {
              "title": "School Id",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FollowRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "HTTPBearer": []
          }
        ],
        "summary": "Follow / Unfollow a School",
        "tags": [
          "Portal \u2014 Schools"
        ]
      }
    },
    "/v1/schools": {
      "get": {
        "operationId": "list_schools_v1_schools_get",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Search"
            }
          },
          {
            "in": "query",
            "name": "state",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "State"
            }
          },
          {
            "in": "query",
            "name": "conference",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Conference"
            }
          },
          {
            "in": "query",
            "name": "active",
            "required": false,
            "schema": {
              "default": true,
              "title": "Active",
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "List Schools",
        "tags": [
          "Schools"
        ]
      }
    },
    "/v1/schools/{school_id}": {
      "get": {
        "operationId": "get_school_v1_schools__school_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "school_id",
            "required": true,
            "schema": {
              "title": "School Id",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Get School Detail",
        "tags": [
          "Schools"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Sandbox \u2014 safe to test",
      "url": "https://sandbox.api.getwishbone.io"
    },
    {
      "description": "Production",
      "url": "https://api.getwishbone.io"
    }
  ],
  "tags": [
    {
      "description": "Link and manage cardholder accounts.",
      "name": "Accounts"
    },
    {
      "description": "Submit and track donation requests.",
      "name": "Donations"
    },
    {
      "description": "Browse active schools and funds.",
      "name": "Schools"
    },
    {
      "description": "Tokens for iframe and app browser flows.",
      "name": "Embed"
    },
    {
      "description": "Cardholder login, refresh, logout.",
      "name": "Portal \u2014 Auth"
    },
    {
      "description": "Cardholder donation history and receipts.",
      "name": "Portal \u2014 Donations"
    },
    {
      "description": "Profile and loyalty accounts.",
      "name": "Portal \u2014 Profile"
    },
    {
      "description": "Cardholder-facing school discovery and follows.",
      "name": "Portal \u2014 Schools"
    },
    {
      "description": "Communication preferences.",
      "name": "Portal \u2014 Preferences"
    }
  ]
}
