mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-23 14:40:36 +01:00
* wip * Cleanups * UI updates * Update UIFormsController.cs * Make predefined forms usable statically * Add support for pos app + forms * pay request form rough support * invoice form through receipt page * Display form name in inherit from store setting * Do not request additional forms on invoice from pay request * fix up code * move checkoutform id in checkout appearance outside of checkotu v2 toggle * general fixes for form system * fix pav bug * UI updates * Fix warnings in Form builder (#4331) * Fix build warnings about string? Enable nullable on UIFormsController.cs Fixes CS8632 The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. * Clean up lack of space in injected services in Submit() of UIFormsController.cs * Remove unused variables (CS0219) and assignment of nullable value to nullable type (CS8600) * Cleanup double semicolons while we're at tit * Fix: If reverse proxy wasn't well configured, and error message should have been displayed (#4322) * fix monero issue * Server Settings: Update Policies page (#4326) Handles the multiple submit buttons on that page and closes #4319. Contains some UI unifications with other pages and also shows the block explorers without needing to toggle the section via JS. * Change confirmed to settled. (#4328) * POS: Fix null pointer Introduced in #4307, the referenced object needs to be `itemChoice` instead of `choice`. * Add documentation link to plugins (#4329) * Add documentation link to plugins * Minor UI updates Co-authored-by: Dennis Reimann <mail@dennisreimann.de> * Fix flaky test (#4330) * Fix flaky test * Update BTCPayServer/PayoutProcessors/BaseAutomatedPayoutProcessor.cs Co-authored-by: d11n <mail@dennisreimann.de> Co-authored-by: d11n <mail@dennisreimann.de> * Remove invoice and store level form * add form test * fix migration for forms * fix * make pay request form submission redirect to invoice * Refactor FormQuery to only be able to query single store and single form * Put the Authorize at controller level on UIForms * Fix warnings * Fix ef request * Fix query to forms, ensure no permission bypass * Fix modify * Remove storeId from step form * Remove useless storeId parameter * Hide custom form feature in UI * Minor cleanups * Remove custom form options from select for now * More minor syntax cleanups * Update test * Add index - needs migration * Refactoring: Use PostRedirect instead of TempData for data transfer * Remove untested and unfinished code * formResponse should be a JObject, not a string * Fix case for Form type Co-authored-by: Dennis Reimann <mail@dennisreimann.de> Co-authored-by: JesterHodl <103882255+jesterhodl@users.noreply.github.com> Co-authored-by: Nicolas Dorier <nicolas.dorier@gmail.com> Co-authored-by: Andreas Tasch <andy.tasch@gmail.com>
618 lines
25 KiB
JSON
618 lines
25 KiB
JSON
{
|
|
"paths": {
|
|
"/api/v1/stores/{storeId}/apps/pos": {
|
|
"parameters": [
|
|
{
|
|
"name": "storeId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The store ID",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"post": {
|
|
"operationId": "Apps_CreatePointOfSaleApp",
|
|
"summary": "Create a new Point of Sale app",
|
|
"description": "Point of Sale app allows accepting payments for items in a virtual store",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatePointOfSaleAppRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true,
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Created app details",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PointOfSaleAppData"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unable to validate the request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ValidationProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"Apps"
|
|
],
|
|
"security": [
|
|
{
|
|
"API_Key": [
|
|
"btcpay.store.canmodifystoresettings"
|
|
],
|
|
"Basic": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/v1/apps/pos/{appId}": {
|
|
"parameters": [
|
|
{
|
|
"name": "appId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "App ID",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"put": {
|
|
"operationId": "Apps_PutPointOfSaleApp",
|
|
"summary": "Update a Point of Sale app",
|
|
"description": "Use this endpoint for updating the properties of a POS app",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatePointOfSaleAppRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true,
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "App details",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PointOfSaleAppData"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unable to validate the request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ValidationProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"Apps"
|
|
],
|
|
"security": [
|
|
{
|
|
"API_Key": [
|
|
"btcpay.store.canmodifystoresettings"
|
|
],
|
|
"Basic": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/v1/stores/{storeId}/apps/crowdfund": {
|
|
"parameters": [
|
|
{
|
|
"name": "storeId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The store ID",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"post": {
|
|
"operationId": "Apps_CreateCrowdfundApp",
|
|
"summary": "Create a new Crowdfund app",
|
|
"requestBody": {
|
|
"x-name": "request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateCrowdfundAppRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true,
|
|
"x-position": 1
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Created app details",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CrowdfundAppData"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Unable to validate the request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ValidationProblemDetails"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"Apps",
|
|
"Crowdfund"
|
|
],
|
|
"security": [
|
|
{
|
|
"API_Key": [
|
|
"btcpay.store.canmodifystoresettings"
|
|
],
|
|
"Basic": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/v1/apps/{appId}": {
|
|
"get": {
|
|
"tags": [
|
|
"Apps"
|
|
],
|
|
"operationId": "Apps_GetPointOfSaleApp",
|
|
"summary": "Get basic app data",
|
|
"description": "Returns basic app data shared between all types of apps",
|
|
"parameters": [
|
|
{
|
|
"name": "appId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The app ID",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Basic app data",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/BasicAppData"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "App with specified ID was not found"
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"API_Key": [
|
|
"btcpay.store.canmodifystoresettings"
|
|
],
|
|
"Basic": []
|
|
}
|
|
]
|
|
},
|
|
"delete": {
|
|
"tags": [
|
|
"Apps"
|
|
],
|
|
"operationId": "Apps_DeletePointOfSaleApp",
|
|
"summary": "Delete app",
|
|
"description": "Deletes apps with specified ID",
|
|
"parameters": [
|
|
{
|
|
"name": "appId",
|
|
"in": "path",
|
|
"required": true,
|
|
"description": "The app ID",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "App was deleted"
|
|
},
|
|
"404": {
|
|
"description": "App with specified ID was not found"
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"API_Key": [
|
|
"btcpay.store.canmodifystoresettings"
|
|
],
|
|
"Basic": []
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"PointOfSaleAppData": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BasicAppData"
|
|
},
|
|
{
|
|
}
|
|
]
|
|
},
|
|
"CrowdfundAppData": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BasicAppData"
|
|
},
|
|
{
|
|
}
|
|
]
|
|
},
|
|
"BasicAppData": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Id of the app",
|
|
"example": "3ki4jsAkN4u9rv1PUzj1odX4Nx7s"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Name given to the app when it was created",
|
|
"example": "my test app"
|
|
},
|
|
"storeId": {
|
|
"type": "string",
|
|
"description": "Id of the store to which the app belongs",
|
|
"example": "9CiNzKoANXxmk5ayZngSXrHTiVvvgCrwrpFQd4m2K776"
|
|
},
|
|
"created": {
|
|
"type": "integer",
|
|
"example": 1651554744,
|
|
"description": "UNIX timestamp for when the app was created"
|
|
},
|
|
"appType": {
|
|
"type": "string",
|
|
"example": "PointOfSale",
|
|
"description": "Type of the app which was created"
|
|
}
|
|
}
|
|
},
|
|
"CreatePointOfSaleAppRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"appName": {
|
|
"type": "string",
|
|
"description": "The name of the app (shown in admin UI)",
|
|
"nullable": false
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "The title of the app (shown to the user)",
|
|
"nullable": true
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "The description of the app",
|
|
"nullable": true
|
|
},
|
|
"template": {
|
|
"type": "string",
|
|
"description": "Template for items available in the app",
|
|
"nullable": true
|
|
},
|
|
"defaultView": {
|
|
"type": "string",
|
|
"description": "Template for items available in the app",
|
|
"nullable": true,
|
|
"x-enumNames": [
|
|
"Static",
|
|
"Cart",
|
|
"Light",
|
|
"Print"
|
|
],
|
|
"enum": [
|
|
"Static",
|
|
"Cart",
|
|
"Light",
|
|
"Print"
|
|
]
|
|
},
|
|
"currency": {
|
|
"type": "string",
|
|
"description": "Currency to use for the app. Defaults to the currency used by the store if not specified",
|
|
"example": "BTC",
|
|
"nullable": true
|
|
},
|
|
"showCustomAmount": {
|
|
"type": "boolean",
|
|
"description": "Whether to include a special item in the store which allows user to input a custom payment amount",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"showDiscount": {
|
|
"type": "boolean",
|
|
"description": "Whether to allow user to input a discount amount. Applies to Cart view only. Not recommended for customer self-checkout",
|
|
"default": true,
|
|
"nullable": true
|
|
},
|
|
"enableTips": {
|
|
"type": "boolean",
|
|
"description": "Whether to allow user to input a tip amount. Applies to Cart and Light views only",
|
|
"default": true,
|
|
"nullable": true
|
|
},
|
|
"customAmountPayButtonText": {
|
|
"type": "string",
|
|
"description": "Payment button text which appears for items which allow user to input a custom amount",
|
|
"default": "Pay",
|
|
"nullable": true
|
|
},
|
|
"fixedAmountPayButtonText": {
|
|
"type": "string",
|
|
"description": "Payment button text which appears for items which have a fixed price",
|
|
"default": "Buy for {PRICE_HERE}",
|
|
"nullable": true
|
|
},
|
|
"tipText": {
|
|
"type": "string",
|
|
"description": "Prompt which appears next to the tip amount field if tipping is enabled",
|
|
"default": "Do you want to leave a tip?",
|
|
"nullable": true
|
|
},
|
|
"customCSSLink": {
|
|
"type": "string",
|
|
"description": "Link to a custom CSS stylesheet to be used in the app",
|
|
"nullable": true
|
|
},
|
|
"embeddedCSS": {
|
|
"type": "string",
|
|
"description": "Custom CSS to embed into the app",
|
|
"nullable": true
|
|
},
|
|
"notificationUrl": {
|
|
"type": "string",
|
|
"description": "Callback notification url to POST to once when invoice is paid for and once when there are enough blockchain confirmations",
|
|
"nullable": true
|
|
},
|
|
"redirectUrl": {
|
|
"type": "string",
|
|
"description": "URL to redirect user to once invoice is paid",
|
|
"nullable": true
|
|
},
|
|
"redirectAutomatically": {
|
|
"type": "boolean",
|
|
"description": "Whether to redirect user to redirect URL automatically once invoice is paid. Defaults to what is set in the store settings",
|
|
"nullable": true
|
|
},
|
|
"requiresRefundEmail": {
|
|
"type": "boolean",
|
|
"description": "Whether to redirect user to redirect URL automatically once invoice is paid. Defaults to what is set in the store settings",
|
|
"nullable": true
|
|
},
|
|
"checkoutType": {
|
|
"$ref": "#/components/schemas/CheckoutType"
|
|
},
|
|
"formId": {
|
|
"type": "string",
|
|
"description": "Form ID to request customer data",
|
|
"nullable": true
|
|
}
|
|
}
|
|
},
|
|
"CreateCrowdfundAppRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"appName": {
|
|
"type": "string",
|
|
"description": "The name of the app (shown in admin UI)",
|
|
"example": "Kukkstarter",
|
|
"nullable": false
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "The title of the app (shown to the user)",
|
|
"example": "My crowdfund app",
|
|
"nullable": true
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "The description of the app (shown to the user)",
|
|
"example": "My app description",
|
|
"nullable": true
|
|
},
|
|
"enabled": {
|
|
"type": "boolean",
|
|
"description": "Determines if the app is enabled to be viewed by everyone",
|
|
"default": true,
|
|
"nullable": true
|
|
},
|
|
"enforceTargetAmount": {
|
|
"type": "boolean",
|
|
"description": "Will not allow contributions over the set target amount",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"startDate": {
|
|
"type": "number",
|
|
"description": "UNIX timestamp for crowdfund start time (https://www.unixtimestamp.com/)",
|
|
"allOf": [ {"$ref": "#/components/schemas/UnixTimestamp"}],
|
|
"example": 768658369,
|
|
"nullable": true
|
|
},
|
|
"endDate": {
|
|
"type": "number",
|
|
"description": "UNIX timestamp for crowdfund end time (https://www.unixtimestamp.com/)",
|
|
"allOf": [ {"$ref": "#/components/schemas/UnixTimestamp"}],
|
|
"example": 771336769,
|
|
"nullable": true
|
|
},
|
|
"targetCurrency": {
|
|
"type": "string",
|
|
"description": "Target currency for the crowdfund. Defaults to the currency used by the store if not specified",
|
|
"example": "BTC",
|
|
"nullable": true
|
|
},
|
|
"targetAmount": {
|
|
"type": "number",
|
|
"description": "Target amount for the crowdfund",
|
|
"example": 420,
|
|
"nullable": true
|
|
},
|
|
"customCSSLink": {
|
|
"type": "string",
|
|
"description": "Link to a custom CSS stylesheet to be used in the app",
|
|
"nullable": true
|
|
},
|
|
"mainImageUrl": {
|
|
"type": "string",
|
|
"description": "URL for image to be used as a cover image for the app",
|
|
"nullable": true
|
|
},
|
|
"embeddedCSS": {
|
|
"type": "string",
|
|
"description": "Custom CSS to embed into the app",
|
|
"nullable": true
|
|
},
|
|
"perksTemplate": {
|
|
"type": "string",
|
|
"description": "YAML template of perks available in the app",
|
|
"example": "test_perk:\r\n price: 100\r\n title: test perk\r\n price_type: \"fixed\" \r\n disabled: false",
|
|
"nullable": true
|
|
},
|
|
"notificationUrl": {
|
|
"type": "string",
|
|
"description": "Callback notification url to POST to once when invoice is paid for and once when there are enough blockchain confirmations",
|
|
"nullable": true
|
|
},
|
|
"tagline": {
|
|
"type": "string",
|
|
"description": "Tagline for the app (shown to the user)",
|
|
"example": "I can't believe it's not butter",
|
|
"nullable": true
|
|
},
|
|
"disqusShortname": {
|
|
"type": "string",
|
|
"description": "Disqus shortname to used for the app. Enables Disqus functionality if set.",
|
|
"nullable": true
|
|
},
|
|
"soundsEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enables sounds on new contributions if set to true",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"animationsEnabled": {
|
|
"type": "boolean",
|
|
"description": "Enables background animations on new contributions if set to true",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"resetEveryAmount": {
|
|
"type": "number",
|
|
"description": "Contribution goal reset frequency amount. Must be used in conjunction with resetEvery and startDate.",
|
|
"default": 1,
|
|
"nullable": true
|
|
},
|
|
"resetEvery": {
|
|
"type": "string",
|
|
"description": "Contribution goal reset frequency. Must be used in conjunction with resetEveryAmount and startDate.",
|
|
"nullable": true,
|
|
"default": "Never",
|
|
"x-enumNames": [
|
|
"Never",
|
|
"Hour",
|
|
"Day",
|
|
"Month",
|
|
"Year"
|
|
],
|
|
"enum": [
|
|
"Never",
|
|
"Hour",
|
|
"Day",
|
|
"Month",
|
|
"Year"
|
|
]
|
|
},
|
|
"displayPerksValue": {
|
|
"type": "boolean",
|
|
"description": "Enables background animations on new contributions if set to true",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"sortPerksByPopularity": {
|
|
"type": "boolean",
|
|
"description": "Sorts perks by popularity if set to true",
|
|
"default": false,
|
|
"nullable": true
|
|
},
|
|
"sounds": {
|
|
"type": "array",
|
|
"description": "Array of custom sounds to use on new contributions",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"nullable": true,
|
|
"example": [ "https://github.com/ClaudiuHKS/AdvancedQuakeSounds/raw/master/sound/AQS/doublekill.wav" ]
|
|
},
|
|
"animationColors": {
|
|
"type": "array",
|
|
"description": "Array of custom HEX colors to use for background animations on new contributions",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"nullable": true,
|
|
"example": ["#FF0000", "#00FF00", "#0000FF"]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "Apps",
|
|
"description": "App operations"
|
|
}
|
|
]
|
|
}
|