{
    "schemes": [],
    "swagger": "2.0",
    "info": {
        "description": "This service manages Workspaces and WorkspaceMembers",
        "title": "WorkspaceService",
        "contact": {},
        "version": "1.0"
    },
    "host": "",
    "basePath": "",
    "paths": {
        "/v1/customers/{customerId}/workspace-members": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "list workspaces-members of the given customer",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Page number for pagination",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Number of items per page",
                        "name": "size",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order direction: asc or desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Field name to sort by",
                        "name": "sort",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter by member role",
                        "name": "role",
                        "in": "query"
                    },
                    {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "collectionFormat": "csv",
                        "description": "Filter by owner legacy customer ids",
                        "name": "legacyCustomerIds",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "customerId",
                        "name": "customerId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMemberPage"
                        }
                    }
                }
            }
        },
        "/v1/users/{userId}/workspace-members": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "list workspaces-members of the given user",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Page number for pagination",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Number of items per page",
                        "name": "size",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order direction: asc or desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Field name to sort by",
                        "name": "sort",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "filter by member role",
                        "name": "role",
                        "in": "query"
                    },
                    {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "collectionFormat": "csv",
                        "description": "Filter by owner legacy customer ids",
                        "name": "legacyCustomerIds",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "userId",
                        "name": "userId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMemberPage"
                        }
                    }
                }
            }
        },
        "/v1/workspaces": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "List all workspaces which the authenticated customer is allowed to view",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "summary": "list workspaces visible to the authenticated customer",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Page number for pagination",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Number of items per page",
                        "name": "size",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Order direction: asc or desc",
                        "name": "order",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Field name to sort by",
                        "name": "sort",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "example": "20,12,92",
                        "description": "Filter by legacyTeamIds from which the workspace was created separated by comma",
                        "name": "importedFromLegacyTeamIds",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "example": "20,12,92",
                        "description": "Filter by owner legacy customer ids",
                        "name": "ownerLegacyCustomerIds",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "example": "marketing",
                        "description": "searches in the name, id and key of the workspace",
                        "name": "search",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspacePage"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "creates a new workspace and adds the currently logged in customer as a member with the role owner",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "summary": "Create a new workspace with the current customer as the owner",
                "parameters": [
                    {
                        "description": "request body",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSUpdatable"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/model.Workspace"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "parameters": [
                    {
                        "type": "string",
                        "description": "workspaceId",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.Workspace"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "parameters": [
                    {
                        "type": "string",
                        "description": "workspaceId",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "request body",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSUpdatable"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.Workspace"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Workspace"
                ],
                "parameters": [
                    {
                        "type": "string",
                        "description": "workspaceId",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "BillingContact"
                ],
                "summary": "get current billing contact for a workspace",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.BillingContact"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Update a billingContact",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "BillingContact"
                ],
                "summary": "Update a billingContact",
                "parameters": [
                    {
                        "description": "request body",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.BillingContactUpdatable"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.BillingContact"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}/stripe-checkout-sessions": {
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "StripeCheckoutSession"
                ],
                "summary": "creates a stripe checkout session with which a customer can create/update the subscription on his workspace to a different price in an embedded modal",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "BillingContact ID",
                        "name": "billingContactId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Create params",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/stripeCheckoutSession.StripeCheckoutSessionCreatable"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/stripeCheckoutSession.StripeCheckoutSession"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/billing-contacts/{billingContactId}/stripe-checkout-sessions/{sessionId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "StripeCheckoutSession"
                ],
                "summary": "creates a checkout session in stripe. Checkout sessions can be used to let a customer switch pricing plans with an embedded view which is more convenient than a redirect to the stripe portal",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "BillingContact ID",
                        "name": "billingContactId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "stripe session ID",
                        "name": "sessionId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/stripeCheckoutSession.StripeCheckoutSession"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/current-subscription": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceSubscription"
                ],
                "summary": "get current subscription for a workspace",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceSubscription"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/current-subscription/word-usage-increments": {
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WordUsageIncrement"
                ],
                "summary": "update number of used words in a workspace",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Number of words used",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/wordUsageIncrements.WordUsageIncrementCreate"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created"
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/invites": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Retrieves all workspace invites for a workspace. Only workspace admins and owners can list invites.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInvite"
                ],
                "summary": "List workspace invites",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "boolean",
                        "description": "Filter for pending invitations (not cancelled, not accepted, and not expired)",
                        "name": "pending",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/workspaceInvite.WorkspaceInvitePage"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Creates a new workspace invite for the specified email address. Only workspace admins and owners can create invites.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInvite"
                ],
                "summary": "Create a workspace invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Invite details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceInviteCreatable"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceInvite"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/invites/{inviteId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Retrieves a workspace invite by its ID. Only workspace admins and owners can view invites.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInvite"
                ],
                "summary": "Get a workspace invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Invite ID",
                        "name": "inviteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceInvite"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Deletes a workspace invite by its ID. Only workspace admins and owners can delete invites. Accepted invites cannot be deleted.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInvite"
                ],
                "summary": "Delete a workspace invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Invite ID",
                        "name": "inviteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/invites/{inviteId}/confirmation": {
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Accepts a workspace invite using the confirmation code. Authentication is required.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInviteConfirmation"
                ],
                "summary": "Accept a workspace invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Confirmation details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/workspaceInvite.ConfirmationRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/invites/{inviteId}/denial": {
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Denies a workspace invite using the confirmation code. Authentication is required.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInviteDenial"
                ],
                "summary": "Deny a workspace invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Confirmation details",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/workspaceInvite.ConfirmationRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/invites/{inviteId}/emails": {
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Resends the invitation email for a specific invite. Only authenticated users can resend emails.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceInviteEmail"
                ],
                "summary": "Resend invitation email",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Invite ID",
                        "name": "inviteId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceInvite"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/subscriptions/{subscriptionId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceSubscription"
                ],
                "summary": "get current subscription for a workspace",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceSubscription"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Update a subscription",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceSubscription"
                ],
                "summary": "Update a subscription",
                "parameters": [
                    {
                        "description": "request body",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSSubscriptionUpdatable"
                        }
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceSubscription"
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Patch a subscription",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceSubscription"
                ],
                "summary": "Patch a subscription",
                "parameters": [
                    {
                        "description": "request body",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSSubscriptionUpdatable"
                        }
                    }
                ],
                "responses": {
                    "202": {
                        "description": "Accepted",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceSubscription"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/workspace-members": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "list workspaces-members of the given workspace",
                "parameters": [
                    {
                        "type": "string",
                        "description": "filter by member role",
                        "name": "role",
                        "in": "query"
                    },
                    {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "collectionFormat": "csv",
                        "description": "Filter by owner legacy customer ids",
                        "name": "legacyCustomerIds",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "workspaceId",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMemberPage"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Creates a new workspace member. Only workspace owners and admins can create members.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "Create a workspace member",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Create request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSMemberCreatable"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMember"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/v1/workspaces/{workspaceId}/workspace-members/{memberId}": {
            "get": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "get a workspace member",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Member ID",
                        "name": "memberId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMember"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Updates a workspace member's role. Every workspace must have at least one owner.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "Update a workspace member",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Member ID",
                        "name": "memberId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/model.WSMemberUpdatable"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/model.WorkspaceMember"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "LegacyTokenAuth": []
                    },
                    {
                        "ApiTokenAuth": []
                    }
                ],
                "description": "Deletes a workspace member. The last owner of a workspace cannot be deleted",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "WorkspaceMember"
                ],
                "summary": "Delete a workspace member",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Workspace ID",
                        "name": "workspaceId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Member ID",
                        "name": "memberId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        },
        "/webhooks/stripe": {
            "post": {
                "description": "Processes stripe webhook.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Webhook"
                ],
                "summary": "Processes stripe webhook",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/gin.H"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "gin.H": {
            "type": "object",
            "additionalProperties": {}
        },
        "github_com_stripe_stripe-go_v82.CheckoutSessionStatus": {
            "type": "string",
            "enum": [
                "complete",
                "expired",
                "open"
            ],
            "x-enum-varnames": [
                "CheckoutSessionStatusComplete",
                "CheckoutSessionStatusExpired",
                "CheckoutSessionStatusOpen"
            ]
        },
        "github_com_stripe_stripe-go_v82.Currency": {
            "type": "string",
            "enum": [
                "aed",
                "afn",
                "all",
                "amd",
                "ang",
                "aoa",
                "ars",
                "aud",
                "awg",
                "azn",
                "bam",
                "bbd",
                "bdt",
                "bgn",
                "bif",
                "bmd",
                "bnd",
                "bob",
                "brl",
                "bsd",
                "bwp",
                "bzd",
                "cad",
                "cdf",
                "chf",
                "clp",
                "cny",
                "cop",
                "crc",
                "cve",
                "czk",
                "djf",
                "dkk",
                "dop",
                "dzd",
                "eek",
                "egp",
                "etb",
                "eur",
                "fjd",
                "fkp",
                "gbp",
                "gel",
                "gip",
                "gmd",
                "gnf",
                "gtq",
                "gyd",
                "hkd",
                "hnl",
                "hrk",
                "htg",
                "huf",
                "idr",
                "ils",
                "inr",
                "isk",
                "jmd",
                "jpy",
                "kes",
                "kgs",
                "khr",
                "kmf",
                "krw",
                "kyd",
                "kzt",
                "lak",
                "lbp",
                "lkr",
                "lrd",
                "lsl",
                "ltl",
                "lvl",
                "mad",
                "mdl",
                "mga",
                "mkd",
                "mnt",
                "mop",
                "mro",
                "mur",
                "mvr",
                "mwk",
                "mxn",
                "myr",
                "mzn",
                "nad",
                "ngn",
                "nio",
                "nok",
                "npr",
                "nzd",
                "pab",
                "pen",
                "pgk",
                "php",
                "pkr",
                "pln",
                "pyg",
                "qar",
                "ron",
                "rsd",
                "rub",
                "rwf",
                "sar",
                "sbd",
                "scr",
                "sek",
                "sgd",
                "shp",
                "sll",
                "sos",
                "srd",
                "std",
                "svc",
                "szl",
                "thb",
                "tjs",
                "top",
                "try",
                "ttd",
                "twd",
                "tzs",
                "uah",
                "ugx",
                "usd",
                "uyu",
                "uzs",
                "vef",
                "vnd",
                "vuv",
                "wst",
                "xaf",
                "xcd",
                "xof",
                "xpf",
                "yer",
                "zar",
                "zmw"
            ],
            "x-enum-comments": {
                "CurrencyAED": "United Arab Emirates Dirham",
                "CurrencyAFN": "Afghan Afghani",
                "CurrencyALL": "Albanian Lek",
                "CurrencyAMD": "Armenian Dram",
                "CurrencyANG": "Netherlands Antillean Gulden",
                "CurrencyAOA": "Angolan Kwanza",
                "CurrencyARS": "Argentine Peso",
                "CurrencyAUD": "Australian Dollar",
                "CurrencyAWG": "Aruban Florin",
                "CurrencyAZN": "Azerbaijani Manat",
                "CurrencyBAM": "Bosnia \u0026 Herzegovina Convertible Mark",
                "CurrencyBBD": "Barbadian Dollar",
                "CurrencyBDT": "Bangladeshi Taka",
                "CurrencyBGN": "Bulgarian Lev",
                "CurrencyBIF": "Burundian Franc",
                "CurrencyBMD": "Bermudian Dollar",
                "CurrencyBND": "Brunei Dollar",
                "CurrencyBOB": "Bolivian Boliviano",
                "CurrencyBRL": "Brazilian Real",
                "CurrencyBSD": "Bahamian Dollar",
                "CurrencyBWP": "Botswana Pula",
                "CurrencyBZD": "Belize Dollar",
                "CurrencyCAD": "Canadian Dollar",
                "CurrencyCDF": "Congolese Franc",
                "CurrencyCHF": "Swiss Franc",
                "CurrencyCLP": "Chilean Peso",
                "CurrencyCNY": "Chinese Renminbi Yuan",
                "CurrencyCOP": "Colombian Peso",
                "CurrencyCRC": "Costa Rican Colón",
                "CurrencyCVE": "Cape Verdean Escudo",
                "CurrencyCZK": "Czech Koruna",
                "CurrencyDJF": "Djiboutian Franc",
                "CurrencyDKK": "Danish Krone",
                "CurrencyDOP": "Dominican Peso",
                "CurrencyDZD": "Algerian Dinar",
                "CurrencyEEK": "Estonian Kroon",
                "CurrencyEGP": "Egyptian Pound",
                "CurrencyETB": "Ethiopian Birr",
                "CurrencyEUR": "Euro",
                "CurrencyFJD": "Fijian Dollar",
                "CurrencyFKP": "Falkland Islands Pound",
                "CurrencyGBP": "British Pound",
                "CurrencyGEL": "Georgian Lari",
                "CurrencyGIP": "Gibraltar Pound",
                "CurrencyGMD": "Gambian Dalasi",
                "CurrencyGNF": "Guinean Franc",
                "CurrencyGTQ": "Guatemalan Quetzal",
                "CurrencyGYD": "Guyanese Dollar",
                "CurrencyHKD": "Hong Kong Dollar",
                "CurrencyHNL": "Honduran Lempira",
                "CurrencyHRK": "Croatian Kuna",
                "CurrencyHTG": "Haitian Gourde",
                "CurrencyHUF": "Hungarian Forint",
                "CurrencyIDR": "Indonesian Rupiah",
                "CurrencyILS": "Israeli New Sheqel",
                "CurrencyINR": "Indian Rupee",
                "CurrencyISK": "Icelandic Króna",
                "CurrencyJMD": "Jamaican Dollar",
                "CurrencyJPY": "Japanese Yen",
                "CurrencyKES": "Kenyan Shilling",
                "CurrencyKGS": "Kyrgyzstani Som",
                "CurrencyKHR": "Cambodian Riel",
                "CurrencyKMF": "Comorian Franc",
                "CurrencyKRW": "South Korean Won",
                "CurrencyKYD": "Cayman Islands Dollar",
                "CurrencyKZT": "Kazakhstani Tenge",
                "CurrencyLAK": "Lao Kip",
                "CurrencyLBP": "Lebanese Pound",
                "CurrencyLKR": "Sri Lankan Rupee",
                "CurrencyLRD": "Liberian Dollar",
                "CurrencyLSL": "Lesotho Loti",
                "CurrencyLTL": "Lithuanian Litas",
                "CurrencyLVL": "Latvian Lats",
                "CurrencyMAD": "Moroccan Dirham",
                "CurrencyMDL": "Moldovan Leu",
                "CurrencyMGA": "Malagasy Ariary",
                "CurrencyMKD": "Macedonian Denar",
                "CurrencyMNT": "Mongolian Tögrög",
                "CurrencyMOP": "Macanese Pataca",
                "CurrencyMRO": "Mauritanian Ouguiya",
                "CurrencyMUR": "Mauritian Rupee",
                "CurrencyMVR": "Maldivian Rufiyaa",
                "CurrencyMWK": "Malawian Kwacha",
                "CurrencyMXN": "Mexican Peso",
                "CurrencyMYR": "Malaysian Ringgit",
                "CurrencyMZN": "Mozambican Metical",
                "CurrencyNAD": "Namibian Dollar",
                "CurrencyNGN": "Nigerian Naira",
                "CurrencyNIO": "Nicaraguan Córdoba",
                "CurrencyNOK": "Norwegian Krone",
                "CurrencyNPR": "Nepalese Rupee",
                "CurrencyNZD": "New Zealand Dollar",
                "CurrencyPAB": "Panamanian Balboa",
                "CurrencyPEN": "Peruvian Nuevo Sol",
                "CurrencyPGK": "Papua New Guinean Kina",
                "CurrencyPHP": "Philippine Peso",
                "CurrencyPKR": "Pakistani Rupee",
                "CurrencyPLN": "Polish Złoty",
                "CurrencyPYG": "Paraguayan Guaraní",
                "CurrencyQAR": "Qatari Riyal",
                "CurrencyRON": "Romanian Leu",
                "CurrencyRSD": "Serbian Dinar",
                "CurrencyRUB": "Russian Ruble",
                "CurrencyRWF": "Rwandan Franc",
                "CurrencySAR": "Saudi Riyal",
                "CurrencySBD": "Solomon Islands Dollar",
                "CurrencySCR": "Seychellois Rupee",
                "CurrencySEK": "Swedish Krona",
                "CurrencySGD": "Singapore Dollar",
                "CurrencySHP": "Saint Helenian Pound",
                "CurrencySLL": "Sierra Leonean Leone",
                "CurrencySOS": "Somali Shilling",
                "CurrencySRD": "Surinamese Dollar",
                "CurrencySTD": "São Tomé and Príncipe Dobra",
                "CurrencySVC": "Salvadoran Colón",
                "CurrencySZL": "Swazi Lilangeni",
                "CurrencyTHB": "Thai Baht",
                "CurrencyTJS": "Tajikistani Somoni",
                "CurrencyTOP": "Tongan Paʻanga",
                "CurrencyTRY": "Turkish Lira",
                "CurrencyTTD": "Trinidad and Tobago Dollar",
                "CurrencyTWD": "New Taiwan Dollar",
                "CurrencyTZS": "Tanzanian Shilling",
                "CurrencyUAH": "Ukrainian Hryvnia",
                "CurrencyUGX": "Ugandan Shilling",
                "CurrencyUSD": "United States Dollar",
                "CurrencyUYU": "Uruguayan Peso",
                "CurrencyUZS": "Uzbekistani Som",
                "CurrencyVEF": "Venezuelan Bolívar",
                "CurrencyVND": "Vietnamese Đồng",
                "CurrencyVUV": "Vanuatu Vatu",
                "CurrencyWST": "Samoan Tala",
                "CurrencyXAF": "Central African Cfa Franc",
                "CurrencyXCD": "East Caribbean Dollar",
                "CurrencyXOF": "West African Cfa Franc",
                "CurrencyXPF": "Cfp Franc",
                "CurrencyYER": "Yemeni Rial",
                "CurrencyZAR": "South African Rand",
                "CurrencyZMW": "Zambian Kwacha"
            },
            "x-enum-descriptions": [
                "United Arab Emirates Dirham",
                "Afghan Afghani",
                "Albanian Lek",
                "Armenian Dram",
                "Netherlands Antillean Gulden",
                "Angolan Kwanza",
                "Argentine Peso",
                "Australian Dollar",
                "Aruban Florin",
                "Azerbaijani Manat",
                "Bosnia \u0026 Herzegovina Convertible Mark",
                "Barbadian Dollar",
                "Bangladeshi Taka",
                "Bulgarian Lev",
                "Burundian Franc",
                "Bermudian Dollar",
                "Brunei Dollar",
                "Bolivian Boliviano",
                "Brazilian Real",
                "Bahamian Dollar",
                "Botswana Pula",
                "Belize Dollar",
                "Canadian Dollar",
                "Congolese Franc",
                "Swiss Franc",
                "Chilean Peso",
                "Chinese Renminbi Yuan",
                "Colombian Peso",
                "Costa Rican Colón",
                "Cape Verdean Escudo",
                "Czech Koruna",
                "Djiboutian Franc",
                "Danish Krone",
                "Dominican Peso",
                "Algerian Dinar",
                "Estonian Kroon",
                "Egyptian Pound",
                "Ethiopian Birr",
                "Euro",
                "Fijian Dollar",
                "Falkland Islands Pound",
                "British Pound",
                "Georgian Lari",
                "Gibraltar Pound",
                "Gambian Dalasi",
                "Guinean Franc",
                "Guatemalan Quetzal",
                "Guyanese Dollar",
                "Hong Kong Dollar",
                "Honduran Lempira",
                "Croatian Kuna",
                "Haitian Gourde",
                "Hungarian Forint",
                "Indonesian Rupiah",
                "Israeli New Sheqel",
                "Indian Rupee",
                "Icelandic Króna",
                "Jamaican Dollar",
                "Japanese Yen",
                "Kenyan Shilling",
                "Kyrgyzstani Som",
                "Cambodian Riel",
                "Comorian Franc",
                "South Korean Won",
                "Cayman Islands Dollar",
                "Kazakhstani Tenge",
                "Lao Kip",
                "Lebanese Pound",
                "Sri Lankan Rupee",
                "Liberian Dollar",
                "Lesotho Loti",
                "Lithuanian Litas",
                "Latvian Lats",
                "Moroccan Dirham",
                "Moldovan Leu",
                "Malagasy Ariary",
                "Macedonian Denar",
                "Mongolian Tögrög",
                "Macanese Pataca",
                "Mauritanian Ouguiya",
                "Mauritian Rupee",
                "Maldivian Rufiyaa",
                "Malawian Kwacha",
                "Mexican Peso",
                "Malaysian Ringgit",
                "Mozambican Metical",
                "Namibian Dollar",
                "Nigerian Naira",
                "Nicaraguan Córdoba",
                "Norwegian Krone",
                "Nepalese Rupee",
                "New Zealand Dollar",
                "Panamanian Balboa",
                "Peruvian Nuevo Sol",
                "Papua New Guinean Kina",
                "Philippine Peso",
                "Pakistani Rupee",
                "Polish Złoty",
                "Paraguayan Guaraní",
                "Qatari Riyal",
                "Romanian Leu",
                "Serbian Dinar",
                "Russian Ruble",
                "Rwandan Franc",
                "Saudi Riyal",
                "Solomon Islands Dollar",
                "Seychellois Rupee",
                "Swedish Krona",
                "Singapore Dollar",
                "Saint Helenian Pound",
                "Sierra Leonean Leone",
                "Somali Shilling",
                "Surinamese Dollar",
                "São Tomé and Príncipe Dobra",
                "Salvadoran Colón",
                "Swazi Lilangeni",
                "Thai Baht",
                "Tajikistani Somoni",
                "Tongan Paʻanga",
                "Turkish Lira",
                "Trinidad and Tobago Dollar",
                "New Taiwan Dollar",
                "Tanzanian Shilling",
                "Ukrainian Hryvnia",
                "Ugandan Shilling",
                "United States Dollar",
                "Uruguayan Peso",
                "Uzbekistani Som",
                "Venezuelan Bolívar",
                "Vietnamese Đồng",
                "Vanuatu Vatu",
                "Samoan Tala",
                "Central African Cfa Franc",
                "East Caribbean Dollar",
                "West African Cfa Franc",
                "Cfp Franc",
                "Yemeni Rial",
                "South African Rand",
                "Zambian Kwacha"
            ],
            "x-enum-varnames": [
                "CurrencyAED",
                "CurrencyAFN",
                "CurrencyALL",
                "CurrencyAMD",
                "CurrencyANG",
                "CurrencyAOA",
                "CurrencyARS",
                "CurrencyAUD",
                "CurrencyAWG",
                "CurrencyAZN",
                "CurrencyBAM",
                "CurrencyBBD",
                "CurrencyBDT",
                "CurrencyBGN",
                "CurrencyBIF",
                "CurrencyBMD",
                "CurrencyBND",
                "CurrencyBOB",
                "CurrencyBRL",
                "CurrencyBSD",
                "CurrencyBWP",
                "CurrencyBZD",
                "CurrencyCAD",
                "CurrencyCDF",
                "CurrencyCHF",
                "CurrencyCLP",
                "CurrencyCNY",
                "CurrencyCOP",
                "CurrencyCRC",
                "CurrencyCVE",
                "CurrencyCZK",
                "CurrencyDJF",
                "CurrencyDKK",
                "CurrencyDOP",
                "CurrencyDZD",
                "CurrencyEEK",
                "CurrencyEGP",
                "CurrencyETB",
                "CurrencyEUR",
                "CurrencyFJD",
                "CurrencyFKP",
                "CurrencyGBP",
                "CurrencyGEL",
                "CurrencyGIP",
                "CurrencyGMD",
                "CurrencyGNF",
                "CurrencyGTQ",
                "CurrencyGYD",
                "CurrencyHKD",
                "CurrencyHNL",
                "CurrencyHRK",
                "CurrencyHTG",
                "CurrencyHUF",
                "CurrencyIDR",
                "CurrencyILS",
                "CurrencyINR",
                "CurrencyISK",
                "CurrencyJMD",
                "CurrencyJPY",
                "CurrencyKES",
                "CurrencyKGS",
                "CurrencyKHR",
                "CurrencyKMF",
                "CurrencyKRW",
                "CurrencyKYD",
                "CurrencyKZT",
                "CurrencyLAK",
                "CurrencyLBP",
                "CurrencyLKR",
                "CurrencyLRD",
                "CurrencyLSL",
                "CurrencyLTL",
                "CurrencyLVL",
                "CurrencyMAD",
                "CurrencyMDL",
                "CurrencyMGA",
                "CurrencyMKD",
                "CurrencyMNT",
                "CurrencyMOP",
                "CurrencyMRO",
                "CurrencyMUR",
                "CurrencyMVR",
                "CurrencyMWK",
                "CurrencyMXN",
                "CurrencyMYR",
                "CurrencyMZN",
                "CurrencyNAD",
                "CurrencyNGN",
                "CurrencyNIO",
                "CurrencyNOK",
                "CurrencyNPR",
                "CurrencyNZD",
                "CurrencyPAB",
                "CurrencyPEN",
                "CurrencyPGK",
                "CurrencyPHP",
                "CurrencyPKR",
                "CurrencyPLN",
                "CurrencyPYG",
                "CurrencyQAR",
                "CurrencyRON",
                "CurrencyRSD",
                "CurrencyRUB",
                "CurrencyRWF",
                "CurrencySAR",
                "CurrencySBD",
                "CurrencySCR",
                "CurrencySEK",
                "CurrencySGD",
                "CurrencySHP",
                "CurrencySLL",
                "CurrencySOS",
                "CurrencySRD",
                "CurrencySTD",
                "CurrencySVC",
                "CurrencySZL",
                "CurrencyTHB",
                "CurrencyTJS",
                "CurrencyTOP",
                "CurrencyTRY",
                "CurrencyTTD",
                "CurrencyTWD",
                "CurrencyTZS",
                "CurrencyUAH",
                "CurrencyUGX",
                "CurrencyUSD",
                "CurrencyUYU",
                "CurrencyUZS",
                "CurrencyVEF",
                "CurrencyVND",
                "CurrencyVUV",
                "CurrencyWST",
                "CurrencyXAF",
                "CurrencyXCD",
                "CurrencyXOF",
                "CurrencyXPF",
                "CurrencyYER",
                "CurrencyZAR",
                "CurrencyZMW"
            ]
        },
        "github_com_stripe_stripe-go_v82.PaymentMethodCardBrand": {
            "type": "string",
            "enum": [
                "amex",
                "diners",
                "discover",
                "jcb",
                "mastercard",
                "unionpay",
                "unknown",
                "visa"
            ],
            "x-enum-varnames": [
                "PaymentMethodCardBrandAmex",
                "PaymentMethodCardBrandDiners",
                "PaymentMethodCardBrandDiscover",
                "PaymentMethodCardBrandJCB",
                "PaymentMethodCardBrandMastercard",
                "PaymentMethodCardBrandUnionpay",
                "PaymentMethodCardBrandUnknown",
                "PaymentMethodCardBrandVisa"
            ]
        },
        "github_com_stripe_stripe-go_v82.PaymentMethodType": {
            "type": "string",
            "enum": [
                "acss_debit",
                "affirm",
                "afterpay_clearpay",
                "alipay",
                "alma",
                "amazon_pay",
                "au_becs_debit",
                "bacs_debit",
                "bancontact",
                "billie",
                "blik",
                "boleto",
                "card",
                "card_present",
                "cashapp",
                "crypto",
                "customer_balance",
                "eps",
                "fpx",
                "giropay",
                "grabpay",
                "ideal",
                "interac_present",
                "kakao_pay",
                "klarna",
                "konbini",
                "kr_card",
                "link",
                "mobilepay",
                "multibanco",
                "naver_pay",
                "nz_bank_account",
                "oxxo",
                "p24",
                "pay_by_bank",
                "payco",
                "paynow",
                "paypal",
                "pix",
                "promptpay",
                "revolut_pay",
                "samsung_pay",
                "satispay",
                "sepa_debit",
                "sofort",
                "swish",
                "twint",
                "us_bank_account",
                "wechat_pay",
                "zip"
            ],
            "x-enum-varnames": [
                "PaymentMethodTypeACSSDebit",
                "PaymentMethodTypeAffirm",
                "PaymentMethodTypeAfterpayClearpay",
                "PaymentMethodTypeAlipay",
                "PaymentMethodTypeAlma",
                "PaymentMethodTypeAmazonPay",
                "PaymentMethodTypeAUBECSDebit",
                "PaymentMethodTypeBACSDebit",
                "PaymentMethodTypeBancontact",
                "PaymentMethodTypeBillie",
                "PaymentMethodTypeBLIK",
                "PaymentMethodTypeBoleto",
                "PaymentMethodTypeCard",
                "PaymentMethodTypeCardPresent",
                "PaymentMethodTypeCashApp",
                "PaymentMethodTypeCrypto",
                "PaymentMethodTypeCustomerBalance",
                "PaymentMethodTypeEPS",
                "PaymentMethodTypeFPX",
                "PaymentMethodTypeGiropay",
                "PaymentMethodTypeGrabpay",
                "PaymentMethodTypeIDEAL",
                "PaymentMethodTypeInteracPresent",
                "PaymentMethodTypeKakaoPay",
                "PaymentMethodTypeKlarna",
                "PaymentMethodTypeKonbini",
                "PaymentMethodTypeKrCard",
                "PaymentMethodTypeLink",
                "PaymentMethodTypeMobilepay",
                "PaymentMethodTypeMultibanco",
                "PaymentMethodTypeNaverPay",
                "PaymentMethodTypeNzBankAccount",
                "PaymentMethodTypeOXXO",
                "PaymentMethodTypeP24",
                "PaymentMethodTypePayByBank",
                "PaymentMethodTypePayco",
                "PaymentMethodTypePayNow",
                "PaymentMethodTypePaypal",
                "PaymentMethodTypePix",
                "PaymentMethodTypePromptPay",
                "PaymentMethodTypeRevolutPay",
                "PaymentMethodTypeSamsungPay",
                "PaymentMethodTypeSatispay",
                "PaymentMethodTypeSEPADebit",
                "PaymentMethodTypeSofort",
                "PaymentMethodTypeSwish",
                "PaymentMethodTypeTWINT",
                "PaymentMethodTypeUSBankAccount",
                "PaymentMethodTypeWeChatPay",
                "PaymentMethodTypeZip"
            ]
        },
        "github_com_stripe_stripe-go_v82.PlanInterval": {
            "type": "string",
            "enum": [
                "day",
                "month",
                "week",
                "year"
            ],
            "x-enum-varnames": [
                "PlanIntervalDay",
                "PlanIntervalMonth",
                "PlanIntervalWeek",
                "PlanIntervalYear"
            ]
        },
        "github_com_stripe_stripe-go_v82.SubscriptionStatus": {
            "type": "string",
            "enum": [
                "active",
                "canceled",
                "incomplete",
                "incomplete_expired",
                "past_due",
                "paused",
                "trialing",
                "unpaid"
            ],
            "x-enum-varnames": [
                "SubscriptionStatusActive",
                "SubscriptionStatusCanceled",
                "SubscriptionStatusIncomplete",
                "SubscriptionStatusIncompleteExpired",
                "SubscriptionStatusPastDue",
                "SubscriptionStatusPaused",
                "SubscriptionStatusTrialing",
                "SubscriptionStatusUnpaid"
            ]
        },
        "model.ApplicableCoupon": {
            "type": "object",
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.ApplicableCouponEmbedded"
                },
                "discountPercentage": {
                    "type": "number"
                },
                "legacyPricingPlanId": {
                    "type": "integer"
                },
                "pricingPlanId": {
                    "type": "string"
                },
                "translationKey": {
                    "type": "string"
                }
            }
        },
        "model.ApplicableCouponEmbedded": {
            "type": "object",
            "properties": {
                "pricingPlan": {
                    "$ref": "#/definitions/nfsubscriptions.PricingPlan"
                },
                "pricingPlanCategory": {
                    "$ref": "#/definitions/nfsubscriptions.NewPricingPlanCategory"
                }
            }
        },
        "model.BillingContact": {
            "type": "object",
            "required": [
                "email",
                "name"
            ],
            "properties": {
                "activeDiscount": {
                    "description": "readonly synced from stripe: true if a discount is active for this stripe customer",
                    "type": "string"
                },
                "addressLine1": {
                    "description": "readonly synced from stripe: First line of the address of the billing contact",
                    "type": "string",
                    "example": "123 Main St"
                },
                "addressLine2": {
                    "description": "readonly synced from stripe:  Second line of the address of the billing contact",
                    "type": "string",
                    "example": "123 Main St"
                },
                "city": {
                    "description": "readonly synced from stripe: City of the billing contact",
                    "type": "string",
                    "example": "Berlin"
                },
                "country": {
                    "description": "readonly synced from stripe:  Country of the billing contact",
                    "type": "string",
                    "example": "DE"
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "defaultPaymentCardNumberLastFourDigits": {
                    "type": "string",
                    "example": "1234"
                },
                "defaultPaymentMethod": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodType"
                        }
                    ],
                    "example": "card"
                },
                "defaultPaymentMethodCardBrand": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodCardBrand"
                        }
                    ],
                    "example": "visa"
                },
                "email": {
                    "description": "Email address of the billing contact",
                    "type": "string",
                    "maxLength": 600,
                    "example": "max.mustermann@neuroflash.com"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "importedFromLegacyCustomerId": {
                    "description": "Deprecated: only needed while import from legacy api is still active\nID of the legacy customer this was imported from",
                    "type": "integer",
                    "example": 12345
                },
                "name": {
                    "description": "Name of the billing contact",
                    "type": "string",
                    "maxLength": 5000,
                    "example": "Max Mustermann"
                },
                "postalCode": {
                    "description": "readonly synced from stripe: Postal code of the billing contact",
                    "type": "string",
                    "example": "12345"
                },
                "state": {
                    "description": "readonly synced from stripe: State of the billing contact",
                    "type": "string",
                    "example": "Schleswig-Holstein"
                },
                "stripeCustomerId": {
                    "description": "Stripe customer ID for billing purposes. Could become optional if we add other payment providers",
                    "type": "string",
                    "example": "cus_12345abcdef"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                }
            }
        },
        "model.BillingContactUpdatable": {
            "type": "object",
            "required": [
                "email",
                "name"
            ],
            "properties": {
                "activeDiscount": {
                    "description": "readonly synced from stripe: true if a discount is active for this stripe customer",
                    "type": "string"
                },
                "addressLine1": {
                    "description": "readonly synced from stripe: First line of the address of the billing contact",
                    "type": "string",
                    "example": "123 Main St"
                },
                "addressLine2": {
                    "description": "readonly synced from stripe:  Second line of the address of the billing contact",
                    "type": "string",
                    "example": "123 Main St"
                },
                "city": {
                    "description": "readonly synced from stripe: City of the billing contact",
                    "type": "string",
                    "example": "Berlin"
                },
                "country": {
                    "description": "readonly synced from stripe:  Country of the billing contact",
                    "type": "string",
                    "example": "DE"
                },
                "defaultPaymentCardNumberLastFourDigits": {
                    "type": "string",
                    "example": "1234"
                },
                "defaultPaymentMethod": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodType"
                        }
                    ],
                    "example": "card"
                },
                "defaultPaymentMethodCardBrand": {
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodCardBrand"
                        }
                    ],
                    "example": "visa"
                },
                "email": {
                    "description": "Email address of the billing contact",
                    "type": "string",
                    "maxLength": 600,
                    "example": "max.mustermann@neuroflash.com"
                },
                "name": {
                    "description": "Name of the billing contact",
                    "type": "string",
                    "maxLength": 5000,
                    "example": "Max Mustermann"
                },
                "postalCode": {
                    "description": "readonly synced from stripe: Postal code of the billing contact",
                    "type": "string",
                    "example": "12345"
                },
                "state": {
                    "description": "readonly synced from stripe: State of the billing contact",
                    "type": "string",
                    "example": "Schleswig-Holstein"
                }
            }
        },
        "model.InviteEmbedded": {
            "type": "object",
            "required": [
                "inviter",
                "status"
            ],
            "properties": {
                "acceptingCustomer": {
                    "$ref": "#/definitions/nfcust.Customer"
                },
                "inviter": {
                    "$ref": "#/definitions/nfcust.Customer"
                },
                "status": {
                    "description": "StripeStatus of the invitation",
                    "type": "string",
                    "enum": [
                        "PENDING",
                        "ACCEPTED",
                        "DENIED",
                        "EXPIRED"
                    ]
                }
            }
        },
        "model.WSMemberCreatable": {
            "type": "object",
            "required": [
                "role"
            ],
            "properties": {
                "legacyCustomerId": {
                    "description": "ID of the legacy customer",
                    "type": "integer",
                    "example": 5
                },
                "role": {
                    "description": "Role of the member in the workspace",
                    "type": "string",
                    "enum": [
                        "MEMBER",
                        "ADMIN",
                        "OWNER"
                    ],
                    "example": "MEMBER"
                }
            }
        },
        "model.WSMemberUpdatable": {
            "type": "object",
            "required": [
                "role"
            ],
            "properties": {
                "role": {
                    "description": "Role of the member in the workspace",
                    "type": "string",
                    "enum": [
                        "MEMBER",
                        "ADMIN",
                        "OWNER"
                    ],
                    "example": "MEMBER"
                }
            }
        },
        "model.WSSubscriptionUpdatable": {
            "type": "object",
            "properties": {
                "bonusWords": {
                    "description": "deprecated: will be moved to a separate limits table/service. Can currently be managed by admins\nAdditional bonus words available for use",
                    "type": "integer",
                    "example": 1000
                },
                "limitRenewalDate": {
                    "description": "next date on which the limits (like words available, images available etc) will be reset. This happens every month, starting with the start of the subscription",
                    "type": "string"
                },
                "pricingPlanId": {
                    "type": "string",
                    "minLength": 1,
                    "example": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2"
                }
            }
        },
        "model.WSUpdatable": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "name": {
                    "description": "Name of the workspace",
                    "type": "string",
                    "maxLength": 255,
                    "minLength": 1,
                    "example": "Online Marketing Team"
                }
            }
        },
        "model.Workspace": {
            "type": "object",
            "required": [
                "_embedded",
                "billingContactId",
                "name"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.WorkspaceEmbedded"
                },
                "billingContactId": {
                    "description": "ID of the billing contact for this workspace",
                    "type": "string",
                    "maxLength": 36,
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "currentSubscriptionId": {
                    "description": "ID of the current subscription for this workspace",
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                },
                "firstMemberInvitedAt": {
                    "description": "deprecated\nTimestamp when the first member was invited to the workspace",
                    "type": "string",
                    "example": "2022-01-01T00:00:00Z"
                },
                "firstPaidSubscriptionAt": {
                    "description": "If this workspace ever had a paid subscription, this contains the date at which the first one started",
                    "type": "string"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "importedFromLegacyCustomerId": {
                    "description": "deprecated\nSome customers don't have an assigned team in the legacy system as owner but they still need a workspace to which we can import the subscription",
                    "type": "integer",
                    "example": 177
                },
                "importedFromLegacyTeamId": {
                    "description": "deprecated: fields that are currently still needed for the legacy system\nID of the legacy team this workspace was imported from",
                    "type": "integer",
                    "example": 187
                },
                "key": {
                    "description": "Human readable unique identifier of the workspace",
                    "type": "string",
                    "example": "NF-GK352"
                },
                "keyIndex": {
                    "description": "Unique auto generated index which is used to generate a unique key",
                    "type": "integer",
                    "example": 57
                },
                "name": {
                    "description": "Name of the workspace",
                    "type": "string",
                    "maxLength": 255,
                    "minLength": 1,
                    "example": "Online Marketing Team"
                },
                "trialStartedAt": {
                    "description": "If this workspace ever had a subscription with a trial this contains the time when it was started",
                    "type": "string",
                    "example": "2014-01-02T14:22:00Z"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                }
            }
        },
        "model.WorkspaceAvatar": {
            "type": "object",
            "required": [
                "_embedded"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.WorkspaceAvatarEmbedded"
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "fileName": {
                    "type": "string",
                    "example": "a2G8Sa7Mn47Je0Lm.png"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "signedUrl": {
                    "type": "string",
                    "example": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg"
                },
                "storageKey": {
                    "type": "string",
                    "example": "workspaces/550e8400-e29b-41d4-a716-446655440000/avatar"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "workspaceId": {
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                }
            }
        },
        "model.WorkspaceAvatarEmbedded": {
            "type": "object",
            "properties": {
                "signedUrl": {
                    "type": "string",
                    "example": "https://storage.googleapis.com/workspaces/550e8400-e29b-41d4-a716-446655440000/avatar/113c0b32-ed6c-4421-b7da-d1faf238eb56.jpg"
                }
            }
        },
        "model.WorkspaceEmbedded": {
            "type": "object",
            "properties": {
                "avatar": {
                    "$ref": "#/definitions/model.WorkspaceAvatar"
                },
                "billingContact": {
                    "$ref": "#/definitions/model.BillingContact"
                },
                "currentSubscription": {
                    "$ref": "#/definitions/model.WorkspaceSubscription"
                }
            }
        },
        "model.WorkspaceInvite": {
            "type": "object",
            "required": [
                "_embedded",
                "email",
                "role"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.InviteEmbedded"
                },
                "acceptedAt": {
                    "description": "Timestamp when the invitation was accepted",
                    "type": "string",
                    "example": "2023-06-15T10:30:00Z"
                },
                "acceptedByLegacyCustomerId": {
                    "description": "ID of the legacy customer who accepted the invitation",
                    "type": "integer",
                    "example": 54321
                },
                "acceptedByWorkspaceMemberId": {
                    "description": "ID of the workspace member who accepted the invitation",
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440001"
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByLegacyCustomerId": {
                    "description": "ID of the legacy customer who created the invitation",
                    "type": "integer",
                    "example": 12345
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "deniedAt": {
                    "description": "Timestamp when the invitation was denied by the invitee",
                    "type": "string",
                    "example": "2023-05-20T15:45:00Z"
                },
                "email": {
                    "description": "Email address of the person being invited to the workspace",
                    "type": "string",
                    "maxLength": 600,
                    "example": "max.mustermann@neuroflash.com"
                },
                "expiresAt": {
                    "description": "Timestamp when the invitation expires",
                    "type": "string",
                    "example": "2023-12-31T23:59:59Z"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "importedFromLegacyTeamCustomerId": {
                    "description": "ID of the legacy team customer this was imported from",
                    "type": "integer",
                    "example": 9876
                },
                "importedFromLegacyTeamInviteId": {
                    "description": "ID of the legacy team invite this was imported from",
                    "type": "integer",
                    "example": 7890
                },
                "resentAt": {
                    "description": "Timestamps when the invitation was resent",
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "[\"2023-01-01T12:00:00Z\"",
                        "\"2023-01-02T14:30:00Z\"]"
                    ]
                },
                "role": {
                    "description": "role which the new member should be assigned",
                    "type": "string",
                    "enum": [
                        "ADMIN",
                        "MEMBER",
                        "OWNER"
                    ],
                    "example": "MEMBER"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "workspaceId": {
                    "description": "ID of the workspace the invitation is for",
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                }
            }
        },
        "model.WorkspaceInviteCreatable": {
            "type": "object",
            "required": [
                "email",
                "role"
            ],
            "properties": {
                "email": {
                    "description": "Email address of the person being invited to the workspace",
                    "type": "string",
                    "maxLength": 600,
                    "example": "max.mustermann@neuroflash.com"
                },
                "role": {
                    "description": "role which the new member should be assigned",
                    "type": "string",
                    "enum": [
                        "ADMIN",
                        "MEMBER",
                        "OWNER"
                    ],
                    "example": "MEMBER"
                }
            }
        },
        "model.WorkspaceMember": {
            "type": "object",
            "required": [
                "role"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.WorkspaceMemberEmbedded"
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "importedFromLegacyCustomerId": {
                    "description": "deprecated\nsome customers don't have an assigned team in the legacy system as owner but they still need a workspace to which we can import the subscription.",
                    "type": "integer",
                    "example": 177
                },
                "importedFromLegacyTeamCustomerId": {
                    "description": "deprecated: for legacy import\nID of the legacy team customer this was imported from",
                    "type": "integer",
                    "example": 12345
                },
                "legacyCustomerId": {
                    "description": "ID of the legacy customer",
                    "type": "integer",
                    "example": 5
                },
                "role": {
                    "description": "Role of the member in the workspace",
                    "type": "string",
                    "enum": [
                        "MEMBER",
                        "ADMIN",
                        "OWNER"
                    ],
                    "example": "MEMBER"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "userId": {
                    "description": "ID of the user",
                    "type": "string",
                    "example": "3445546543"
                },
                "workspaceId": {
                    "description": "ID of the workspace the member belongs to",
                    "type": "string",
                    "example": "992fd647-d15c-40e9-b61c-e19ef9eea35e"
                }
            }
        },
        "model.WorkspaceMemberEmbedded": {
            "type": "object",
            "required": [
                "customer",
                "workspace"
            ],
            "properties": {
                "customer": {
                    "$ref": "#/definitions/nfcust.Customer"
                },
                "permissions": {
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/nfpermission.AppliedPermissionValue"
                    }
                },
                "workspace": {
                    "$ref": "#/definitions/model.Workspace"
                }
            }
        },
        "model.WorkspaceMemberPage": {
            "type": "object",
            "required": [
                "data",
                "page"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/model.WorkspaceMember"
                    }
                },
                "page": {
                    "$ref": "#/definitions/nfpage.Page"
                }
            }
        },
        "model.WorkspacePage": {
            "type": "object",
            "required": [
                "data",
                "page"
            ],
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/model.Workspace"
                    }
                },
                "page": {
                    "$ref": "#/definitions/nfpage.Page"
                }
            }
        },
        "model.WorkspaceSubscription": {
            "type": "object",
            "required": [
                "_embedded",
                "active",
                "currency",
                "isGracePeriod",
                "isTrial",
                "paymentPaused",
                "sepaPaymentFailed",
                "spilloverWords",
                "stripeStatus",
                "stripeSubscriptionId",
                "stripeSubscriptionItemId",
                "usedWords",
                "workspaceId"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/model.WorkspaceSubscriptionEmbedded"
                },
                "active": {
                    "description": "Flag indicating whether the subscription is active. Subscriptions can become inactive if they are paused or have more members than the current plan allows",
                    "type": "boolean",
                    "example": true
                },
                "activeDiscounts": {
                    "description": "readonly synced from stripe: true if a discount is active for this stripe subscription",
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "availableWords": {
                    "description": "number of words that can still be used in this workspace in the current billing period.",
                    "type": "integer",
                    "example": 500
                },
                "bonusWords": {
                    "description": "deprecated: will be moved to a separate limits table/service. Can currently be managed by admins\nAdditional bonus words available for use",
                    "type": "integer",
                    "example": 1000
                },
                "createdAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "createdByUserId": {
                    "type": "string",
                    "example": "b0920767-2e30-48d3-80ce-268810bc433a"
                },
                "currency": {
                    "description": "readonly synced from Stripe: Currency used for billing (e.g., EUR, USD)",
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.Currency"
                        }
                    ],
                    "example": "EUR"
                },
                "endDate": {
                    "description": "readonly synced from Stripe: date at which this subscription will automatically be cancelled",
                    "type": "string"
                },
                "id": {
                    "type": "string",
                    "example": "113c0b32-ed6c-4421-b7da-d1faf238eb56"
                },
                "importedFromLegacyCustomerId": {
                    "description": "Deprecated: only needed while import from legacy api is still active\nID of the legacy customer this was imported from",
                    "type": "integer",
                    "example": 12345
                },
                "isGracePeriod": {
                    "description": "true if the subscription will be cancelled at a set date in the future",
                    "type": "boolean",
                    "example": false
                },
                "isTrial": {
                    "description": "true if this is currently a trial period",
                    "type": "boolean",
                    "example": false
                },
                "limitRenewalDate": {
                    "description": "next date on which the limits (like words available, images available etc) will be reset. This happens every month, starting with the start of the subscription",
                    "type": "string"
                },
                "nextSubscriptionCycleStart": {
                    "description": "readonly synced from Stripe: Timestamp when the next billing cycle starts. This is NOT necessarily the timestamp when we reset the limits in our system because we reset them monthly even if this is a yearly plan",
                    "type": "string",
                    "example": "2024-01-01T00:00:00Z"
                },
                "paymentCardNumberLastFourDigits": {
                    "description": "readonly synced from Stripe: Last four digits of the payment card number. Uses the default payment on the subscription with a fallback to the payment from the last invoice",
                    "type": "string",
                    "example": "4242"
                },
                "paymentMethodCardBrand": {
                    "description": "readonly synced from stripe: name of the card brand that is used to pay for this subscription",
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodCardBrand"
                        }
                    ],
                    "example": "visa"
                },
                "paymentPaused": {
                    "description": "readonly synced from Stripe: true if the payment collection for this subscription is currently paused. Even though stripe intends these subscription to stay active\nand just be free for a while, we treat subscriptions with payment paused as inactive",
                    "type": "boolean"
                },
                "paymentType": {
                    "description": "readonly synced from Stripe: Type of payment method (e.g., card, sepa). Uses the default payment on the subscription with a fallback to the payment from the last invoice",
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PaymentMethodType"
                        }
                    ],
                    "example": "card"
                },
                "pricingPlanId": {
                    "type": "string",
                    "minLength": 1,
                    "example": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2"
                },
                "pricingPlanWords": {
                    "description": "deprecated: these fields are managed internally but will be moved to the limit structure\ndeprecated: will be moved to a separate limits table/service\nhow many words the pricingPlan from this subscription allows.",
                    "type": "integer",
                    "example": 10000
                },
                "sepaPaymentFailed": {
                    "description": "readonly synced from Stripe: Flag indicating whether the SEPA payment has failed",
                    "type": "boolean",
                    "example": false
                },
                "spilloverWords": {
                    "description": "deprecated: will be moved to a separate limits table/service. Used to calculate the available words next month because you can only keep overspilled words from last month, not accumulate them over multiple months\nWords carried over from previous month",
                    "type": "integer",
                    "example": 500
                },
                "stripeStatus": {
                    "description": "readonly synced from Stripe: status in stripe",
                    "enum": [
                        "canceled",
                        "active",
                        "past_due",
                        "incomplete",
                        "unpaid",
                        "incomplete_expired",
                        "trialing"
                    ],
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.SubscriptionStatus"
                        }
                    ],
                    "example": "active"
                },
                "stripeSubscriptionId": {
                    "description": "Stripe subscription ID",
                    "type": "string",
                    "example": "sub_12345abcdef"
                },
                "stripeSubscriptionItemId": {
                    "description": "ID of the subscription item in stripe (subscriptions should only have one item)",
                    "type": "string",
                    "example": "sub_item_ad909w0"
                },
                "trialEndsAt": {
                    "description": "readonly synced from Stripe: Timestamp when the trial period ends",
                    "type": "string",
                    "example": "2023-12-31T23:59:59Z"
                },
                "trialStartedAt": {
                    "description": "readonly synced from stripe: if a trial is in progress, date when it started",
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string",
                    "example": "2025-01-14T16:20:59Z"
                },
                "usedWords": {
                    "description": "deprecated: will be moved to a separate limits table/service\nHow many words were used in this workspace in the current month",
                    "type": "integer",
                    "example": 5000
                },
                "workspaceId": {
                    "description": "ID of the workspace this subscription belongs to",
                    "type": "string",
                    "example": "550e8400-e29b-41d4-a716-446655440000"
                }
            }
        },
        "model.WorkspaceSubscriptionEmbedded": {
            "type": "object",
            "required": [
                "newPricingPlan",
                "pricingPlan",
                "pricingPlanCategory"
            ],
            "properties": {
                "availableWords": {
                    "description": "deprecated: remove once the frontend doesn't need it anymore\ndeprecated, moved to rootLevel",
                    "type": "integer",
                    "example": 500
                },
                "newPricingPlan": {
                    "description": "deprecated",
                    "allOf": [
                        {
                            "$ref": "#/definitions/nfsubscriptions.PricingPlan"
                        }
                    ]
                },
                "pricingPlan": {
                    "$ref": "#/definitions/nfsubscriptions.PricingPlan"
                },
                "pricingPlanCategory": {
                    "$ref": "#/definitions/nfsubscriptions.NewPricingPlanCategory"
                }
            }
        },
        "nfcust.Customer": {
            "type": "object",
            "properties": {
                "email": {
                    "description": "Email of the customer",
                    "type": "string",
                    "example": "eren.jaeger@neuroflash.com"
                },
                "hadTrial": {
                    "description": "True if the customer has ever started a trial in any workspace",
                    "type": "boolean",
                    "example": false
                },
                "legacyId": {
                    "description": "ID of the customer in the legacy system",
                    "type": "integer",
                    "example": 5
                },
                "name": {
                    "description": "Name of the customer",
                    "type": "string",
                    "example": "Eren Jaeger"
                }
            }
        },
        "nfgorm.GormFloatMap": {
            "description": "A map of string keys to float values",
            "type": "object",
            "additionalProperties": {
                "type": "number",
                "format": "float64"
            }
        },
        "nfpage.Page": {
            "type": "object",
            "properties": {
                "currentPage": {
                    "type": "integer",
                    "example": 2
                },
                "size": {
                    "type": "integer",
                    "example": 10
                },
                "totalElements": {
                    "type": "integer",
                    "example": 35
                },
                "totalPages": {
                    "type": "integer",
                    "example": 4
                }
            }
        },
        "nfpermission.AppliedPermissionValue": {
            "type": "object",
            "properties": {
                "value": {
                    "type": "integer"
                },
                "workspaceValue": {
                    "type": "integer"
                }
            }
        },
        "nfsubscriptions.NewPricingPlanCategory": {
            "type": "object",
            "required": [
                "displayName",
                "id",
                "translationKey"
            ],
            "properties": {
                "displayName": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "translationKey": {
                    "type": "string"
                }
            }
        },
        "nfsubscriptions.PricingPlan": {
            "type": "object",
            "required": [
                "active",
                "billingInterval",
                "categoryId",
                "displayName",
                "id",
                "isDefault",
                "priceInEuro",
                "stripeBillingPortalEnabled",
                "stripePriceId",
                "stripeTrackUsage",
                "tier",
                "trialDays"
            ],
            "properties": {
                "active": {
                    "description": "set to true when this pricingPlan can be configured on existing and new subscriptions",
                    "type": "boolean"
                },
                "billingInterval": {
                    "description": "interval in which the customer is billed for this product",
                    "enum": [
                        "month",
                        "year",
                        "day",
                        "week"
                    ],
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.PlanInterval"
                        }
                    ],
                    "example": "year"
                },
                "categoryId": {
                    "description": "ID of the category this plan belongs to",
                    "type": "string",
                    "example": "18d0035a-5850-4bf4-8d5d-3dc8684e2bb2"
                },
                "displayName": {
                    "description": "name used for internal purposes like the admin-ui or hubspot. Should not be displayed to customers",
                    "type": "string",
                    "example": "Business Pro with 3 members"
                },
                "id": {
                    "description": "id of the pricing plan",
                    "type": "string",
                    "example": "18d0045a-5850-4bf4-8d5d-3dc8684e2bb2"
                },
                "importedFromLegacyId": {
                    "type": "integer"
                },
                "isDefault": {
                    "description": "Is this the default plan for new customers?",
                    "type": "boolean",
                    "example": true
                },
                "priceInEuro": {
                    "description": "how much the customer needs to pay for this subscription",
                    "type": "number",
                    "example": 24.5
                },
                "pricePerCurrency": {
                    "$ref": "#/definitions/nfgorm.GormFloatMap"
                },
                "stripeBillingPortalEnabled": {
                    "description": "true if subscriptions with this pricingPlan can be self-managed in the stripe billing portal",
                    "type": "boolean"
                },
                "stripePriceId": {
                    "description": "ID of the price in stripe",
                    "type": "string",
                    "example": "price_123"
                },
                "stripeTrackTokenMeter": {
                    "type": "string"
                },
                "stripeTrackUsage": {
                    "description": "deprecated",
                    "type": "boolean"
                },
                "tier": {
                    "type": "integer",
                    "example": 5
                },
                "trialDays": {
                    "description": "how many trial days are allowed for this plan",
                    "type": "integer",
                    "example": 7
                }
            }
        },
        "stripeCheckoutSession.StripeCheckoutSession": {
            "type": "object",
            "required": [
                "callbackUrl"
            ],
            "properties": {
                "_embedded": {
                    "$ref": "#/definitions/stripeCheckoutSession.StripeCheckoutSessionEmbedded"
                },
                "callbackUrl": {
                    "description": "url to redirect to after successful checkout.",
                    "type": "string",
                    "minLength": 1,
                    "example": "https://app.neuroflash.com/payment-callback?session_id={CHECKOUT_SESSION_ID}"
                },
                "language": {
                    "description": "language in which to open the checkout session. Defaults to the language of the authenticated customer",
                    "type": "string",
                    "example": "de"
                },
                "legacyPricingPlanId": {
                    "description": "deprecated id of the pricingPlan for which a subscription should be created",
                    "type": "integer",
                    "example": 150
                },
                "pricingPlanId": {
                    "type": "string"
                },
                "status": {
                    "enum": [
                        "complete"
                    ],
                    "allOf": [
                        {
                            "$ref": "#/definitions/github_com_stripe_stripe-go_v82.CheckoutSessionStatus"
                        }
                    ]
                },
                "stripeClientSecret": {
                    "description": "client secret for this checkout session. Only set directly after creation",
                    "type": "string"
                },
                "stripePriceId": {
                    "description": "stripe id of the price from the new subscription that is being checked out",
                    "type": "string"
                },
                "stripeSubscriptionId": {
                    "description": "id of the stripe subscription that is being subscribed to in this checkout",
                    "type": "string"
                }
            }
        },
        "stripeCheckoutSession.StripeCheckoutSessionCreatable": {
            "type": "object",
            "required": [
                "callbackUrl"
            ],
            "properties": {
                "callbackUrl": {
                    "description": "url to redirect to after successful checkout.",
                    "type": "string",
                    "minLength": 1,
                    "example": "https://app.neuroflash.com/payment-callback?session_id={CHECKOUT_SESSION_ID}"
                },
                "language": {
                    "description": "language in which to open the checkout session. Defaults to the language of the authenticated customer",
                    "type": "string",
                    "example": "de"
                },
                "legacyPricingPlanId": {
                    "description": "deprecated id of the pricingPlan for which a subscription should be created",
                    "type": "integer",
                    "example": 150
                },
                "pricingPlanId": {
                    "type": "string"
                }
            }
        },
        "stripeCheckoutSession.StripeCheckoutSessionEmbedded": {
            "type": "object",
            "properties": {
                "coupon": {
                    "description": "coupon which is used for checkout",
                    "allOf": [
                        {
                            "$ref": "#/definitions/model.ApplicableCoupon"
                        }
                    ]
                }
            }
        },
        "wordUsageIncrements.WordUsageIncrementCreate": {
            "type": "object",
            "properties": {
                "amount": {
                    "description": "negative values are ignored. To add words you need to increase bonus words.",
                    "type": "integer",
                    "default": 0,
                    "minimum": 0
                }
            }
        },
        "workspaceInvite.ConfirmationRequest": {
            "type": "object",
            "required": [
                "confirmationCode"
            ],
            "properties": {
                "confirmationCode": {
                    "description": "The confirmation code from the invite email",
                    "type": "string",
                    "example": "abc123xyz456"
                }
            }
        },
        "workspaceInvite.WorkspaceInvitePage": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/model.WorkspaceInvite"
                    }
                },
                "page": {
                    "$ref": "#/definitions/nfpage.Page"
                }
            }
        }
    },
    "securityDefinitions": {
        "ApiTokenAuth": {
            "type": "apiKey",
            "name": "x-gateway-token",
            "in": "header"
        },
        "LegacyTokenAuth": {
            "type": "apiKey",
            "name": "x-api-token",
            "in": "header"
        }
    }
}