@@ -304,7 +376,7 @@ function ProjectCard({
{/* Footer info: Deadline/Status Text */}
- {(status === 'Funding' || status === 'Validation') &&
+ {(statBucket === 'funding' || statBucket === 'votes') &&
fundingEndDate ? (
diff --git a/features/projects/types/index.ts b/features/projects/types/index.ts
index 8db8ad492..848ef4ec0 100644
--- a/features/projects/types/index.ts
+++ b/features/projects/types/index.ts
@@ -40,6 +40,11 @@ export interface Milestone {
fundingPercentage: number;
title: string;
orderIndex?: string;
+ claimedAt?: string | null;
+ completedAt?: string | null;
+ submittedAt?: string | null;
+ rejectionFeedback?: string | null;
+ resubmissionDeadline?: string | null;
}
export interface User {
@@ -178,6 +183,29 @@ export interface CrowdfundingProject {
submissionStatus?: string | null;
}
+export type CrowdfundingV2Status =
+ | 'DRAFT'
+ | 'SUBMITTED_FOR_REVIEW'
+ | 'REVIEW_REJECTED'
+ | 'REVIEW_APPROVED'
+ | 'VOTING'
+ | 'VOTE_FAILED'
+ | 'VOTE_PASSED'
+ | 'PUBLISHING'
+ | 'FUNDING'
+ | 'COMPLETED'
+ | 'CANCELLED'
+ | 'PAUSED'
+ | 'FAILED';
+
+export interface CrowdfundingReview {
+ id: string;
+ action: 'NOTE' | 'REQUEST_REVISION' | 'APPROVED' | 'REJECTED';
+ reason?: string;
+ details?: string;
+ createdAt: string;
+}
+
export interface Crowdfunding {
id: string;
projectId: string;
@@ -194,6 +222,7 @@ export interface Crowdfunding {
milestones: Milestone[];
stakeholders: any | null;
trustlessWorkStatus: string;
+ v2Status?: CrowdfundingV2Status;
escrowAddress: string;
escrowType: string;
escrowDetails: any | null;
@@ -202,6 +231,10 @@ export interface Crowdfunding {
createdAt: string;
updatedAt: string;
project: CrowdfundingProject;
+ reviews?: CrowdfundingReview[];
+ voteUpCount?: number;
+ voteDownCount?: number;
+ votingEndDate?: string;
// Vote-related properties for UI compatibility
totalVotes?: number;
thresholdVotes?: number;
diff --git a/lib/api/generated/schema.d.ts b/lib/api/generated/schema.d.ts
index 92e9db7b5..d38ceaae7 100644
--- a/lib/api/generated/schema.d.ts
+++ b/lib/api/generated/schema.d.ts
@@ -256,46 +256,6 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/api/users/earnings/withdraw': {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- get?: never;
- put?: never;
- /**
- * Request withdrawal / claim
- * @description Submit a withdrawal. Payout always goes to the user's linked wallet. Claiming (release flow) is for crowdfunding and grants; for crowdfunding, response may include pendingReleases to sign and submit via confirm-release. Hackathon winners do not claim here—admin releases and funds go to their wallet.
- */
- post: operations['EarningsController_withdraw'];
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
- '/api/users/earnings/withdraw/confirm-release': {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- get?: never;
- put?: never;
- /**
- * Submit signed release transaction (crowdfunding)
- * @description After withdraw returns pendingReleases, creator signs the unsigned XDR with their wallet and submits here. On success, the milestone is marked released.
- */
- post: operations['EarningsController_confirmRelease'];
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
'/api/users/me': {
parameters: {
query?: never;
@@ -1213,6 +1173,26 @@ export interface paths {
patch?: never;
trace?: never;
};
+ '/api/crowdfunding/draft': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /**
+ * Create a draft campaign
+ * @description Create a minimal DRAFT campaign (title only) for the creation wizard. Returns its id and slug so the wizard can save each step via PUT and submit for review at the end.
+ */
+ post: operations['CampaignsController_createDraft'];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
'/api/crowdfunding': {
parameters: {
query?: never;
@@ -1345,26 +1325,6 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/api/crowdfunding/{id}/escrow': {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- get?: never;
- /**
- * Update escrow details
- * @description Update escrow details including transaction hash, address, and status. Only campaign owners can update escrow details.
- */
- put: operations['CampaignsController_updateEscrowDetails'];
- post?: never;
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
'/api/crowdfunding/{id}/invitations': {
parameters: {
query?: never;
@@ -1400,26 +1360,6 @@ export interface paths {
patch?: never;
trace?: never;
};
- '/api/crowdfunding/{id}/contribute': {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- get?: never;
- put?: never;
- /**
- * Contribute to campaign
- * @description Make a contribution to a crowdfunding campaign
- */
- post: operations['ContributionsController_contributeToCampaign'];
- delete?: never;
- options?: never;
- head?: never;
- patch?: never;
- trace?: never;
- };
'/api/crowdfunding/{id}/contributions': {
parameters: {
query?: never;
@@ -1663,6 +1603,40 @@ export interface paths {
patch?: never;
trace?: never;
};
+ '/api/crowdfunding/campaigns/{id}/v2/escrow/ops/{opRowId}/submit-signed': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Submit a wallet-signed contribution XDR (EXTERNAL path) */
+ post: operations['BackerCrowdfundingV2Controller_submitSigned'];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ '/api/crowdfunding/campaigns/{id}/v2/escrow/ops/{opRowId}': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ /** Poll the state of a contribution escrow op */
+ get: operations['BackerCrowdfundingV2Controller_getOp'];
+ put?: never;
+ post?: never;
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
'/api/crowdfunding/campaigns/{id}/v2/vote': {
parameters: {
query?: never;
@@ -1732,6 +1706,23 @@ export interface paths {
patch?: never;
trace?: never;
};
+ '/api/crowdfunding/campaigns/{id}/v2/admin/extend-funding': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Extend a live campaign funding deadline */
+ post: operations['AdminCrowdfundingV2Controller_extendFunding'];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
'/api/crowdfunding/campaigns/{id}/v2/admin/pause': {
parameters: {
query?: never;
@@ -1766,6 +1757,40 @@ export interface paths {
patch?: never;
trace?: never;
};
+ '/api/crowdfunding/campaigns/{id}/v2/admin/milestones/{milestoneId}/approve': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Approve a submitted milestone */
+ post: operations['AdminCrowdfundingV2Controller_approveMilestone'];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
+ '/api/crowdfunding/campaigns/{id}/v2/admin/milestones/{milestoneId}/reject': {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ get?: never;
+ put?: never;
+ /** Reject a submitted milestone with feedback */
+ post: operations['AdminCrowdfundingV2Controller_rejectMilestone'];
+ delete?: never;
+ options?: never;
+ head?: never;
+ patch?: never;
+ trace?: never;
+ };
'/api/wallet': {
parameters: {
query?: never;
@@ -14386,45 +14411,6 @@ export interface components {
/** @description Activity feed */
activities: components['schemas']['EarningActivityDto'][];
};
- WithdrawItemDto: {
- /**
- * @description Source of the claimable (crowdfunding or grants; user claims release to wallet)
- * @enum {string}
- */
- source: 'crowdfunding' | 'grants';
- /** @description Entity id (e.g. milestoneId for crowdfunding or grants) */
- entityId: string;
- };
- WithdrawRequestDto: {
- /** @description Items to claim (source + entityId). Only crowdfunding supported (grants not yet). Payout goes to user's linked wallet. */
- items?: components['schemas']['WithdrawItemDto'][];
- };
- ConfirmReleaseDto: {
- /** @description Signed XDR from creator/grantee wallet (release milestone transaction from real wallet) */
- signedXdr: string;
- /** @description Entity id (e.g. crowdfunding milestone id) */
- entityId: string;
- /**
- * @description Source of the claimable (only crowdfunding supported for confirm-release)
- * @example crowdfunding
- * @enum {string}
- */
- source: 'crowdfunding';
- };
- ConfirmReleaseResponseDto: {
- /**
- * @description Whether the release was submitted successfully
- * @example true
- */
- success: boolean;
- /** @description Transaction hash once the release is executed on-chain */
- transactionHash?: string;
- /**
- * @description Human-readable message
- * @example Release submitted successfully
- */
- message?: string;
- };
DashboardUserStatsDto: {
followers: number;
following: number;
@@ -14593,7 +14579,7 @@ export interface components {
*/
milestones: string[];
/**
- * @description Team of the campaign
+ * @description Team of the campaign (optional; solo builders may omit)
* @example [
* {
* "name": "John Doe",
@@ -14604,7 +14590,7 @@ export interface components {
* }
* ]
*/
- team: string[];
+ team?: string[];
/**
* @description Contact of the campaign
* @example {
@@ -14614,7 +14600,7 @@ export interface components {
*/
contact: components['schemas']['ContactDto'];
/**
- * @description Social links of the campaign
+ * @description Social links of the campaign (optional)
* @example [
* {
* "platform": "twitter",
@@ -14622,17 +14608,14 @@ export interface components {
* }
* ]
*/
- socialLinks: string[];
- /**
- * @description Escrow contract ID for the campaign
- * @example CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV
- */
- escrowId?: string;
+ socialLinks?: string[];
+ };
+ CreateDraftDto: {
/**
- * @description Transaction hash of the deployed escrow contract
- * @example a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
+ * @description Working title for the campaign
+ * @example Stellar Analytics Dashboard
*/
- transactionHash?: string;
+ title: string;
};
UpdateCampaignDto: {
/**
@@ -14709,7 +14692,7 @@ export interface components {
*/
milestones?: string[];
/**
- * @description Team of the campaign
+ * @description Team of the campaign (optional; solo builders may omit)
* @example [
* {
* "name": "John Doe",
@@ -14730,7 +14713,7 @@ export interface components {
*/
contact?: components['schemas']['ContactDto'];
/**
- * @description Social links of the campaign
+ * @description Social links of the campaign (optional)
* @example [
* {
* "platform": "twitter",
@@ -14739,40 +14722,6 @@ export interface components {
* ]
*/
socialLinks?: string[];
- /**
- * @description Escrow contract ID for the campaign
- * @example CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV
- */
- escrowId?: string;
- /**
- * @description Transaction hash of the deployed escrow contract
- * @example a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
- */
- transactionHash?: string;
- };
- UpdateEscrowDto: {
- /**
- * @description Transaction hash of the deployed escrow contract
- * @example a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
- */
- transactionHash?: string;
- /**
- * @description Escrow contract address
- * @example CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV
- */
- escrowAddress?: string;
- /**
- * @description Trustless Work status
- * @example deployed
- * @enum {string}
- */
- trustlessWorkStatus?: 'pending' | 'deployed' | 'funded' | 'failed';
- /**
- * @description Escrow type
- * @example multi-release
- * @enum {string}
- */
- escrowType?: 'single-release' | 'multi-release';
};
InviteTeamMemberDto: {
/**
@@ -14786,24 +14735,6 @@ export interface components {
*/
role: string;
};
- ContributeCampaignDto: {
- /**
- * @description Amount of the contribution
- * @example 100
- */
- amount: number;
- /**
- * @description Optional message from the contributor
- * @example I love this campaign!
- */
- message?: string;
- /**
- * @description Whether to make this contribution anonymous
- * @default false
- * @example false
- */
- anonymous: boolean;
- };
ValidateMilestoneSubmissionDto: {
/**
* @description Array of proof of work file URLs (documents, images, reports, etc.) - must be valid URLs with http, https, or ipfs protocol
@@ -14899,6 +14830,10 @@ export interface components {
*/
anonymous: boolean;
};
+ CrowdfundingSubmitSignedXdrDto: {
+ /** @description Signed transaction XDR returned by the wallet. */
+ signedXdr: string;
+ };
CastCrowdfundingVoteDto: {
/**
* @description UP supports the campaign, DOWN opposes it.
@@ -14913,15 +14848,34 @@ export interface components {
* @example user_1234567890
*/
delegatedReviewerId: string;
+ /**
+ * @description Minimum total community votes required to resolve the vote (quorum). Defaults to 1 for now (target is 10 at launch).
+ * @example 10
+ */
+ voteGoal?: number;
};
RejectCrowdfundingCampaignDto: {
/** @description Reason for rejection; surfaced to the builder. */
reason?: string;
};
+ ExtendCrowdfundingFundingDto: {
+ /**
+ * @description New funding deadline (ISO 8601). Must be in the future. Enforced off-chain by the contribute gate.
+ * @example 2026-08-01T00:00:00.000Z
+ */
+ fundingEndDate: string;
+ };
PauseCrowdfundingCampaignDto: {
/** @description Reason for the pause. */
reason?: string;
};
+ ApproveCrowdfundingMilestoneDto: Record;
+ RejectCrowdfundingMilestoneDto: {
+ /** @description Feedback shown to the builder. */
+ rejectionFeedback: string;
+ /** @description Deadline by which the builder must resubmit (ISO 8601). */
+ resubmissionDeadline?: string;
+ };
ReclaimDormantDto: {
/**
* @description Minimum days a wallet must have been idle to be eligible. Default 90.
@@ -17048,7 +17002,7 @@ export interface components {
};
HackathonEscrowOpResponseDto: {
/**
- * @description Internal cuid for the EscrowOp row. Use this for follow-up calls.
+ * @description Internal uuid for the EscrowOp row. Use this for follow-up calls.
* @example cmpwiox7u0000yy4404ojbk9t
*/
id: string;
@@ -18105,7 +18059,7 @@ export interface components {
fundingMode: 'EXTERNAL' | 'MANAGED';
};
BountyEscrowOpResponseDto: {
- /** @description Internal EscrowOp cuid. */
+ /** @description Internal EscrowOp uuid. */
id: string;
/** @description Hex-encoded 32-byte contract op_id. */
opId: string;
@@ -19282,101 +19236,6 @@ export interface operations {
};
};
};
- EarningsController_withdraw: {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- requestBody: {
- content: {
- 'application/json': components['schemas']['WithdrawRequestDto'];
- };
- };
- responses: {
- /** @description Withdrawal submitted successfully */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- 'application/json': {
- success?: boolean;
- withdrawalId?: string;
- transactionHash?: string;
- message?: string;
- };
- };
- };
- /** @description Invalid request or not claimable */
- 400: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Unauthorized */
- 401: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Identity verification required. Complete KYC to withdraw funds. */
- 403: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- };
- };
- EarningsController_confirmRelease: {
- parameters: {
- query?: never;
- header?: never;
- path?: never;
- cookie?: never;
- };
- requestBody: {
- content: {
- 'application/json': components['schemas']['ConfirmReleaseDto'];
- };
- };
- responses: {
- /** @description Release submitted successfully */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content: {
- 'application/json': components['schemas']['ConfirmReleaseResponseDto'];
- };
- };
- /** @description Invalid request or submit failed */
- 400: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Unauthorized */
- 401: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Identity verification required. Complete KYC to release funds. */
- 403: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- };
- };
UserController_getProfile: {
parameters: {
query?: never;
@@ -21026,6 +20885,28 @@ export interface operations {
};
};
};
+ CampaignsController_createDraft: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path?: never;
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CreateDraftDto'];
+ };
+ };
+ responses: {
+ /** @description Draft campaign created */
+ 201: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
CampaignsController_getCampaigns: {
parameters: {
query: {
@@ -21282,45 +21163,6 @@ export interface operations {
};
};
};
- CampaignsController_updateEscrowDetails: {
- parameters: {
- query?: never;
- header?: never;
- path: {
- /** @description Campaign ID or slug */
- id: string;
- };
- cookie?: never;
- };
- requestBody: {
- content: {
- 'application/json': components['schemas']['UpdateEscrowDto'];
- };
- };
- responses: {
- /** @description Escrow details updated successfully */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description User does not own the campaign */
- 403: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Campaign not found */
- 404: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- };
- };
CampaignsController_getInvitations: {
parameters: {
query?: never;
@@ -21382,38 +21224,6 @@ export interface operations {
};
};
};
- ContributionsController_contributeToCampaign: {
- parameters: {
- query?: never;
- header?: never;
- path: {
- /** @description Campaign ID or slug */
- id: string;
- };
- cookie?: never;
- };
- requestBody: {
- content: {
- 'application/json': components['schemas']['ContributeCampaignDto'];
- };
- };
- responses: {
- /** @description Contribution added successfully */
- 200: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- /** @description Campaign has ended or is fully funded */
- 403: {
- headers: {
- [name: string]: unknown;
- };
- content?: never;
- };
- };
- };
ContributionsController_getCampaignContributions: {
parameters: {
query?: {
@@ -21779,6 +21589,50 @@ export interface operations {
};
};
};
+ BackerCrowdfundingV2Controller_submitSigned: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ id: string;
+ opRowId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['CrowdfundingSubmitSignedXdrDto'];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ BackerCrowdfundingV2Controller_getOp: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ id: string;
+ opRowId: string;
+ };
+ cookie?: never;
+ };
+ requestBody?: never;
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
CommunityCrowdfundingV2Controller_getTally: {
parameters: {
query?: never;
@@ -21886,6 +21740,29 @@ export interface operations {
};
};
};
+ AdminCrowdfundingV2Controller_extendFunding: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ id: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ExtendCrowdfundingFundingDto'];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
AdminCrowdfundingV2Controller_pause: {
parameters: {
query?: never;
@@ -21928,6 +21805,54 @@ export interface operations {
};
};
};
+ AdminCrowdfundingV2Controller_approveMilestone: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ id: string;
+ milestoneId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['ApproveCrowdfundingMilestoneDto'];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
+ AdminCrowdfundingV2Controller_rejectMilestone: {
+ parameters: {
+ query?: never;
+ header?: never;
+ path: {
+ id: string;
+ milestoneId: string;
+ };
+ cookie?: never;
+ };
+ requestBody: {
+ content: {
+ 'application/json': components['schemas']['RejectCrowdfundingMilestoneDto'];
+ };
+ };
+ responses: {
+ 200: {
+ headers: {
+ [name: string]: unknown;
+ };
+ content?: never;
+ };
+ };
+ };
WalletController_getWallet: {
parameters: {
query?: never;
@@ -27997,7 +27922,7 @@ export interface operations {
organizationId: string;
/** @description Hackathon id */
id: string;
- /** @description EscrowOp cuid returned by the publish call */
+ /** @description EscrowOp uuid returned by the publish call */
opRowId: string;
};
cookie?: never;
@@ -28027,7 +27952,7 @@ export interface operations {
organizationId: string;
/** @description Hackathon id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -28073,7 +27998,7 @@ export interface operations {
path: {
/** @description Hackathon id */
id: string;
- /** @description HackathonSubmission cuid */
+ /** @description HackathonSubmission uuid */
submissionId: string;
};
cookie?: never;
@@ -28101,7 +28026,7 @@ export interface operations {
path: {
/** @description Hackathon id */
id: string;
- /** @description HackathonSubmission cuid */
+ /** @description HackathonSubmission uuid */
submissionId: string;
};
cookie?: never;
@@ -28155,7 +28080,7 @@ export interface operations {
path: {
/** @description Hackathon id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -28183,7 +28108,7 @@ export interface operations {
path: {
/** @description Hackathon id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -32704,7 +32629,7 @@ export interface operations {
organizationId: string;
/** @description Bounty id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -32733,7 +32658,7 @@ export interface operations {
organizationId: string;
/** @description Bounty id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -32887,7 +32812,7 @@ export interface operations {
path: {
/** @description Bounty id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
@@ -32915,7 +32840,7 @@ export interface operations {
path: {
/** @description Bounty id */
id: string;
- /** @description EscrowOp cuid */
+ /** @description EscrowOp uuid */
opRowId: string;
};
cookie?: never;
diff --git a/lib/api/user/earnings.ts b/lib/api/user/earnings.ts
index c62621fff..a153e8975 100644
--- a/lib/api/user/earnings.ts
+++ b/lib/api/user/earnings.ts
@@ -1,5 +1,4 @@
import { api } from '../api';
-import { ApiResponse } from '../types';
import type { Schemas } from '../openapi';
export type EarningActivity = Schemas['EarningActivityDto'];
@@ -10,18 +9,6 @@ export type GetEarningsResponse =
| { success: true; data: EarningsData; message?: string }
| { success: false; error: string; message?: string };
-export interface ClaimEarningRequest {
- activityId: string;
-}
-
-export interface ClaimEarningResponse extends ApiResponse {
- success: boolean;
- message: string;
- data?: {
- transactionHash: string;
- };
-}
-
/**
* Get user earnings data
*/
@@ -29,16 +16,3 @@ export const getUserEarnings = async (): Promise => {
const res = await api.get('/users/earnings');
return res.data;
};
-
-/**
- * Claim a specific earning
- */
-export const claimEarning = async (
- data: ClaimEarningRequest
-): Promise => {
- const res = await api.post(
- '/users/earnings/claim',
- data
- );
- return res.data;
-};
diff --git a/lib/crowdfunding/status.ts b/lib/crowdfunding/status.ts
new file mode 100644
index 000000000..25a4f9b82
--- /dev/null
+++ b/lib/crowdfunding/status.ts
@@ -0,0 +1,145 @@
+/**
+ * Plain-language status labels for crowdfunding campaigns and milestones.
+ *
+ * Single source of truth so the public page, builder dashboard, status banner,
+ * and data table all show the same jargon-free wording. NEVER surface raw
+ * `v2Status` / `reviewStatus` enum values to users.
+ */
+import type { CrowdfundingV2Status } from '@/features/crowdfunding';
+
+export type StatusTone =
+ | 'neutral'
+ | 'info'
+ | 'warning'
+ | 'success'
+ | 'danger'
+ | 'live';
+
+export interface StatusMeta {
+ /** Short pill label, plain English. */
+ label: string;
+ tone: StatusTone;
+ /** One plain sentence a non-technical person understands. */
+ description: string;
+}
+
+const CAMPAIGN_STATUS: Record = {
+ DRAFT: {
+ label: 'Draft',
+ tone: 'neutral',
+ description: 'Still being put together.',
+ },
+ SUBMITTED_FOR_REVIEW: {
+ label: 'In review',
+ tone: 'info',
+ description:
+ 'The Boundless team is checking this campaign before it opens to the community.',
+ },
+ REVIEW_REJECTED: {
+ label: 'Changes requested',
+ tone: 'warning',
+ description: 'The team asked for some changes before this can go ahead.',
+ },
+ REVIEW_APPROVED: {
+ label: 'Ready to launch',
+ tone: 'success',
+ description: 'Approved. Launch it to start accepting support.',
+ },
+ VOTING: {
+ label: 'Community vote',
+ tone: 'info',
+ description: 'The community is deciding whether this campaign goes live.',
+ },
+ VOTE_FAILED: {
+ label: 'Not approved',
+ tone: 'danger',
+ description: 'The community vote did not pass.',
+ },
+ VOTE_PASSED: {
+ label: 'Ready to launch',
+ tone: 'success',
+ description:
+ 'Passed the community vote and is getting ready to accept support.',
+ },
+ PUBLISHING: {
+ label: 'Launching',
+ tone: 'info',
+ description: 'Setting things up. Support opens in a moment.',
+ },
+ FUNDING: {
+ label: 'Live',
+ tone: 'live',
+ description: 'Open for support right now.',
+ },
+ COMPLETED: {
+ label: 'Completed',
+ tone: 'success',
+ description: 'Fully delivered and closed.',
+ },
+ CANCELLED: {
+ label: 'Cancelled',
+ tone: 'danger',
+ description: 'This campaign was cancelled and supporters were refunded.',
+ },
+ PAUSED: {
+ label: 'Paused',
+ tone: 'warning',
+ description: 'Temporarily on hold. Support is paused.',
+ },
+ FAILED: {
+ label: 'Needs attention',
+ tone: 'danger',
+ description: 'Something went wrong setting this up.',
+ },
+};
+
+export function campaignStatus(v2Status?: string | null): StatusMeta {
+ return (
+ CAMPAIGN_STATUS[v2Status as CrowdfundingV2Status] ?? CAMPAIGN_STATUS.DRAFT
+ );
+}
+
+/** Pill/badge classes per tone. */
+export const TONE_PILL: Record = {
+ neutral: 'bg-zinc-800 text-zinc-300 border-zinc-700',
+ info: 'bg-blue-500/15 text-blue-400 border-blue-500/30',
+ warning: 'bg-amber-500/15 text-amber-400 border-amber-500/30',
+ success: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30',
+ danger: 'bg-red-500/15 text-red-400 border-red-500/30',
+ live: 'bg-primary/15 text-primary border-primary/30',
+};
+
+// ── Milestones ────────────────────────────────────────────────────────────────
+
+export interface MilestoneStateMeta {
+ label: string;
+ tone: StatusTone;
+}
+
+/**
+ * Map a milestone's review status (+ whether it's been paid) to a plain state.
+ * Hides backend values like SUBMITTED / UNDER_REVIEW / RESUBMISSION_REQUIRED.
+ */
+export function milestoneState(
+ reviewStatus?: string | null,
+ claimedAt?: string | null
+): MilestoneStateMeta {
+ if (claimedAt) return { label: 'Paid out', tone: 'success' };
+ switch ((reviewStatus ?? '').toUpperCase()) {
+ case 'APPROVED':
+ return { label: 'Approved', tone: 'success' };
+ case 'COMPLETED':
+ return { label: 'Delivered', tone: 'success' };
+ case 'SUBMITTED':
+ case 'IN_REVIEW':
+ case 'UNDER_REVIEW':
+ return { label: 'In review', tone: 'info' };
+ case 'REJECTED':
+ case 'RESUBMISSION_REQUIRED':
+ case 'NEEDS_REVISION':
+ return { label: 'Changes requested', tone: 'warning' };
+ case 'PENDING':
+ default:
+ return { label: 'Upcoming', tone: 'neutral' };
+ }
+}
diff --git a/openapi.snapshot.json b/openapi.snapshot.json
index a4d18ea12..3c549d403 100644
--- a/openapi.snapshot.json
+++ b/openapi.snapshot.json
@@ -5,7 +5,11 @@
"get": {
"operationId": "AppController_getHello",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["App"]
}
},
@@ -13,7 +17,11 @@
"get": {
"operationId": "NotificationsController_getNotifications",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -21,7 +29,11 @@
"get": {
"operationId": "NotificationsController_getUnreadCount",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -33,10 +45,16 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -44,7 +62,11 @@
"put": {
"operationId": "NotificationsController_markAllAsRead",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -56,10 +78,16 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -67,7 +95,11 @@
"get": {
"operationId": "NotificationsController_getPreferences",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
},
"put": {
@@ -83,7 +115,11 @@
}
}
},
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -91,7 +127,11 @@
"post": {
"operationId": "NotificationsController_sendTestNotification",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -99,7 +139,11 @@
"post": {
"operationId": "NotificationsController_triggerMarketingCron",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Notifications"]
}
},
@@ -108,10 +152,18 @@
"operationId": "SettingsController_getSettings",
"parameters": [],
"responses": {
- "200": { "description": "Settings retrieved successfully" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Settings retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user settings",
"tags": ["users"]
}
@@ -123,16 +175,30 @@
"requestBody": {
"required": true,
"description": "Notification settings object",
- "content": { "application/json": { "schema": { "type": "string" } } }
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
},
"responses": {
"200": {
"description": "Notification settings updated successfully"
},
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update notification settings",
"tags": ["users"]
}
@@ -152,11 +218,21 @@
}
},
"responses": {
- "200": { "description": "Privacy settings updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Privacy settings updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update privacy settings",
"tags": ["users"]
}
@@ -176,11 +252,21 @@
}
},
"responses": {
- "200": { "description": "Appearance settings updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Appearance settings updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update appearance settings",
"tags": ["users"]
}
@@ -195,21 +281,27 @@
"required": false,
"in": "query",
"description": "Max activities to return (default 100)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
"description": "Offset for activity pagination",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "username",
"required": true,
"in": "query",
"description": "Username of the profile to fetch earnings for",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -223,8 +315,12 @@
}
}
},
- "400": { "description": "Missing or invalid username" },
- "404": { "description": "User not found" }
+ "400": {
+ "description": "Missing or invalid username"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
"summary": "Get public earnings for a user (profile page)",
"tags": ["users"]
@@ -240,105 +336,41 @@
"required": false,
"in": "query",
"description": "Max activities to return (default 100)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
"description": "Offset for activity pagination",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
"200": {
"description": "Earnings data retrieved successfully",
- "content": {
- "application/json": {
- "schema": { "$ref": "#/components/schemas/EarningsResponseDto" }
- }
- }
- },
- "401": { "description": "Unauthorized" }
- },
- "security": [{ "JWT-auth": [] }],
- "summary": "Get current user earnings",
- "tags": ["users"]
- }
- },
- "/api/users/earnings/withdraw": {
- "post": {
- "description": "Submit a withdrawal. Payout always goes to the user's linked wallet. Claiming (release flow) is for crowdfunding and grants; for crowdfunding, response may include pendingReleases to sign and submit via confirm-release. Hackathon winners do not claim here—admin releases and funds go to their wallet.",
- "operationId": "EarningsController_withdraw",
- "parameters": [],
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": { "$ref": "#/components/schemas/WithdrawRequestDto" }
- }
- }
- },
- "responses": {
- "200": {
- "description": "Withdrawal submitted successfully",
"content": {
"application/json": {
"schema": {
- "type": "object",
- "properties": {
- "success": { "type": "boolean" },
- "withdrawalId": { "type": "string" },
- "transactionHash": { "type": "string" },
- "message": { "type": "string" }
- }
+ "$ref": "#/components/schemas/EarningsResponseDto"
}
}
}
},
- "400": { "description": "Invalid request or not claimable" },
- "401": { "description": "Unauthorized" },
- "403": {
- "description": "Identity verification required. Complete KYC to withdraw funds."
- }
- },
- "security": [{ "JWT-auth": [] }],
- "summary": "Request withdrawal / claim",
- "tags": ["users"]
- }
- },
- "/api/users/earnings/withdraw/confirm-release": {
- "post": {
- "description": "After withdraw returns pendingReleases, creator signs the unsigned XDR with their wallet and submits here. On success, the milestone is marked released.",
- "operationId": "EarningsController_confirmRelease",
- "parameters": [],
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": { "$ref": "#/components/schemas/ConfirmReleaseDto" }
- }
+ "401": {
+ "description": "Unauthorized"
}
},
- "responses": {
- "200": {
- "description": "Release submitted successfully",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/ConfirmReleaseResponseDto"
- }
- }
- }
- },
- "400": { "description": "Invalid request or submit failed" },
- "401": { "description": "Unauthorized" },
- "403": {
- "description": "Identity verification required. Complete KYC to release funds."
+ "security": [
+ {
+ "JWT-auth": []
}
- },
- "security": [{ "JWT-auth": [] }],
- "summary": "Submit signed release transaction (crowdfunding)",
+ ],
+ "summary": "Get current user earnings",
"tags": ["users"]
}
},
@@ -351,13 +383,21 @@
"description": "User dashboard with profile, stats, chart data, activities graph, and recent activities retrieved successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/DashboardDto" }
+ "schema": {
+ "$ref": "#/components/schemas/DashboardDto"
+ }
}
}
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get current user dashboard with overview, chart, and activities graph",
"tags": ["users"]
}
@@ -367,7 +407,9 @@
"operationId": "UserController_getPublic",
"parameters": [],
"responses": {
- "200": { "description": "Public route accessed successfully" }
+ "200": {
+ "description": "Public route accessed successfully"
+ }
},
"summary": "Public test endpoint",
"tags": ["users"]
@@ -378,7 +420,9 @@
"operationId": "UserController_getOptional",
"parameters": [],
"responses": {
- "200": { "description": "Optional auth route accessed successfully" }
+ "200": {
+ "description": "Optional auth route accessed successfully"
+ }
},
"summary": "Optional authentication test endpoint",
"tags": ["users"]
@@ -394,12 +438,19 @@
"required": true,
"in": "path",
"description": "Username of the user to retrieve",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User profile retrieved successfully" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User profile retrieved successfully"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
"summary": "Get user profile by username",
"tags": ["users"]
@@ -415,26 +466,37 @@
"required": true,
"in": "path",
"description": "Username of the user",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
"description": "Pagination offset",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of followers to return",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Followers retrieved successfully" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "Followers retrieved successfully"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
"summary": "Get user followers",
"tags": ["users"]
@@ -450,7 +512,10 @@
"required": true,
"in": "path",
"description": "Username of the user",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
},
{
"name": "entityType",
@@ -475,19 +540,27 @@
"required": false,
"in": "query",
"description": "Pagination offset",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of following to return",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Following list retrieved successfully" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "Following list retrieved successfully"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
"summary": "Get users followed by this profile",
"tags": ["users"]
@@ -498,10 +571,18 @@
"operationId": "ProfileController_getProfile",
"parameters": [],
"responses": {
- "200": { "description": "Profile retrieved successfully" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Profile retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get current user profile",
"tags": ["users"]
},
@@ -512,16 +593,28 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateProfileDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateProfileDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Profile updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Profile updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update current user profile",
"tags": ["users"]
}
@@ -531,10 +624,18 @@
"operationId": "ProfileController_getProfileStats",
"parameters": [],
"responses": {
- "200": { "description": "Profile stats retrieved successfully" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Profile stats retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user profile statistics",
"tags": ["users"]
}
@@ -544,10 +645,18 @@
"operationId": "ProfileController_getActivity",
"parameters": [],
"responses": {
- "200": { "description": "Activity retrieved successfully" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Activity retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user activity",
"tags": ["users"]
}
@@ -574,11 +683,21 @@
}
},
"responses": {
- "200": { "description": "Avatar uploaded successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Avatar uploaded successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Upload user avatar",
"tags": ["users"]
}
@@ -588,10 +707,18 @@
"operationId": "PreferencesController_getPreferences",
"parameters": [],
"responses": {
- "200": { "description": "Preferences retrieved successfully" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Preferences retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user preferences",
"tags": ["users"]
}
@@ -607,18 +734,31 @@
"schema": {
"type": "object",
"properties": {
- "language": { "type": "string", "example": "en" }
+ "language": {
+ "type": "string",
+ "example": "en"
+ }
}
}
}
}
},
"responses": {
- "200": { "description": "Language preference updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Language preference updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update language preference",
"tags": ["users"]
}
@@ -644,11 +784,21 @@
}
},
"responses": {
- "200": { "description": "Timezone preference updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Timezone preference updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update timezone preference",
"tags": ["users"]
}
@@ -666,7 +816,9 @@
"properties": {
"categories": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["tech", "design"]
}
}
@@ -675,11 +827,21 @@
}
},
"responses": {
- "200": { "description": "Category preferences updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Category preferences updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update category preferences",
"tags": ["users"]
}
@@ -697,7 +859,9 @@
"properties": {
"skills": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["javascript", "react"]
}
}
@@ -706,11 +870,21 @@
}
},
"responses": {
- "200": { "description": "Skill preferences updated successfully" },
- "400": { "description": "Bad request" },
- "401": { "description": "Unauthorized" }
+ "200": {
+ "description": "Skill preferences updated successfully"
+ },
+ "400": {
+ "description": "Bad request"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update skill preferences",
"tags": ["users"]
}
@@ -720,11 +894,21 @@
"operationId": "UsersController_getUsers",
"parameters": [],
"responses": {
- "200": { "description": "Users retrieved successfully" },
- "401": { "description": "Unauthorized" },
- "403": { "description": "Forbidden - Admin access required" }
+ "200": {
+ "description": "Users retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get paginated list of users (Admin only)",
"tags": ["users"]
}
@@ -738,16 +922,30 @@
"required": true,
"in": "path",
"description": "User ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User retrieved successfully" },
- "400": { "description": "Invalid user ID" },
- "401": { "description": "Unauthorized" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User retrieved successfully"
+ },
+ "400": {
+ "description": "Invalid user ID"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user by ID",
"tags": ["users"]
},
@@ -759,23 +957,37 @@
"required": true,
"in": "path",
"description": "User ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateUserDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateUserDto"
+ }
}
}
},
"responses": {
- "200": { "description": "User updated successfully" },
- "401": { "description": "Unauthorized" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User updated successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update user by ID",
"tags": ["users"]
},
@@ -787,16 +999,30 @@
"required": true,
"in": "path",
"description": "User ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User deleted successfully" },
- "401": { "description": "Unauthorized" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User deleted successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Delete user by ID (Admin only)",
"tags": ["users"]
}
@@ -810,12 +1036,18 @@
"required": true,
"in": "path",
"description": "User ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User profile retrieved successfully" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User profile retrieved successfully"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
"summary": "Get user profile by ID",
"tags": ["users"]
@@ -846,18 +1078,35 @@
},
"tags": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["project", "logo"],
"description": "Tags for the file"
},
"transformation": {
"type": "object",
"properties": {
- "width": { "type": "number", "example": 400 },
- "height": { "type": "number", "example": 400 },
- "crop": { "type": "string", "example": "fit" },
- "quality": { "type": "string", "example": "auto" },
- "format": { "type": "string", "example": "auto" }
+ "width": {
+ "type": "number",
+ "example": 400
+ },
+ "height": {
+ "type": "number",
+ "example": 400
+ },
+ "crop": {
+ "type": "string",
+ "example": "fit"
+ },
+ "quality": {
+ "type": "string",
+ "example": "auto"
+ },
+ "format": {
+ "type": "string",
+ "example": "auto"
+ }
},
"description": "Image transformation options"
}
@@ -871,13 +1120,21 @@
"description": "File uploaded successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UploadResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UploadResponseDto"
+ }
}
}
},
- "400": { "description": "Invalid file or upload failed" }
+ "400": {
+ "description": "Invalid file or upload failed"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Upload a single file",
"tags": ["Upload"]
}
@@ -897,7 +1154,10 @@
"properties": {
"files": {
"type": "array",
- "items": { "type": "string", "format": "binary" },
+ "items": {
+ "type": "string",
+ "format": "binary"
+ },
"description": "Files to upload"
},
"folder": {
@@ -907,7 +1167,9 @@
},
"tags": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["project", "gallery"],
"description": "Tags for the files"
}
@@ -927,9 +1189,15 @@
}
}
},
- "400": { "description": "Invalid files or upload failed" }
+ "400": {
+ "description": "Invalid files or upload failed"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Upload multiple files",
"tags": ["Upload"]
}
@@ -954,7 +1222,10 @@
"required": true,
"in": "path",
"description": "Type of resource",
- "schema": { "enum": ["image", "video", "raw"], "type": "string" }
+ "schema": {
+ "enum": ["image", "video", "raw"],
+ "type": "string"
+ }
}
],
"responses": {
@@ -965,7 +1236,10 @@
"schema": {
"type": "object",
"properties": {
- "success": { "type": "boolean", "example": true },
+ "success": {
+ "type": "boolean",
+ "example": true
+ },
"message": {
"type": "string",
"example": "File deleted successfully"
@@ -975,9 +1249,15 @@
}
}
},
- "404": { "description": "File not found" }
+ "404": {
+ "description": "File not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete a file",
"tags": ["Upload"]
}
@@ -1002,7 +1282,10 @@
"required": true,
"in": "path",
"description": "Type of resource",
- "schema": { "enum": ["image", "video", "raw"], "type": "string" }
+ "schema": {
+ "enum": ["image", "video", "raw"],
+ "type": "string"
+ }
}
],
"responses": {
@@ -1010,13 +1293,21 @@
"description": "File information retrieved successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/FileInfoResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/FileInfoResponseDto"
+ }
}
}
},
- "404": { "description": "File not found" }
+ "404": {
+ "description": "File not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get file information",
"tags": ["Upload"]
}
@@ -1031,21 +1322,29 @@
"required": false,
"in": "query",
"description": "Maximum number of results",
- "schema": { "example": 50, "type": "number" }
+ "schema": {
+ "example": 50,
+ "type": "number"
+ }
},
{
"name": "resourceType",
"required": false,
"in": "query",
"description": "Resource type to filter by",
- "schema": { "enum": ["image", "video", "raw"], "type": "string" }
+ "schema": {
+ "enum": ["image", "video", "raw"],
+ "type": "string"
+ }
},
{
"name": "folder",
"required": false,
"in": "query",
"description": "Folder to search in",
- "schema": { "example": "boundless/projects/project123" }
+ "schema": {
+ "example": "boundless/projects/project123"
+ }
},
{
"name": "tags",
@@ -1055,7 +1354,9 @@
"schema": {
"example": ["project", "logo"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
}
],
@@ -1070,9 +1371,15 @@
}
}
},
- "400": { "description": "Search failed" }
+ "400": {
+ "description": "Search failed"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Search files",
"tags": ["Upload"]
}
@@ -1097,35 +1404,47 @@
"required": false,
"in": "query",
"description": "Output format",
- "schema": { "example": "auto" }
+ "schema": {
+ "example": "auto"
+ }
},
{
"name": "quality",
"required": false,
"in": "query",
"description": "Quality setting",
- "schema": { "example": "auto" }
+ "schema": {
+ "example": "auto"
+ }
},
{
"name": "crop",
"required": false,
"in": "query",
"description": "Crop mode",
- "schema": { "example": "fit" }
+ "schema": {
+ "example": "fit"
+ }
},
{
"name": "height",
"required": false,
"in": "query",
"description": "Desired height",
- "schema": { "example": 400, "type": "number" }
+ "schema": {
+ "example": 400,
+ "type": "number"
+ }
},
{
"name": "width",
"required": false,
"in": "query",
"description": "Desired width",
- "schema": { "example": 400, "type": "number" }
+ "schema": {
+ "example": 400,
+ "type": "number"
+ }
}
],
"responses": {
@@ -1139,9 +1458,15 @@
}
}
},
- "400": { "description": "Failed to generate URL" }
+ "400": {
+ "description": "Failed to generate URL"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate optimized URL",
"tags": ["Upload"]
}
@@ -1166,35 +1491,47 @@
"required": false,
"in": "query",
"description": "Output format",
- "schema": { "example": "auto" }
+ "schema": {
+ "example": "auto"
+ }
},
{
"name": "quality",
"required": false,
"in": "query",
"description": "Quality setting",
- "schema": { "example": "auto" }
+ "schema": {
+ "example": "auto"
+ }
},
{
"name": "crop",
"required": false,
"in": "query",
"description": "Crop mode",
- "schema": { "example": "fill" }
+ "schema": {
+ "example": "fill"
+ }
},
{
"name": "height",
"required": false,
"in": "query",
"description": "Base height for responsive breakpoints",
- "schema": { "example": 600, "type": "number" }
+ "schema": {
+ "example": 600,
+ "type": "number"
+ }
},
{
"name": "width",
"required": false,
"in": "query",
"description": "Base width for responsive breakpoints",
- "schema": { "example": 800, "type": "number" }
+ "schema": {
+ "example": 800,
+ "type": "number"
+ }
}
],
"responses": {
@@ -1208,9 +1545,15 @@
}
}
},
- "400": { "description": "Failed to generate responsive URLs" }
+ "400": {
+ "description": "Failed to generate responsive URLs"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate responsive URLs",
"tags": ["Upload"]
}
@@ -1235,7 +1578,10 @@
"required": false,
"in": "query",
"description": "Avatar size (square)",
- "schema": { "example": 200, "type": "number" }
+ "schema": {
+ "example": 200,
+ "type": "number"
+ }
}
],
"responses": {
@@ -1249,9 +1595,15 @@
}
}
},
- "400": { "description": "Failed to generate avatar URL" }
+ "400": {
+ "description": "Failed to generate avatar URL"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate avatar URL",
"tags": ["Upload"]
}
@@ -1276,14 +1628,20 @@
"required": false,
"in": "query",
"description": "Logo height",
- "schema": { "example": 400, "type": "number" }
+ "schema": {
+ "example": 400,
+ "type": "number"
+ }
},
{
"name": "width",
"required": false,
"in": "query",
"description": "Logo width",
- "schema": { "example": 400, "type": "number" }
+ "schema": {
+ "example": 400,
+ "type": "number"
+ }
}
],
"responses": {
@@ -1297,9 +1655,15 @@
}
}
},
- "400": { "description": "Failed to generate logo URL" }
+ "400": {
+ "description": "Failed to generate logo URL"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate logo URL",
"tags": ["Upload"]
}
@@ -1324,14 +1688,20 @@
"required": false,
"in": "query",
"description": "Banner height",
- "schema": { "example": 600, "type": "number" }
+ "schema": {
+ "example": 600,
+ "type": "number"
+ }
},
{
"name": "width",
"required": false,
"in": "query",
"description": "Banner width",
- "schema": { "example": 1200, "type": "number" }
+ "schema": {
+ "example": 1200,
+ "type": "number"
+ }
}
],
"responses": {
@@ -1345,9 +1715,15 @@
}
}
},
- "400": { "description": "Failed to generate banner URL" }
+ "400": {
+ "description": "Failed to generate banner URL"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate banner URL",
"tags": ["Upload"]
}
@@ -1368,9 +1744,15 @@
}
}
},
- "400": { "description": "Failed to get usage stats" }
+ "400": {
+ "description": "Failed to get usage stats"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get usage statistics",
"tags": ["Upload"]
}
@@ -1383,11 +1765,17 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/RegisterDto" }
+ "schema": {
+ "$ref": "#/components/schemas/RegisterDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1399,11 +1787,17 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/LoginDto" }
+ "schema": {
+ "$ref": "#/components/schemas/LoginDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1415,11 +1809,17 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/RefreshTokenDto" }
+ "schema": {
+ "$ref": "#/components/schemas/RefreshTokenDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1427,7 +1827,11 @@
"post": {
"operationId": "AuthController_logout",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1435,7 +1839,11 @@
"get": {
"operationId": "AuthController_getProfile",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1447,11 +1855,17 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/VerifySignatureDto" }
+ "schema": {
+ "$ref": "#/components/schemas/VerifySignatureDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Auth"]
}
},
@@ -1459,7 +1873,11 @@
"get": {
"operationId": "OAuthController_googleAuth",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1467,7 +1885,11 @@
"get": {
"operationId": "OAuthController_googleAuthCallback",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1475,7 +1897,11 @@
"get": {
"operationId": "OAuthController_githubAuth",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1483,7 +1909,11 @@
"get": {
"operationId": "OAuthController_githubAuthCallback",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1491,7 +1921,11 @@
"get": {
"operationId": "OAuthController_twitterAuth",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1499,7 +1933,11 @@
"get": {
"operationId": "OAuthController_twitterAuthCallback",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["OAuth"]
}
},
@@ -1511,16 +1949,24 @@
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
},
"delete": {
@@ -1530,16 +1976,24 @@
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
}
},
@@ -1551,16 +2005,24 @@
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityType",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
}
},
@@ -1572,16 +2034,24 @@
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
}
},
@@ -1593,10 +2063,16 @@
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
}
},
@@ -1608,16 +2084,24 @@
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Follows"]
}
},
@@ -1629,29 +2113,45 @@
"name": "roomId",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "roomType",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "cursor",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Returns list of messages."
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Returns list of messages." } },
- "security": [{ "bearer": [] }],
"summary": "Get chat message history",
"tags": ["Chat"]
}
@@ -1664,19 +2164,29 @@
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Paginated list of conversations" }
+ "200": {
+ "description": "Paginated list of conversations"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List my conversations",
"tags": ["Messages"]
},
@@ -1687,14 +2197,22 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateConversationDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateConversationDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Conversation (created or existing)" }
+ "200": {
+ "description": "Conversation (created or existing)"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Start or get existing conversation",
"tags": ["Messages"]
}
@@ -1708,11 +2226,21 @@
"required": true,
"in": "path",
"description": "Conversation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Conversation details"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Conversation details" } },
- "security": [{ "bearer": [] }],
"summary": "Get one conversation (thread header)",
"tags": ["Messages"]
}
@@ -1726,24 +2254,38 @@
"required": true,
"in": "path",
"description": "Conversation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "before",
"required": false,
"in": "query",
"description": "Cursor for older messages",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Paginated messages"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Paginated messages" } },
- "security": [{ "bearer": [] }],
"summary": "List messages in a conversation",
"tags": ["Messages"]
},
@@ -1755,19 +2297,31 @@
"required": true,
"in": "path",
"description": "Conversation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateMessageDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateMessageDto"
+ }
}
}
},
- "responses": { "201": { "description": "Message created" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "201": {
+ "description": "Message created"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Send a message",
"tags": ["Messages"]
}
@@ -1781,11 +2335,21 @@
"required": true,
"in": "path",
"description": "Conversation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Marked as read"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Marked as read" } },
- "security": [{ "bearer": [] }],
"summary": "Mark conversation as read",
"tags": ["Messages"]
}
@@ -1799,19 +2363,58 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateCampaignDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateCampaignDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Campaign data is valid" },
- "400": { "description": "Invalid campaign data" }
+ "200": {
+ "description": "Campaign data is valid"
+ },
+ "400": {
+ "description": "Invalid campaign data"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Validate campaign data",
"tags": ["crowdfunding"]
}
},
+ "/api/crowdfunding/draft": {
+ "post": {
+ "description": "Create a minimal DRAFT campaign (title only) for the creation wizard. Returns its id and slug so the wizard can save each step via PUT and submit for review at the end.",
+ "operationId": "CampaignsController_createDraft",
+ "parameters": [],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateDraftDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Draft campaign created"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Create a draft campaign",
+ "tags": ["crowdfunding"]
+ }
+ },
"/api/crowdfunding": {
"post": {
"description": "Create a new crowdfunding campaign. This will also create the associated project automatically.",
@@ -1821,15 +2424,25 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateCampaignDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateCampaignDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Campaign and project created successfully" },
- "400": { "description": "Invalid campaign data" }
+ "201": {
+ "description": "Campaign and project created successfully"
+ },
+ "400": {
+ "description": "Invalid campaign data"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a crowdfunding campaign",
"tags": ["crowdfunding"]
},
@@ -1842,7 +2455,10 @@
"required": false,
"in": "query",
"description": "Category of the campaign",
- "schema": { "example": "web3", "type": "string" }
+ "schema": {
+ "example": "web3",
+ "type": "string"
+ }
},
{
"name": "status",
@@ -1858,53 +2474,75 @@
"name": "minFundingGoal",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "maxFundingGoal",
"required": false,
"in": "query",
"description": "Minimum funding goal of the campaign",
- "schema": { "example": 1000, "type": "number" }
+ "schema": {
+ "example": 1000,
+ "type": "number"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Maximum funding goal of the campaign",
- "schema": { "example": 10000, "type": "number" }
+ "schema": {
+ "example": 10000,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Limit of the campaign",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "sortBy",
"required": true,
"in": "query",
"description": "Sort by of the campaign",
- "schema": { "example": "createdAt", "type": "string" }
+ "schema": {
+ "example": "createdAt",
+ "type": "string"
+ }
},
{
"name": "sortOrder",
"required": true,
"in": "query",
"description": "Sort order of the campaign",
- "schema": { "example": "desc", "type": "string" }
+ "schema": {
+ "example": "desc",
+ "type": "string"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search of the campaign",
- "schema": { "example": "web3", "type": "string" }
+ "schema": {
+ "example": "web3",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaigns retrieved successfully" }
+ "200": {
+ "description": "Campaigns retrieved successfully"
+ }
},
"summary": "List crowdfunding campaigns",
"tags": ["crowdfunding"]
@@ -1916,7 +2554,9 @@
"operationId": "CampaignsController_triggerCron",
"parameters": [],
"responses": {
- "200": { "description": "Cron job triggered successfully" }
+ "200": {
+ "description": "Cron job triggered successfully"
+ }
},
"summary": "Trigger campaign transition cron",
"tags": ["crowdfunding"]
@@ -1932,68 +2572,100 @@
"required": true,
"in": "query",
"description": "Category of the campaign",
- "schema": { "example": "web3", "type": "string" }
+ "schema": {
+ "example": "web3",
+ "type": "string"
+ }
},
{
"name": "status",
"required": true,
"in": "query",
"description": "Status of the campaign",
- "schema": { "example": "active", "type": "string" }
+ "schema": {
+ "example": "active",
+ "type": "string"
+ }
},
{
"name": "minFundingGoal",
"required": true,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "maxFundingGoal",
"required": true,
"in": "query",
"description": "Minimum funding goal of the campaign",
- "schema": { "example": 1000, "type": "number" }
+ "schema": {
+ "example": 1000,
+ "type": "number"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Maximum funding goal of the campaign",
- "schema": { "example": 10000, "type": "number" }
+ "schema": {
+ "example": 10000,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Limit of the campaign",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "sortBy",
"required": false,
"in": "query",
"description": "Sort by of the campaign",
- "schema": { "example": "createdAt", "type": "string" }
+ "schema": {
+ "example": "createdAt",
+ "type": "string"
+ }
},
{
"name": "sortOrder",
"required": false,
"in": "query",
"description": "Sort order of the campaign",
- "schema": { "example": "desc", "type": "string" }
+ "schema": {
+ "example": "desc",
+ "type": "string"
+ }
},
{
"name": "search",
"required": true,
"in": "query",
"description": "Search of the campaign",
- "schema": { "example": "web3", "type": "string" }
+ "schema": {
+ "example": "web3",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User campaigns retrieved successfully" }
+ "200": {
+ "description": "User campaigns retrieved successfully"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List authenticated user's campaigns",
"tags": ["crowdfunding"]
}
@@ -2008,12 +2680,18 @@
"required": true,
"in": "path",
"description": "Campaign URL slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign details retrieved successfully" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Campaign details retrieved successfully"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
"summary": "Get campaign by slug",
"tags": ["crowdfunding"]
@@ -2029,12 +2707,18 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign details retrieved successfully" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Campaign details retrieved successfully"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
"summary": "Get campaign details",
"tags": ["crowdfunding"]
@@ -2048,22 +2732,34 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateCampaignDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateCampaignDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Campaign updated successfully" },
- "403": { "description": "User does not own the campaign" }
+ "200": {
+ "description": "Campaign updated successfully"
+ },
+ "403": {
+ "description": "User does not own the campaign"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update campaign",
"tags": ["crowdfunding"]
},
@@ -2076,16 +2772,24 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign deleted successfully" },
+ "200": {
+ "description": "Campaign deleted successfully"
+ },
"403": {
"description": "Cannot delete campaign with contributions, campaigns in funding phase, funded campaigns, completed campaigns, or user does not own the campaign"
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete campaign",
"tags": ["crowdfunding"]
}
@@ -2100,68 +2804,53 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign statistics retrieved successfully" }
+ "200": {
+ "description": "Campaign statistics retrieved successfully"
+ }
},
"summary": "Get campaign statistics",
"tags": ["crowdfunding"]
}
},
- "/api/crowdfunding/{id}/escrow": {
- "put": {
- "description": "Update escrow details including transaction hash, address, and status. Only campaign owners can update escrow details.",
- "operationId": "CampaignsController_updateEscrowDetails",
+ "/api/crowdfunding/{id}/invitations": {
+ "post": {
+ "operationId": "CampaignsController_inviteTeamMember",
"parameters": [
{
"name": "id",
"required": true,
"in": "path",
- "description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateEscrowDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InviteTeamMemberDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Escrow details updated successfully" },
- "403": { "description": "User does not own the campaign" },
- "404": { "description": "Campaign not found" }
+ "201": {
+ "description": ""
+ }
},
- "security": [{ "bearer": [] }],
- "summary": "Update escrow details",
- "tags": ["crowdfunding"]
- }
- },
- "/api/crowdfunding/{id}/invitations": {
- "post": {
- "operationId": "CampaignsController_inviteTeamMember",
- "parameters": [
+ "security": [
{
- "name": "id",
- "required": true,
- "in": "path",
- "schema": { "type": "string" }
+ "bearer": []
}
],
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": { "$ref": "#/components/schemas/InviteTeamMemberDto" }
- }
- }
- },
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Invite a team member to the campaign",
"tags": ["crowdfunding"]
},
@@ -2172,11 +2861,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Get all invitations for a campaign",
"tags": ["crowdfunding"]
}
@@ -2189,42 +2888,22 @@
"name": "token",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Accept a campaign team invitation",
- "tags": ["crowdfunding"]
- }
- },
- "/api/crowdfunding/{id}/contribute": {
- "post": {
- "description": "Make a contribution to a crowdfunding campaign",
- "operationId": "ContributionsController_contributeToCampaign",
- "parameters": [
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
{
- "name": "id",
- "required": true,
- "in": "path",
- "description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "bearer": []
}
],
- "requestBody": {
- "required": true,
- "content": {
- "application/json": {
- "schema": { "$ref": "#/components/schemas/ContributeCampaignDto" }
- }
- }
- },
- "responses": {
- "200": { "description": "Contribution added successfully" },
- "403": { "description": "Campaign has ended or is fully funded" }
- },
- "security": [{ "bearer": [] }],
- "summary": "Contribute to campaign",
+ "summary": "Accept a campaign team invitation",
"tags": ["crowdfunding"]
}
},
@@ -2238,23 +2917,31 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Contributions retrieved successfully" }
+ "200": {
+ "description": "Contributions retrieved successfully"
+ }
},
"summary": "Get campaign contributions",
"tags": ["crowdfunding"]
@@ -2270,7 +2957,9 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -2292,11 +2981,15 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Milestones retrieved successfully" }
+ "200": {
+ "description": "Milestones retrieved successfully"
+ }
},
"summary": "Get campaign milestones",
"tags": ["crowdfunding"]
@@ -2312,19 +3005,27 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "milestoneId",
"required": true,
"in": "path",
"description": "Milestone ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Milestone details retrieved successfully" },
- "404": { "description": "Milestone not found" }
+ "200": {
+ "description": "Milestone details retrieved successfully"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
"summary": "Get milestone details",
"tags": ["crowdfunding"]
@@ -2338,32 +3039,46 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "milestoneId",
"required": true,
"in": "path",
"description": "Milestone ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateMilestoneDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateMilestoneDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Milestone submitted successfully" },
+ "200": {
+ "description": "Milestone submitted successfully"
+ },
"400": {
"description": "Validation failed - invalid proof of work data"
},
- "403": { "description": "User does not own the campaign" }
+ "403": {
+ "description": "User does not own the campaign"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit milestone for review",
"tags": ["crowdfunding"]
}
@@ -2378,14 +3093,18 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "milestoneId",
"required": true,
"in": "path",
"description": "Milestone ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2406,18 +3125,26 @@
"schema": {
"type": "object",
"properties": {
- "validated": { "type": "boolean", "example": true },
+ "validated": {
+ "type": "boolean",
+ "example": true
+ },
"data": {
"type": "object",
"properties": {
- "status": { "type": "string", "example": "submitted" },
+ "status": {
+ "type": "string",
+ "example": "submitted"
+ },
"evidence": {
"type": "string",
"example": "Milestone completed - all deliverables ready for review."
},
"documents": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["https://example.com/report.pdf"]
}
}
@@ -2434,7 +3161,10 @@
"schema": {
"type": "object",
"properties": {
- "validated": { "type": "boolean", "example": false },
+ "validated": {
+ "type": "boolean",
+ "example": false
+ },
"error": {
"type": "string",
"example": "Evidence must be at least 10 characters of meaningful content"
@@ -2459,7 +3189,9 @@
"required": true,
"in": "path",
"description": "Campaign ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -2479,11 +3211,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Submit a DRAFT campaign to admin review",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2496,11 +3238,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Withdraw a pending review back to DRAFT (D4)",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2513,11 +3265,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Resubmit a REVIEW_REJECTED campaign (D5: unlimited retries)",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2530,7 +3292,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2543,8 +3307,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish a VOTE_PASSED campaign to the events contract",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2557,7 +3329,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2570,8 +3344,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel a campaign and refund backers",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2584,7 +3366,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2597,8 +3381,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Claim a milestone payout (reviewStatus must be APPROVED)",
"tags": ["Crowdfunding v2 - Builder"]
}
@@ -2611,7 +3403,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2624,12 +3418,100 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Build (and optionally submit) an add_funds op against the campaign",
"tags": ["Crowdfunding v2 - Backer"]
}
},
+ "/api/crowdfunding/campaigns/{id}/v2/escrow/ops/{opRowId}/submit-signed": {
+ "post": {
+ "operationId": "BackerCrowdfundingV2Controller_submitSigned",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "opRowId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CrowdfundingSubmitSignedXdrDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Submit a wallet-signed contribution XDR (EXTERNAL path)",
+ "tags": ["Crowdfunding v2 - Backer"]
+ }
+ },
+ "/api/crowdfunding/campaigns/{id}/v2/escrow/ops/{opRowId}": {
+ "get": {
+ "operationId": "BackerCrowdfundingV2Controller_getOp",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "opRowId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Poll the state of a contribution escrow op",
+ "tags": ["Crowdfunding v2 - Backer"]
+ }
+ },
"/api/crowdfunding/campaigns/{id}/v2/vote": {
"post": {
"operationId": "CommunityCrowdfundingV2Controller_castVote",
@@ -2638,7 +3520,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2651,8 +3535,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cast or change vote on a VOTING campaign",
"tags": ["Crowdfunding v2 - Community"]
},
@@ -2663,11 +3555,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Read the campaign vote tally",
"tags": ["Crowdfunding v2 - Community"]
}
@@ -2680,11 +3582,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Read the caller's current vote (or null)",
"tags": ["Crowdfunding v2 - Community"]
}
@@ -2697,7 +3609,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2710,8 +3624,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Approve a submitted campaign; assigns reviewer",
"tags": ["Crowdfunding v2 - Admin"]
}
@@ -2724,7 +3646,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2737,12 +3661,57 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Reject a submitted campaign with optional reason",
"tags": ["Crowdfunding v2 - Admin"]
}
},
+ "/api/crowdfunding/campaigns/{id}/v2/admin/extend-funding": {
+ "post": {
+ "operationId": "AdminCrowdfundingV2Controller_extendFunding",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExtendCrowdfundingFundingDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Extend a live campaign funding deadline",
+ "tags": ["Crowdfunding v2 - Admin"]
+ }
+ },
"/api/crowdfunding/campaigns/{id}/v2/admin/pause": {
"post": {
"operationId": "AdminCrowdfundingV2Controller_pause",
@@ -2751,7 +3720,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -2764,8 +3735,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Pause a live campaign (D7)",
"tags": ["Crowdfunding v2 - Admin"]
}
@@ -2778,21 +3757,129 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Unpause a campaign and restore previous status",
"tags": ["Crowdfunding v2 - Admin"]
}
},
+ "/api/crowdfunding/campaigns/{id}/v2/admin/milestones/{milestoneId}/approve": {
+ "post": {
+ "operationId": "AdminCrowdfundingV2Controller_approveMilestone",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "milestoneId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApproveCrowdfundingMilestoneDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Approve a submitted milestone",
+ "tags": ["Crowdfunding v2 - Admin"]
+ }
+ },
+ "/api/crowdfunding/campaigns/{id}/v2/admin/milestones/{milestoneId}/reject": {
+ "post": {
+ "operationId": "AdminCrowdfundingV2Controller_rejectMilestone",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "milestoneId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RejectCrowdfundingMilestoneDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Reject a submitted milestone with feedback",
+ "tags": ["Crowdfunding v2 - Admin"]
+ }
+ },
"/api/wallet": {
"get": {
"operationId": "WalletController_getWallet",
"parameters": [],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get current user wallet",
"tags": ["wallet"]
}
@@ -2801,8 +3888,16 @@
"get": {
"operationId": "WalletController_getWalletDetails",
"parameters": [],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get wallet details including balances and transactions",
"tags": ["wallet"]
}
@@ -2816,11 +3911,21 @@
"name": "address",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Get USDC + XLM balance for any Stellar address",
"tags": ["wallet"]
}
@@ -2829,18 +3934,34 @@
"post": {
"operationId": "WalletController_syncWallet",
"parameters": [],
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Sync wallet with blockchain",
- "tags": ["wallet"]
- }
- },
- "/api/wallet/create": {
- "post": {
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Sync wallet with blockchain",
+ "tags": ["wallet"]
+ }
+ },
+ "/api/wallet/create": {
+ "post": {
"operationId": "WalletController_createWallet",
"parameters": [],
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a new wallet for the current user",
"tags": ["wallet"]
}
@@ -2861,7 +3982,11 @@
"description": "Sponsor account is out of available XLM. Operators have been alerted; retry later."
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Activate wallet on Stellar with sponsored reserves",
"tags": ["wallet"]
}
@@ -2875,7 +4000,9 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ReclaimDormantDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ReclaimDormantDto"
+ }
}
}
},
@@ -2883,9 +4010,15 @@
"201": {
"description": "Reclaim summary: scanned, eligible, revoked, freedXlm, walletIds, errors"
},
- "403": { "description": "Admin role required." }
+ "403": {
+ "description": "Admin role required."
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Admin: reclaim sponsor XLM from dormant zero-balance wallets",
"tags": ["wallet"]
}
@@ -2895,9 +4028,15 @@
"operationId": "WalletController_getSupportedTrustlines",
"parameters": [],
"responses": {
- "200": { "description": "List of supported trustline assets" }
+ "200": {
+ "description": "List of supported trustline assets"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List assets that can have a trustline added (e.g. USDC, EURC)",
"tags": ["wallet"]
}
@@ -2910,17 +4049,25 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AddTrustlineDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AddTrustlineDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Trustline added or already exists" },
+ "201": {
+ "description": "Trustline added or already exists"
+ },
"400": {
"description": "Wallet not activated, insufficient XLM for fees, or unsupported asset"
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Add a trustline for a supported asset (e.g. USDC)",
"tags": ["wallet"]
}
@@ -2935,14 +4082,18 @@
"required": true,
"in": "query",
"description": "Stellar public key (G...)",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "currency",
"required": true,
"in": "query",
"description": "Asset code (e.g. USDC, XLM)",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -2953,22 +4104,37 @@
"schema": {
"type": "object",
"properties": {
- "valid": { "type": "boolean" },
- "isValidPublicKey": { "type": "boolean" },
- "isActivated": { "type": "boolean" },
- "hasTrustlineForAsset": { "type": "boolean" },
+ "valid": {
+ "type": "boolean"
+ },
+ "isValidPublicKey": {
+ "type": "boolean"
+ },
+ "isActivated": {
+ "type": "boolean"
+ },
+ "hasTrustlineForAsset": {
+ "type": "boolean"
+ },
"memoRequired": {
"type": "boolean",
"description": "True if this destination requires a memo (e.g. exchange shared address)"
},
- "message": { "type": "string", "nullable": true }
+ "message": {
+ "type": "string",
+ "nullable": true
+ }
}
}
}
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Validate destination address before sending",
"tags": ["wallet"]
}
@@ -2982,12 +4148,16 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UserSendDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UserSendDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Send submitted successfully" },
+ "201": {
+ "description": "Send submitted successfully"
+ },
"400": {
"description": "Validation or business rule error (e.g. destination not activated, no trustline, memo required, insufficient balance)"
},
@@ -2995,7 +4165,11 @@
"description": "Identity verification required. Complete KYC to send funds."
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Send funds from your wallet to a Stellar address",
"tags": ["wallet"]
}
@@ -3009,18 +4183,28 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SendPayoutDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SendPayoutDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Payout submitted successfully" },
+ "201": {
+ "description": "Payout submitted successfully"
+ },
"400": {
"description": "Validation or business rule error (e.g. destination not activated, no trustline, memo required)"
},
- "403": { "description": "Forbidden – admin only" }
+ "403": {
+ "description": "Forbidden – admin only"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Send payout from platform (Admin only)",
"tags": ["wallet"]
}
@@ -3033,16 +4217,28 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateCommentDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateCommentDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Comment created successfully" },
- "400": { "description": "Invalid input" },
- "429": { "description": "Rate limit exceeded" }
+ "201": {
+ "description": "Comment created successfully"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "429": {
+ "description": "Rate limit exceeded"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a comment",
"tags": ["comments"]
},
@@ -3073,21 +4269,27 @@
"required": false,
"in": "query",
"description": "Entity ID to filter comments",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "authorId",
"required": false,
"in": "query",
"description": "Author ID to filter comments",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "parentId",
"required": false,
"in": "query",
"description": "Parent comment ID to filter replies",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -3104,21 +4306,31 @@
"required": false,
"in": "query",
"description": "Include reaction data in response",
- "schema": { "default": true, "type": "boolean" }
+ "schema": {
+ "default": true,
+ "type": "boolean"
+ }
},
{
"name": "includeReports",
"required": false,
"in": "query",
"description": "Include report data in response (moderators only)",
- "schema": { "default": false, "type": "boolean" }
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "minimum": 1, "default": 1, "type": "number" }
+ "schema": {
+ "minimum": 1,
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
@@ -3137,7 +4349,10 @@
"required": false,
"in": "query",
"description": "Field to sort by",
- "schema": { "default": "createdAt", "type": "string" }
+ "schema": {
+ "default": "createdAt",
+ "type": "string"
+ }
},
{
"name": "sortOrder",
@@ -3152,7 +4367,9 @@
}
],
"responses": {
- "200": { "description": "Comments retrieved successfully" }
+ "200": {
+ "description": "Comments retrieved successfully"
+ }
},
"summary": "List comments with filters",
"tags": ["comments"]
@@ -3167,12 +4384,18 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comment retrieved successfully" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment retrieved successfully"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
"summary": "Get comment by ID",
"tags": ["comments"]
@@ -3185,23 +4408,37 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateCommentDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateCommentDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Comment updated successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment updated successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update comment (author only)",
"tags": ["comments"]
},
@@ -3213,15 +4450,27 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "204": { "description": "Comment deleted successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "204": {
+ "description": "Comment deleted successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete comment (author or moderator only)",
"tags": ["comments"]
}
@@ -3235,24 +4484,32 @@
"required": true,
"in": "path",
"description": "Entity type",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityId",
"required": true,
"in": "path",
"description": "Entity ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "includeNested",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comments retrieved successfully" }
+ "200": {
+ "description": "Comments retrieved successfully"
+ }
},
"summary": "Get comments for an entity",
"tags": ["comments"]
@@ -3267,22 +4524,34 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AddReactionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AddReactionDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Reaction added successfully" },
- "429": { "description": "Rate limit exceeded" }
+ "201": {
+ "description": "Reaction added successfully"
+ },
+ "429": {
+ "description": "Rate limit exceeded"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Add reaction to comment",
"tags": ["comments"]
},
@@ -3294,11 +4563,15 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Reactions retrieved successfully" }
+ "200": {
+ "description": "Reactions retrieved successfully"
+ }
},
"summary": "Get reactions for comment",
"tags": ["comments"]
@@ -3313,20 +4586,30 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "reactionType",
"required": true,
"in": "path",
"description": "Reaction type",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "204": { "description": "Reaction removed successfully" }
+ "204": {
+ "description": "Reaction removed successfully"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Remove reaction from comment",
"tags": ["comments"]
}
@@ -3340,22 +4623,34 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ReportCommentDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ReportCommentDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Comment reported successfully" },
- "429": { "description": "Rate limit exceeded" }
+ "201": {
+ "description": "Comment reported successfully"
+ },
+ "429": {
+ "description": "Rate limit exceeded"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Report a comment",
"tags": ["comments"]
}
@@ -3368,20 +4663,32 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Moderation queue retrieved successfully" },
- "403": { "description": "Forbidden" }
+ "200": {
+ "description": "Moderation queue retrieved successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get moderation queue (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3403,20 +4710,32 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Reports retrieved successfully" },
- "403": { "description": "Forbidden" }
+ "200": {
+ "description": "Reports retrieved successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get all reports (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3430,23 +4749,37 @@
"required": true,
"in": "path",
"description": "Report ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ResolveReportDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ResolveReportDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Report resolved successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Report not found" }
+ "200": {
+ "description": "Report resolved successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Report not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Resolve a report (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3460,15 +4793,27 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comment approved successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment approved successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Approve a comment (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3482,15 +4827,27 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comment rejected successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment rejected successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Reject/Hide a comment (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3504,15 +4861,27 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comment hidden successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment hidden successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Hide a comment (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3526,15 +4895,27 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Comment restored successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Comment not found" }
+ "200": {
+ "description": "Comment restored successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Comment not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Restore a hidden comment (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3544,10 +4925,18 @@
"operationId": "CommentModerationController_getModerationStats",
"parameters": [],
"responses": {
- "200": { "description": "Moderation stats retrieved successfully" },
- "403": { "description": "Forbidden" }
+ "200": {
+ "description": "Moderation stats retrieved successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get moderation statistics (moderators only)",
"tags": ["comment-moderation"]
}
@@ -3582,7 +4971,9 @@
"name": "totalPool",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -3614,7 +5005,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -3628,10 +5022,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon winners",
"tags": ["Hackathons"]
}
@@ -3646,7 +5048,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -3660,8 +5065,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get public judging results",
"tags": ["Hackathons"]
@@ -3677,7 +5086,18 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "accessToken",
+ "required": true,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -3691,13 +5111,57 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon by ID or slug",
"tags": ["Hackathons"]
}
},
+ "/api/hackathons/{idOrSlug}/access/verify": {
+ "post": {
+ "description": "Checks the access password for a private hackathon and returns a short-lived token that unlocks the public page.",
+ "operationId": "HackathonsController_verifyHackathonAccess",
+ "parameters": [
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyHackathonAccessDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HackathonAccessTokenResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "summary": "Verify a private hackathon access password",
+ "tags": ["Hackathons"]
+ }
+ },
"/api/hackathons/{slug}/contributors": {
"get": {
"description": "Returns confirmed partner contributions where the partner opted in to be shown publicly, plus the total amount contributed.",
@@ -3707,11 +5171,15 @@
"name": "slug",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Contributors retrieved successfully" }
+ "200": {
+ "description": "Contributors retrieved successfully"
+ }
},
"summary": "List public partner contributors for a hackathon",
"tags": ["Hackathons"]
@@ -3727,7 +5195,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -3738,14 +5209,21 @@
"schema": {
"type": "object",
"properties": {
- "following": { "type": "boolean", "example": true }
+ "following": {
+ "type": "boolean",
+ "example": true
+ }
}
}
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Follow or unfollow a hackathon",
"tags": ["Hackathons"]
@@ -3761,14 +5239,19 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/JoinHackathonDto" }
+ "schema": {
+ "$ref": "#/components/schemas/JoinHackathonDto"
+ }
}
}
},
@@ -3786,7 +5269,9 @@
"400": {
"description": "Registration closed or already participating"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Join a hackathon",
"tags": ["Hackathons"]
@@ -3802,7 +5287,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -3819,7 +5307,9 @@
"400": {
"description": "Not a participant or submission deadline passed"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Leave a hackathon",
"tags": ["Hackathons"]
@@ -3835,45 +5325,61 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "status",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "skill",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "type",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "search",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -3887,8 +5393,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon participants",
"tags": ["Hackathons"]
@@ -3904,7 +5414,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "status",
@@ -3921,26 +5434,36 @@
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "search",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "type",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -3957,8 +5480,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon submissions",
"tags": ["Hackathons - Submissions"]
@@ -3972,14 +5499,19 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateSubmissionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateSubmissionDto"
+ }
}
}
},
@@ -3994,8 +5526,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Create a hackathon submission",
"tags": ["Hackathons - Submissions"]
@@ -4011,33 +5547,46 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "search",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "type",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -4054,7 +5603,9 @@
}
}
},
- "404": { "description": "Hackathon not found" }
+ "404": {
+ "description": "Hackathon not found"
+ }
},
"summary": "Explore hackathon submissions",
"tags": ["Hackathons - Submissions"]
@@ -4070,7 +5621,10 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -4084,8 +5638,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get my submission for a hackathon",
"tags": ["Hackathons - Submissions"]
@@ -4101,14 +5659,19 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateSubmissionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateSubmissionDto"
+ }
}
}
},
@@ -4123,8 +5686,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Update a hackathon submission",
"tags": ["Hackathons - Submissions"]
@@ -4138,7 +5705,10 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -4158,8 +5728,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Withdraw a hackathon submission",
"tags": ["Hackathons - Submissions"]
@@ -4173,7 +5747,10 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -4187,8 +5764,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get a submission by ID",
"tags": ["Hackathons - Submissions"]
@@ -4203,48 +5784,70 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "sortBy",
"required": false,
"in": "query",
"description": "Sort by field",
- "schema": { "enum": ["createdAt", "updatedAt"], "type": "string" }
+ "schema": {
+ "enum": ["createdAt", "updatedAt"],
+ "type": "string"
+ }
},
{
"name": "sortOrder",
"required": false,
"in": "query",
"description": "Sort order",
- "schema": { "enum": ["asc", "desc"], "type": "string" }
+ "schema": {
+ "enum": ["asc", "desc"],
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
- "200": { "description": "Discussions retrieved successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Discussions retrieved successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon discussions",
"tags": ["Hackathons - Discussions"]
@@ -4257,14 +5860,18 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -4291,9 +5898,15 @@
}
},
"responses": {
- "201": { "description": "Comment posted successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "201": {
+ "description": "Comment posted successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Post a comment in hackathon discussion",
"tags": ["Hackathons - Discussions"]
@@ -4309,7 +5922,10 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "example": "comment_1234567890", "type": "string" }
+ "schema": {
+ "example": "comment_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -4331,9 +5947,15 @@
}
},
"responses": {
- "200": { "description": "Comment updated successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Comment updated successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Update a discussion comment",
"tags": ["Hackathons - Discussions"]
@@ -4347,7 +5969,10 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "example": "comment_1234567890", "type": "string" }
+ "schema": {
+ "example": "comment_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -4367,8 +5992,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Delete a discussion comment",
"tags": ["Hackathons - Discussions"]
@@ -4384,7 +6013,10 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "example": "comment_1234567890", "type": "string" }
+ "schema": {
+ "example": "comment_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -4407,9 +6039,15 @@
}
},
"responses": {
- "200": { "description": "Reaction updated" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Reaction updated"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "React to a comment",
"tags": ["Hackathons - Discussions"]
@@ -4425,27 +6063,42 @@
"required": true,
"in": "path",
"description": "Comment ID",
- "schema": { "example": "comment_1234567890", "type": "string" }
+ "schema": {
+ "example": "comment_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 10, "type": "number" }
+ "schema": {
+ "example": 10,
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Replies retrieved successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Replies retrieved successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get comment replies",
"tags": ["Hackathons - Discussions"]
@@ -4460,28 +6113,40 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search query",
- "schema": { "example": "DeFi", "type": "string" }
+ "schema": {
+ "example": "DeFi",
+ "type": "string"
+ }
},
{
"name": "openOnly",
"required": false,
"in": "query",
"description": "Filter by open teams only",
- "schema": { "example": true, "type": "boolean" }
+ "schema": {
+ "example": true,
+ "type": "boolean"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "minimum": 1, "example": 1, "type": "number" }
+ "schema": {
+ "minimum": 1,
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
@@ -4500,7 +6165,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -4508,12 +6175,18 @@
"description": "Teams retrieved successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TeamListResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TeamListResponseDto"
+ }
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon teams",
"tags": ["Hackathons - Teams"]
@@ -4526,21 +6199,27 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateTeamDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateTeamDto"
+ }
}
}
},
@@ -4549,14 +6228,18 @@
"description": "Team created successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TeamResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TeamResponseDto"
+ }
}
}
},
"400": {
"description": "Not a participant, already in a team, or hackathon does not allow teams"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Create a team",
"tags": ["Hackathons - Teams"]
@@ -4571,21 +6254,28 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -4593,12 +6283,18 @@
"description": "Team found",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TeamResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TeamResponseDto"
+ }
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get team details",
"tags": ["Hackathons - Teams"]
@@ -4611,35 +6307,50 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateTeamDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateTeamDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Team updated" },
- "400": { "description": "Not team leader or invalid update" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Team updated"
+ },
+ "400": {
+ "description": "Not team leader or invalid update"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Update team",
"tags": ["Hackathons - Teams"]
@@ -4652,30 +6363,43 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
- "200": { "description": "Team disbanded" },
+ "200": {
+ "description": "Team disbanded"
+ },
"400": {
"description": "Team has an existing submission and cannot be disbanded"
},
- "403": { "description": "Only the team leader can disband the team" },
- "404": { "description": "Resource not found" }
+ "403": {
+ "description": "Only the team leader can disband the team"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Disband a team (leader only)",
"tags": ["Hackathons - Teams"]
@@ -4690,21 +6414,28 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -4725,11 +6456,15 @@
}
},
"responses": {
- "200": { "description": "Successfully joined team" },
+ "200": {
+ "description": "Successfully joined team"
+ },
"400": {
"description": "Team is closed, full, or user already in a team"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Join a team",
"tags": ["Hackathons - Teams"]
@@ -4744,36 +6479,51 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
- "200": { "description": "Member removed from team" },
+ "200": {
+ "description": "Member removed from team"
+ },
"400": {
"description": "Target user is not a member, or leader tried to remove themselves"
},
- "403": { "description": "Only the team leader can remove members" },
- "404": { "description": "Resource not found" }
+ "403": {
+ "description": "Only the team leader can remove members"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Remove a member from the team (leader only)",
"tags": ["Hackathons - Teams"]
@@ -4788,29 +6538,40 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
- "200": { "description": "Successfully left team" },
+ "200": {
+ "description": "Successfully left team"
+ },
"400": {
"description": "Not a member or leader cannot leave with members"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Leave a team",
"tags": ["Hackathons - Teams"]
@@ -4825,14 +6586,18 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -4840,12 +6605,18 @@
"description": "Team found or null if not in a team",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TeamResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TeamResponseDto"
+ }
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get my team",
"tags": ["Hackathons - Teams"]
@@ -4860,28 +6631,37 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/InviteToTeamDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InviteToTeamDto"
+ }
}
}
},
@@ -4899,7 +6679,9 @@
"400": {
"description": "User already in team, team full, or pending invitation exists"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Invite a user to join team",
"tags": ["Hackathons - Teams"]
@@ -4914,7 +6696,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -4931,7 +6715,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -4959,21 +6745,28 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "inviteId",
"required": true,
"in": "path",
"description": "Invitation ID",
- "schema": { "example": "inv_1234567890", "type": "string" }
+ "schema": {
+ "example": "inv_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -4990,7 +6783,9 @@
"400": {
"description": "Invitation expired, already processed, or team full"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Accept team invitation",
"tags": ["Hackathons - Teams"]
@@ -5005,21 +6800,28 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "inviteId",
"required": true,
"in": "path",
"description": "Invitation ID",
- "schema": { "example": "inv_1234567890", "type": "string" }
+ "schema": {
+ "example": "inv_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -5033,8 +6835,12 @@
}
}
},
- "400": { "description": "Invitation already processed" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invitation already processed"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Reject team invitation",
"tags": ["Hackathons - Teams"]
@@ -5049,29 +6855,40 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "inviteId",
"required": true,
"in": "path",
"description": "Invitation ID",
- "schema": { "example": "inv_1234567890", "type": "string" }
+ "schema": {
+ "example": "inv_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
- "200": { "description": "Successfully cancelled invitation" },
+ "200": {
+ "description": "Successfully cancelled invitation"
+ },
"400": {
"description": "Not team leader or invitation already processed"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Cancel team invitation",
"tags": ["Hackathons - Teams"]
@@ -5086,14 +6903,19 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "status",
@@ -5110,7 +6932,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -5124,8 +6948,12 @@
}
}
},
- "400": { "description": "Only team leader can view" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Only team leader can view"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get team invitations",
"tags": ["Hackathons - Teams"]
@@ -5140,35 +6968,50 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ToggleRoleHiredDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ToggleRoleHiredDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Role status toggled successfully" },
- "400": { "description": "Not team leader or invalid role" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Role status toggled successfully"
+ },
+ "400": {
+ "description": "Not team leader or invalid role"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Toggle role hired status",
"tags": ["Hackathons - Teams"]
@@ -5183,28 +7026,37 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "teamId",
"required": true,
"in": "path",
"description": "Team ID",
- "schema": { "example": "team_1234567890", "type": "string" }
+ "schema": {
+ "example": "team_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TransferLeadershipDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TransferLeadershipDto"
+ }
}
}
},
@@ -5225,7 +7077,9 @@
"403": {
"description": "Only current team leader can transfer leadership"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Transfer team leadership",
"tags": ["Hackathons - Teams"]
@@ -5241,22 +7095,38 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon draft ID to delete",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "204": { "description": "Draft deleted successfully" },
- "400": { "description": "Draft not found or user not authorized" },
- "404": { "description": "Resource not found" }
+ "204": {
+ "description": "Draft deleted successfully"
+ },
+ "400": {
+ "description": "Draft not found or user not authorized"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete hackathon draft",
"tags": ["Organization Hackathons - Drafts"]
},
@@ -5269,14 +7139,20 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon draft ID",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -5336,9 +7212,15 @@
"400": {
"description": "Validation failed for one or more sections"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update one or more sections of a hackathon draft",
"tags": ["Organization Hackathons - Drafts"]
},
@@ -5351,14 +7233,20 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon draft ID",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -5372,10 +7260,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon draft details",
"tags": ["Organization Hackathons - Drafts"]
}
@@ -5390,19 +7286,26 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": true,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": true,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "status",
@@ -5427,7 +7330,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get organization's published hackathons",
"tags": ["Organization Hackathons - Drafts"]
}
@@ -5442,7 +7349,10 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -5456,10 +7366,18 @@
}
}
},
- "400": { "description": "User is not a member of the organization" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "User is not a member of the organization"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a new hackathon draft for an organization",
"tags": ["Organization Hackathons - Drafts"]
}
@@ -5474,7 +7392,10 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -5492,7 +7413,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get organization's hackathon drafts",
"tags": ["Organization Hackathons - Drafts"]
}
@@ -5507,11 +7432,21 @@
"required": true,
"in": "path",
"description": "Hackathon (or draft) ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Audience size preview"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Audience size preview" } },
- "security": [{ "bearer": [] }],
"summary": "Preview the marketing announcement audience size",
"tags": ["Organization Hackathons - Drafts"]
}
@@ -5526,7 +7461,10 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -5550,10 +7488,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Generate a hackathon draft from a brief (Organizer Assist)",
"tags": ["Organization Hackathons - AI Assist"]
}
@@ -5568,14 +7514,19 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon draft ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -5599,10 +7550,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Regenerate one section of a draft (Organizer Assist)",
"tags": ["Organization Hackathons - AI Assist"]
}
@@ -5617,14 +7576,20 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -5649,7 +7614,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update hackathon submission visibility settings",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -5664,34 +7633,46 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ReviewSubmissionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ReviewSubmissionDto"
+ }
}
}
},
@@ -5707,7 +7688,9 @@
"type": "string",
"example": "Submission reviewed successfully"
},
- "submission": { "type": "object" }
+ "submission": {
+ "type": "object"
+ }
}
}
}
@@ -5716,9 +7699,15 @@
"400": {
"description": "Invalid status or submission does not belong to hackathon"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Review a submission",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -5733,46 +7722,64 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 12, "type": "number" }
+ "schema": {
+ "example": 12,
+ "type": "number"
+ }
},
{
"name": "search",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "type",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -5786,10 +7793,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon participants (organization)",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -5804,27 +7819,37 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -5861,12 +7886,18 @@
"type": "string",
"example": "Submission scored successfully (organizer override)"
},
- "judgingScore": { "type": "object" },
+ "judgingScore": {
+ "type": "object"
+ },
"complianceChecks": {
"type": "object",
"properties": {
- "rubricValid": { "type": "boolean" },
- "isOrganizerOverride": { "type": "boolean" }
+ "rubricValid": {
+ "type": "boolean"
+ },
+ "isOrganizerOverride": {
+ "type": "boolean"
+ }
}
}
}
@@ -5877,9 +7908,15 @@
"400": {
"description": "Invalid criteria scores or rubric validation failed"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Organizer: Override submission scoring",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -5894,27 +7931,37 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -5939,16 +7986,26 @@
"type": "string",
"example": "Submission disqualified successfully"
},
- "submission": { "type": "object" }
+ "submission": {
+ "type": "object"
+ }
}
}
}
}
},
- "400": { "description": "Submission does not belong to hackathon" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Submission does not belong to hackathon"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Disqualify a submission",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -5963,20 +8020,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -6001,16 +8065,28 @@
"type": "string",
"example": "Successfully updated 5 submission(s)"
},
- "count": { "type": "number", "example": 5 },
- "action": { "type": "string", "example": "SHORTLISTED" }
+ "count": {
+ "type": "number",
+ "example": 5
+ },
+ "action": {
+ "type": "string",
+ "example": "SHORTLISTED"
+ }
}
}
}
}
},
- "400": { "description": "Invalid action or missing required fields" }
+ "400": {
+ "description": "Invalid action or missing required fields"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Perform bulk action on submissions",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -6025,27 +8101,37 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "example": "sub_1234567890", "type": "string" }
+ "schema": {
+ "example": "sub_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -6055,7 +8141,11 @@
"schema": {
"type": "object",
"properties": {
- "rank": { "type": "number", "example": 1, "minimum": 1 }
+ "rank": {
+ "type": "number",
+ "example": 1,
+ "minimum": 1
+ }
},
"required": ["rank"]
}
@@ -6074,7 +8164,9 @@
"type": "string",
"example": "Submission rank updated successfully"
},
- "submission": { "type": "object" }
+ "submission": {
+ "type": "object"
+ }
}
}
}
@@ -6083,9 +8175,15 @@
"400": {
"description": "Invalid rank or submission does not belong to hackathon"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Set submission rank",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -6100,20 +8198,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -6127,11 +8232,21 @@
}
}
},
- "400": { "description": "Invalid request" },
- "403": { "description": "Forbidden - only organizers can access" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "403": {
+ "description": "Forbidden - only organizers can access"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon analytics",
"tags": ["Organization Hackathons - Submissions"]
}
@@ -6146,21 +8261,30 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-based)",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
}
],
"responses": {
@@ -6192,7 +8316,9 @@
"required": true,
"in": "path",
"description": "Announcement ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -6206,8 +8332,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get announcement details",
"tags": ["Hackathons - Announcements"]
@@ -6223,21 +8353,29 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateAnnouncementDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateAnnouncementDto"
+ }
}
}
},
@@ -6252,10 +8390,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a hackathon announcement",
"tags": ["Organization Hackathons - Announcements"]
}
@@ -6270,28 +8416,38 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "announcementId",
"required": true,
"in": "path",
"description": "Announcement ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateAnnouncementDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateAnnouncementDto"
+ }
}
}
},
@@ -6306,10 +8462,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update a hackathon announcement",
"tags": ["Organization Hackathons - Announcements"]
},
@@ -6322,29 +8486,47 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "announcementId",
"required": true,
"in": "path",
"description": "Announcement ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Announcement deleted successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Announcement deleted successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete a hackathon announcement",
"tags": ["Organization Hackathons - Announcements"]
}
@@ -6359,21 +8541,29 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "announcementId",
"required": true,
"in": "path",
"description": "Announcement ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -6387,10 +8577,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish a draft announcement",
"tags": ["Organization Hackathons - Announcements"]
}
@@ -6405,7 +8603,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or Slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -6415,13 +8615,19 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CriterionDto" }
+ "items": {
+ "$ref": "#/components/schemas/CriterionDto"
+ }
}
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "Get hackathon judging criteria",
"tags": ["Hackathons - Judging"]
@@ -6436,7 +8642,9 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ScoreSubmissionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ScoreSubmissionDto"
+ }
}
}
},
@@ -6448,21 +8656,35 @@
"schema": {
"type": "object",
"properties": {
- "message": { "type": "string" },
+ "message": {
+ "type": "string"
+ },
"judgingScore": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "totalScore": { "type": "number" },
- "criteriaScores": { "type": "array" }
+ "id": {
+ "type": "string"
+ },
+ "totalScore": {
+ "type": "number"
+ },
+ "criteriaScores": {
+ "type": "array"
+ }
}
},
"complianceChecks": {
"type": "object",
"properties": {
- "judgeAssigned": { "type": "boolean" },
- "noConflictOfInterest": { "type": "boolean" },
- "rubricValid": { "type": "boolean" }
+ "judgeAssigned": {
+ "type": "boolean"
+ },
+ "noConflictOfInterest": {
+ "type": "boolean"
+ },
+ "rubricValid": {
+ "type": "boolean"
+ }
}
}
}
@@ -6473,9 +8695,15 @@
"400": {
"description": "Judge not assigned, conflict of interest detected, or invalid scores"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Judge: Submit criterion-based scores",
"tags": ["Hackathons - Judging"]
}
@@ -6490,28 +8718,39 @@
"required": true,
"in": "path",
"description": "Hackathon ID or Slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-indexed)",
- "schema": { "default": 1, "type": "number" }
+ "schema": {
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of items per page",
- "schema": { "maximum": 100, "default": 10, "type": "number" }
+ "schema": {
+ "maximum": 100,
+ "default": 10,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search term for project name, description, participant name or username",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "sortBy",
@@ -6547,10 +8786,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get submissions for judging",
"tags": ["Hackathons - Judging"]
}
@@ -6565,21 +8812,29 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AddJudgeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AddJudgeDto"
+ }
}
}
},
@@ -6588,14 +8843,24 @@
"description": "Judge added successfully",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/JudgeResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/JudgeResponseDto"
+ }
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Add a judge to a hackathon",
"tags": ["Organization Hackathons - Judging"]
},
@@ -6608,14 +8873,20 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -6625,15 +8896,25 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/JudgeResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/JudgeResponseDto"
+ }
}
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon judges",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6648,29 +8929,47 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "path",
"description": "User ID of the judge",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Judge removed successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Judge removed successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Remove a judge from a hackathon",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6685,35 +8984,49 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-indexed)",
- "schema": { "default": 1, "type": "number" }
+ "schema": {
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of items per page",
- "schema": { "default": 50, "type": "number" }
+ "schema": {
+ "default": 50,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search term for project name, participant name or username",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "sortBy",
@@ -6742,7 +9055,10 @@
"required": false,
"in": "query",
"description": "If true, only returns submissions that have been assigned a rank",
- "schema": { "default": false, "type": "boolean" }
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ }
}
],
"responses": {
@@ -6756,10 +9072,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get aggregated judging results",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6774,21 +9098,29 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "ID of the submission",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -6805,10 +9137,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get individual judge scores for a submission",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6823,35 +9163,49 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (1-indexed)",
- "schema": { "default": 1, "type": "number" }
+ "schema": {
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of items per page",
- "schema": { "default": 50, "type": "number" }
+ "schema": {
+ "default": 50,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search term for project name, participant name or username",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "sortBy",
@@ -6880,7 +9234,10 @@
"required": false,
"in": "query",
"description": "If true, only returns submissions that have been assigned a rank",
- "schema": { "default": false, "type": "boolean" }
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ }
}
],
"responses": {
@@ -6897,10 +9254,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get winner ranking",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6915,21 +9280,35 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Full judges × submissions coverage matrix",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6944,21 +9323,35 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Preview the allocator outcome before publishing",
"tags": ["Organization Hackathons - Judging"]
}
@@ -6973,21 +9366,35 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Phase 4 gate: new allocator vs legacy parity (compute-only)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7002,21 +9409,35 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Preview judging completeness",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7031,26 +9452,249 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Results published successfully" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Results published successfully"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish results",
"tags": ["Organization Hackathons - Judging"]
}
},
+ "/api/organizations/{organizationId}/hackathons/{idOrSlug}/judging/winners/board": {
+ "get": {
+ "description": "One row per prize placement (overall and per-track), each with the score-ranked default pick, the current selection, the candidate list to choose from, and a conflict flag when a project already holds another placement. Drives the organizer \"review and pick winners\" step.",
+ "operationId": "OrganizationHackathonsJudgingController_winnersBoard",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "description": "Organization ID",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Get the winners board",
+ "tags": ["Organization Hackathons - Judging"]
+ }
+ },
+ "/api/organizations/{organizationId}/hackathons/{idOrSlug}/judging/winners/placements/{placementId}": {
+ "put": {
+ "description": "Pins a submission to a prize placement as an organizer override (saved as a draft until results are published). A project already holding another placement is allowed; the UI confirms the stacking inline.",
+ "operationId": "OrganizationHackathonsJudgingController_setPlacementWinner",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "description": "Organization ID",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "placementId",
+ "required": true,
+ "in": "path",
+ "description": "Prize placement id",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SetPlacementWinnerDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Pick the winner for a placement",
+ "tags": ["Organization Hackathons - Judging"]
+ },
+ "delete": {
+ "description": "Removes the organizer override draft for a placement, reverting it to the score-based default. Only valid before results are published.",
+ "operationId": "OrganizationHackathonsJudgingController_clearPlacementWinner",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "description": "Organization ID",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "placementId",
+ "required": true,
+ "in": "path",
+ "description": "Prize placement id",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Clear an organizer pick for a placement",
+ "tags": ["Organization Hackathons - Judging"]
+ }
+ },
+ "/api/organizations/{organizationId}/hackathons/{idOrSlug}/judging/winners/placements/{placementId}/withhold": {
+ "post": {
+ "description": "Deliberately leaves a prize placement vacant (\"no submission earned this prize\"). Clears any pick and marks it withheld so the allocator skips it. Distinct from clearing back to the score-based default. Only valid before results are published.",
+ "operationId": "OrganizationHackathonsJudgingController_withholdPlacement",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "description": "Organization ID",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "placementId",
+ "required": true,
+ "in": "path",
+ "description": "Prize placement id",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Leave a placement unawarded",
+ "tags": ["Organization Hackathons - Judging"]
+ }
+ },
"/api/organizations/{organizationId}/hackathons/{idOrSlug}/judging/invitations": {
"post": {
"description": "Sends an email-based invitation. The recipient is NOT added to the organization; on acceptance they become a hackathon-scoped judge only.",
@@ -7061,29 +9705,45 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/InviteJudgeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InviteJudgeDto"
+ }
}
}
},
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Invite a judge by email",
"tags": ["Organization Hackathons - Judging"]
},
@@ -7095,21 +9755,35 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List judge invitations for this hackathon",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7124,21 +9798,29 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/BulkInviteJudgesDto" }
+ "schema": {
+ "$ref": "#/components/schemas/BulkInviteJudgesDto"
+ }
}
}
},
@@ -7147,14 +9829,24 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/BulkInviteResultDto" }
+ "schema": {
+ "$ref": "#/components/schemas/BulkInviteResultDto"
+ }
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Bulk-invite judges (e.g. from a CSV import)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7168,28 +9860,44 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "invitationId",
"required": true,
"in": "path",
"description": "Invitation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel (revoke) a pending judge invitation",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7204,28 +9912,44 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "invitationId",
"required": true,
"in": "path",
"description": "Invitation ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Resend a pending judge invitation",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7239,14 +9963,19 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
@@ -7263,10 +9992,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List recommendation thresholds",
"tags": ["Organization Hackathons - Judging"]
},
@@ -7279,14 +10016,19 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"requestBody": {
@@ -7310,10 +10052,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Set a recommendation threshold (overall or per-track)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7327,28 +10077,43 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "thresholdId",
"required": true,
"in": "path",
"description": "Threshold ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete a recommendation threshold",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7363,14 +10128,19 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
@@ -7384,10 +10154,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Recompute recommended flags from the configured thresholds",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7402,29 +10180,49 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "prizeId",
+ "required": false,
+ "in": "query",
+ "schema": {}
},
- { "name": "prizeId", "required": false, "in": "query", "schema": {} },
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Run AI Judging Assist on a submission (advisory)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7439,21 +10237,34 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List AI Judging Assist scorecards (advisory)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7468,28 +10279,43 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Promote an AI scorecard into a counting score",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7503,28 +10329,43 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890" }
+ "schema": {
+ "example": "org_1234567890"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Reverse a promotion (back to advisory-only)",
"tags": ["Organization Hackathons - Judging"]
}
@@ -7535,10 +10376,18 @@
"operationId": "JudgeController_myInvitations",
"parameters": [],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List my pending judge invitations",
"tags": ["Judge"]
}
@@ -7553,14 +10402,24 @@
"required": true,
"in": "path",
"description": "Opaque invitation token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Preview an invitation by token",
"tags": ["Judge"]
}
@@ -7575,7 +10434,9 @@
"required": true,
"in": "path",
"description": "Opaque invitation token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -7589,10 +10450,18 @@
}
},
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Accept a judge invitation",
"tags": ["Judge"]
}
@@ -7606,14 +10475,24 @@
"required": true,
"in": "path",
"description": "Opaque invitation token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Decline a judge invitation",
"tags": ["Judge"]
}
@@ -7624,12 +10503,22 @@
"operationId": "JudgeController_myHackathons",
"parameters": [],
"responses": {
- "200": { "description": "Assigned hackathons" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Assigned hackathons"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
- "summary": "List hackathons I'm assigned to judge",
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "List hackathons I'm assigned to judge",
"tags": ["Judge"]
}
},
@@ -7647,11 +10536,21 @@
}
],
"responses": {
- "200": { "description": "Hackathon overview" },
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "200": {
+ "description": "Hackathon overview"
+ },
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get judge-scoped hackathon overview",
"tags": ["Judge"]
}
@@ -7666,21 +10565,30 @@
"required": false,
"in": "query",
"description": "Page number (1-indexed)",
- "schema": { "default": 1, "type": "number" }
+ "schema": {
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Number of items per page",
- "schema": { "maximum": 100, "default": 10, "type": "number" }
+ "schema": {
+ "maximum": 100,
+ "default": 10,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search term for project name, description, participant name or username",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "sortBy",
@@ -7723,10 +10631,18 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List submissions for scoring",
"tags": ["Judge"]
}
@@ -7741,7 +10657,9 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
@@ -7752,10 +10670,18 @@
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get one submission with my score",
"tags": ["Judge"]
}
@@ -7770,7 +10696,9 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
@@ -7781,10 +10709,18 @@
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Queue neighbors for the scoring page",
"tags": ["Judge"]
}
@@ -7802,10 +10738,18 @@
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get judging criteria for this hackathon",
"tags": ["Judge"]
}
@@ -7824,10 +10768,18 @@
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Final results for this hackathon",
"tags": ["Judge"]
}
@@ -7842,7 +10794,9 @@
"required": true,
"in": "path",
"description": "Submission ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
@@ -7853,14 +10807,102 @@
}
],
"responses": {
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit (or update) my scores for a submission",
"tags": ["Judge"]
}
},
+ "/api/judge/hackathons/{hackathonId}/submissions/{submissionId}/ai-score": {
+ "get": {
+ "description": "Returns the AI scorecard for the submission if one has been generated, else null. Advisory only; it never replaces the judge’s own score.",
+ "operationId": "JudgeController_aiScorecard",
+ "parameters": [
+ {
+ "name": "hackathonId",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "submissionId",
+ "required": true,
+ "in": "path",
+ "description": "Submission ID",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "AI advisory scorecard for a submission (judge view)",
+ "tags": ["Judge"]
+ },
+ "post": {
+ "description": "Generates (or regenerates) the advisory AI scorecard against the rubric. Advisory only; the judge still enters and submits their own score.",
+ "operationId": "JudgeController_runAiScore",
+ "parameters": [
+ {
+ "name": "hackathonId",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "submissionId",
+ "required": true,
+ "in": "path",
+ "description": "Submission ID",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Run AI scoring for a submission (judge assist)",
+ "tags": ["Judge"]
+ }
+ },
"/api/organizations/{organizationId}/hackathons/{id}/statistics": {
"get": {
"description": "Retrieves participation and engagement statistics for a hackathon. Only organizers of the hackathon can access this.",
@@ -7871,20 +10913,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"responses": {
@@ -7895,24 +10944,49 @@
"schema": {
"type": "object",
"properties": {
- "totalSubmissions": { "type": "number", "example": 45 },
- "activeParticipants": { "type": "number", "example": 120 },
- "totalFollowers": { "type": "number", "example": 340 },
- "prizePool": { "type": "number", "example": 50000 },
+ "totalSubmissions": {
+ "type": "number",
+ "example": 45
+ },
+ "activeParticipants": {
+ "type": "number",
+ "example": 120
+ },
+ "totalFollowers": {
+ "type": "number",
+ "example": 340
+ },
+ "prizePool": {
+ "type": "number",
+ "example": 50000
+ },
"categories": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
- "status": { "type": "string", "example": "active" }
+ "status": {
+ "type": "string",
+ "example": "active"
+ }
}
}
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get hackathon statistics (organizers only)",
"tags": ["Organization Hackathons - Updates"]
}
@@ -7927,20 +11001,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -7964,10 +11045,18 @@
}
}
},
- "400": { "description": "Invalid payload or hackathon state" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid payload or hackathon state"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update published hackathon content",
"tags": ["Organization Hackathons - Updates"]
}
@@ -7982,20 +11071,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -8022,9 +11118,15 @@
"400": {
"description": "Invalid payload or schedule changes are no longer allowed"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update published hackathon schedule",
"tags": ["Organization Hackathons - Updates"]
}
@@ -8039,20 +11141,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -8079,9 +11188,15 @@
"400": {
"description": "Invalid payload or escrow-restricted financial change"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update published hackathon financial settings",
"tags": ["Organization Hackathons - Updates"]
}
@@ -8096,20 +11211,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -8130,15 +11252,30 @@
"schema": {
"type": "object",
"properties": {
- "currentPrizePool": { "type": "number", "example": 180 },
- "newPrizePool": { "type": "number", "example": 250 },
- "currentPlatformFee": { "type": "number", "example": 8.5 },
- "newPlatformFee": { "type": "number", "example": 11.8 },
+ "currentPrizePool": {
+ "type": "number",
+ "example": 180
+ },
+ "newPrizePool": {
+ "type": "number",
+ "example": 250
+ },
+ "currentPlatformFee": {
+ "type": "number",
+ "example": 8.5
+ },
+ "newPlatformFee": {
+ "type": "number",
+ "example": 11.8
+ },
"currentTotalRequired": {
"type": "number",
"example": 188.5
},
- "newTotalRequired": { "type": "number", "example": 261.8 },
+ "newTotalRequired": {
+ "type": "number",
+ "example": 261.8
+ },
"additionalFundingRequired": {
"type": "number",
"example": 73.3
@@ -8148,22 +11285,35 @@
"nullable": true,
"example": 78.8
},
- "sufficient": { "type": "boolean", "example": true },
- "shortfall": { "type": "number", "example": 0 },
- "escrowStatus": {
- "type": "string",
- "nullable": true,
- "example": "funded"
+ "sufficient": {
+ "type": "boolean",
+ "example": true
+ },
+ "shortfall": {
+ "type": "number",
+ "example": 0
},
"breakdown": {
"type": "array",
"items": {
"type": "object",
"properties": {
- "place": { "type": "string", "example": "1st Place" },
- "amount": { "type": "number", "example": 50 },
- "fee": { "type": "number", "example": 2.25 },
- "total": { "type": "number", "example": 52.25 }
+ "place": {
+ "type": "string",
+ "example": "1st Place"
+ },
+ "amount": {
+ "type": "number",
+ "example": 50
+ },
+ "fee": {
+ "type": "number",
+ "example": 2.25
+ },
+ "total": {
+ "type": "number",
+ "example": 52.25
+ }
}
}
}
@@ -8172,10 +11322,18 @@
}
}
},
- "400": { "description": "Invalid payload or hackathon state" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid payload or hackathon state"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Preview financial update cost (dry-run)",
"tags": ["Organization Hackathons - Updates"]
}
@@ -8190,20 +11348,27 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "idOrSlug",
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "example": "hack_1234567890" }
+ "schema": {
+ "example": "hack_1234567890"
+ }
}
],
"requestBody": {
@@ -8230,13 +11395,89 @@
"400": {
"description": "Invalid payload or unsupported hackathon state"
},
- "404": { "description": "Resource not found" }
+ "404": {
+ "description": "Resource not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update published hackathon advanced settings",
"tags": ["Organization Hackathons - Updates"]
}
},
+ "/api/organizations/{organizationId}/hackathons/{id}/access": {
+ "patch": {
+ "description": "PUBLIC lists the hackathon and opens the page to everyone. PRIVATE hides it from listings and gates the page behind a password.",
+ "operationId": "OrganizationHackathonsUpdatesController_setHackathonAccess",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "description": "Organization ID",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "idOrSlug",
+ "required": true,
+ "in": "path",
+ "description": "Hackathon ID or slug",
+ "schema": {
+ "example": "hack_1234567890"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SetHackathonAccessDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HackathonResponseDto"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Missing password for private access"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Set hackathon visibility + access password (owner/admin)",
+ "tags": ["Organization Hackathons - Updates"]
+ }
+ },
"/api/organizations/{organizationId}/hackathons/{id}/export": {
"get": {
"description": "Export hackathon data as a **CSV** or a **branded PDF**.\n\n**CSV** — A multi-section spreadsheet-compatible file with UTF-8 BOM for\nExcel compatibility. Sections: Overview, Prize Tiers, Participants, Submissions, Winners, Judging.\n\n**PDF** — A professionally branded Boundless report including cover header,\nkey-metric stat cards, and data tables. Dark brand palette with mint accent.\n\nUse the `dataset` param to limit which sections are included.\n\n> Only hackathon organizers (organization managers) can use this endpoint.",
@@ -8267,7 +11508,10 @@
"required": true,
"in": "query",
"description": "Output format",
- "schema": { "enum": ["csv", "pdf"], "type": "string" }
+ "schema": {
+ "enum": ["csv", "pdf"],
+ "type": "string"
+ }
},
{
"name": "dataset",
@@ -8293,18 +11537,34 @@
"description": "Binary file stream (CSV or PDF)",
"content": {
"text/csv": {
- "schema": { "type": "string", "format": "binary" }
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
},
"application/pdf": {
- "schema": { "type": "string", "format": "binary" }
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
}
}
},
- "400": { "description": "Unsupported format or dataset" },
- "403": { "description": "Not an organizer of this hackathon" },
- "404": { "description": "Hackathon not found" }
+ "400": {
+ "description": "Unsupported format or dataset"
+ },
+ "403": {
+ "description": "Not an organizer of this hackathon"
+ },
+ "404": {
+ "description": "Hackathon not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Export hackathon data (organizer only)",
"tags": ["Organization Hackathons - Export"]
}
@@ -8318,28 +11578,40 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
"description": "Hackathon ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/InvitePartnerDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InvitePartnerDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Invitation created and email sent" }
+ "201": {
+ "description": "Invitation created and email sent"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Invite a partner to contribute to the hackathon prize pool",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8353,14 +11625,18 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
"description": "Hackathon ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -8381,17 +11657,31 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "default": 1, "type": "number" }
+ "schema": {
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "default": 50, "type": "number" }
+ "schema": {
+ "default": 50,
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Contributions retrieved"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Contributions retrieved" } },
- "security": [{ "bearer": [] }],
"summary": "List partner contributions for a hackathon",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8405,55 +11695,83 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
"description": "Hackathon ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "contributionId",
"required": true,
"in": "path",
"description": "Contribution ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Invitation cancelled"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Invitation cancelled" } },
- "security": [{ "bearer": [] }],
"summary": "Cancel a pending partner invitation",
"tags": ["Hackathons - Organizer Partners"]
}
},
"/api/organizations/{organizationId}/hackathons/{hackathonId}/partners/contributions/{contributionId}/allocations": {
"get": {
- "description": "Returns the pledged amount, allocatable (after Trustless Work fee), already allocated, remaining unallocated, and the list of individual allocations.",
+ "description": "Returns the pledged amount, allocatable (after platform fee), already allocated, remaining unallocated, and the list of individual allocations.",
"operationId": "OrganizationHackathonsPartnersController_getAllocations",
"parameters": [
{
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "contributionId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Allocation summary"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Allocation summary" } },
- "security": [{ "bearer": [] }],
"summary": "Get allocation summary for a contribution",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8467,19 +11785,25 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "contributionId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -8492,8 +11816,16 @@
}
}
},
- "responses": { "200": { "description": "Contribution allocated" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": "Contribution allocated"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Allocate a partner contribution into prize tiers",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8507,17 +11839,29 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Prizes with placements"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Prizes with placements" } },
- "security": [{ "bearer": [] }],
"summary": "List prizes + placements available for allocation",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8531,23 +11875,37 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "allocationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Allocation undone"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Allocation undone" } },
- "security": [{ "bearer": [] }],
"summary": "Undo a single allocation",
"tags": ["Hackathons - Organizer Partners"]
}
@@ -8561,17 +11919,23 @@
"required": true,
"in": "path",
"description": "Hex-encoded invite token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "Invitation details" } },
+ "responses": {
+ "200": {
+ "description": "Invitation details"
+ }
+ },
"summary": "Get partner invitation details by token (public, tokenized)",
"tags": ["Partner Contributions"]
}
},
"/api/partners/contribute/{token}/prepare-fund-tx": {
"post": {
- "description": "Validates the contribution window, calls Trustless Work, and returns an unsigned XDR for the partner wallet to sign locally. The Trustless Work API key never leaves the backend.",
+ "description": "Validates the contribution window and on-chain readiness, begins an ADD_FUNDS op on the boundless-events contract, links it to the contribution, and returns the unsigned XDR (plus the op row id) for the partner wallet to sign locally.",
"operationId": "PartnersContributeController_prepareFundTx",
"parameters": [
{
@@ -8579,7 +11943,9 @@
"required": true,
"in": "path",
"description": "Hex-encoded invite token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -8593,15 +11959,17 @@
}
},
"responses": {
- "200": { "description": "Unsigned transaction prepared" }
+ "200": {
+ "description": "Unsigned transaction prepared"
+ }
},
- "summary": "Build an unsigned Trustless Work fund-escrow transaction",
+ "summary": "Build an unsigned ADD_FUNDS escrow transaction",
"tags": ["Partner Contributions"]
}
},
"/api/partners/contribute/{token}/submit-tx": {
"post": {
- "description": "Forwards the signed XDR to Trustless Work, then marks the contribution confirmed using the Stellar transaction hash returned.",
+ "description": "Submits the signed XDR through the escrow orchestrator. The op settles asynchronously; the contribution is confirmed by the hackathon escrow subscriber once ADD_FUNDS settles on-chain.",
"operationId": "PartnersContributeController_submitTx",
"parameters": [
{
@@ -8609,7 +11977,9 @@
"required": true,
"in": "path",
"description": "Hex-encoded invite token",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -8622,8 +11992,12 @@
}
}
},
- "responses": { "200": { "description": "Contribution confirmed" } },
- "summary": "Submit a partner-signed transaction and confirm the contribution",
+ "responses": {
+ "200": {
+ "description": "Contribution confirmed"
+ }
+ },
+ "summary": "Submit a partner-signed ADD_FUNDS transaction",
"tags": ["Partner Contributions"]
}
},
@@ -8637,14 +12011,18 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "includeArchived",
"required": false,
"in": "query",
"description": "Set true to include archived tracks.",
- "schema": { "type": "boolean" }
+ "schema": {
+ "type": "boolean"
+ }
}
],
"responses": {
@@ -8654,13 +12032,19 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackResponseDto"
+ }
}
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "List hackathon tracks",
"tags": ["Hackathons - Tracks"]
@@ -8676,7 +12060,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "scope",
@@ -8702,8 +12088,12 @@
}
}
},
- "400": { "description": "Invalid request" },
- "404": { "description": "Resource not found" }
+ "400": {
+ "description": "Invalid request"
+ },
+ "404": {
+ "description": "Resource not found"
+ }
},
"summary": "List public custom questions",
"tags": ["Hackathons - Custom Questions"]
@@ -8719,13 +12109,17 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "includeArchived",
"required": false,
"in": "query",
- "schema": { "type": "boolean" }
+ "schema": {
+ "type": "boolean"
+ }
},
{
"name": "organizationId",
@@ -8741,13 +12135,19 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackResponseDto"
+ }
}
}
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List tracks (organizer view)",
"tags": ["Hackathons - Organizer Tracks"]
},
@@ -8758,14 +12158,18 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateTrackDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateTrackDto"
+ }
}
}
},
@@ -8774,12 +12178,18 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TrackResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TrackResponseDto"
+ }
}
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a track",
"tags": ["Hackathons - Organizer Tracks"]
}
@@ -8793,39 +12203,55 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateTracksConfigDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateTracksConfigDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Update hackathon-level track config",
- "tags": ["Hackathons - Organizer Tracks"]
- }
- },
- "/api/organizations/{organizationId}/hackathons/{id}/tracks/{trackId}": {
- "patch": {
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Update hackathon-level track config",
+ "tags": ["Hackathons - Organizer Tracks"]
+ }
+ },
+ "/api/organizations/{organizationId}/hackathons/{id}/tracks/{trackId}": {
+ "patch": {
"operationId": "OrganizationHackathonsTracksController_update",
"parameters": [
{
"name": "trackId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateTrackDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateTrackDto"
+ }
}
}
},
@@ -8834,12 +12260,18 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/TrackResponseDto" }
+ "schema": {
+ "$ref": "#/components/schemas/TrackResponseDto"
+ }
}
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update a track",
"tags": ["Hackathons - Organizer Tracks"]
},
@@ -8851,11 +12283,21 @@
"name": "trackId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Deleted or archived"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "204": { "description": "Deleted or archived" } },
- "security": [{ "bearer": [] }],
"summary": "Delete a track",
"tags": ["Hackathons - Organizer Tracks"]
}
@@ -8869,7 +12311,9 @@
"name": "trackId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -8880,19 +12324,36 @@
"schema": {
"type": "object",
"properties": {
- "trackName": { "type": "string" },
- "added": { "type": "number" },
- "alreadyOptedIn": { "type": "number" },
- "skippedDisqualified": { "type": "number" },
- "totalSubmissions": { "type": "number" },
- "newCap": { "type": "number", "nullable": true }
+ "trackName": {
+ "type": "string"
+ },
+ "added": {
+ "type": "number"
+ },
+ "alreadyOptedIn": {
+ "type": "number"
+ },
+ "skippedDisqualified": {
+ "type": "number"
+ },
+ "totalSubmissions": {
+ "type": "number"
+ },
+ "newCap": {
+ "type": "number",
+ "nullable": true
+ }
}
}
}
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Opt in every existing submission into this track",
"tags": ["Hackathons - Organizer Tracks"]
}
@@ -8907,7 +12368,9 @@
"required": true,
"in": "path",
"description": "Hackathon ID or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "scope",
@@ -8940,7 +12403,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List custom questions (organizer view)",
"tags": ["Hackathons - Organizer Custom Questions"]
},
@@ -8952,7 +12419,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -8980,7 +12449,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Replace the full custom-question set",
"tags": ["Hackathons - Organizer Custom Questions"]
}
@@ -8994,14 +12467,19 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -9016,7 +12494,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Request a funding step-up code",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9030,21 +12512,28 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/VerifyFundingOtpDto" }
+ "schema": {
+ "$ref": "#/components/schemas/VerifyFundingOtpDto"
+ }
}
}
},
@@ -9060,7 +12549,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Verify a funding step-up code",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9074,14 +12567,20 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon draft id",
- "schema": { "example": "hack_1234567890", "type": "string" }
+ "schema": {
+ "example": "hack_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9109,7 +12608,11 @@
"description": "Validation error or hackathon not in DRAFT status"
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish a hackathon draft to the events contract",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9123,14 +12626,19 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9155,7 +12663,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel an active hackathon",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9169,14 +12681,19 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9201,7 +12718,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Select winners for a hackathon",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9215,20 +12736,25 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid returned by the publish call",
+ "description": "EscrowOp uuid returned by the publish call",
"schema": {
"example": "cmpwiox7u0000yy4404ojbk9t",
"type": "string"
@@ -9257,7 +12783,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit signed XDR for a previously-built escrow op",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9271,21 +12801,28 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -9300,7 +12837,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Read the current state of an escrow op",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9314,18 +12855,31 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Hackathon reset to DRAFT."
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "Hackathon reset to DRAFT." } },
- "security": [{ "bearer": [] }],
"summary": "Reset a stranded hackathon back to DRAFT",
"tags": ["Organization Hackathons - Escrow (v2)"]
}
@@ -9340,21 +12894,27 @@
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
- "description": "HackathonSubmission cuid",
- "schema": { "type": "string" }
+ "description": "HackathonSubmission uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SubmitHackathonDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SubmitHackathonDto"
+ }
}
}
},
@@ -9370,7 +12930,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Anchor a hackathon submission on chain",
"tags": ["Hackathons - Participant Escrow (v2)"]
}
@@ -9384,14 +12948,18 @@
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "submissionId",
"required": true,
"in": "path",
- "description": "HackathonSubmission cuid",
- "schema": { "type": "string" }
+ "description": "HackathonSubmission uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9416,7 +12984,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Withdraw a hackathon submission anchor",
"tags": ["Hackathons - Participant Escrow (v2)"]
}
@@ -9431,7 +13003,9 @@
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9456,7 +13030,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Contribute funds to a hackathon pool",
"tags": ["Hackathons - Participant Escrow (v2)"]
}
@@ -9470,14 +13048,18 @@
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -9502,7 +13084,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit signed XDR for a participant op",
"tags": ["Hackathons - Participant Escrow (v2)"]
}
@@ -9516,14 +13102,18 @@
"required": true,
"in": "path",
"description": "Hackathon id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -9538,7 +13128,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Read the state of a participant op",
"tags": ["Hackathons - Participant Escrow (v2)"]
}
@@ -9551,17 +13145,27 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateOrganizationDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateOrganizationDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
},
"get": {
"operationId": "OrganizationsController_getOrganizations",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
}
},
@@ -9569,7 +13173,11 @@
"get": {
"operationId": "OrganizationsController_getMyOrganizations",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
}
},
@@ -9583,7 +13191,10 @@
"required": true,
"in": "path",
"description": "Organization ID or slug",
- "schema": { "example": "boundless-dao", "type": "string" }
+ "schema": {
+ "example": "boundless-dao",
+ "type": "string"
+ }
}
],
"responses": {
@@ -9597,7 +13208,9 @@
}
}
},
- "404": { "description": "Organization not found" }
+ "404": {
+ "description": "Organization not found"
+ }
},
"summary": "Get organization profile (public)",
"tags": ["Organization"]
@@ -9612,35 +13225,52 @@
"required": false,
"in": "query",
"description": "Search term (name, slug, tagline)",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "isProfileComplete",
"required": false,
"in": "query",
- "schema": { "enum": ["true", "false"], "type": "string" }
+ "schema": {
+ "enum": ["true", "false"],
+ "type": "string"
+ }
},
{
"name": "hasHackathons",
"required": false,
"in": "query",
- "schema": { "enum": ["true", "false"], "type": "string" }
+ "schema": {
+ "enum": ["true", "false"],
+ "type": "string"
+ }
},
{
"name": "hasGrants",
"required": false,
"in": "query",
- "schema": { "enum": ["true", "false"], "type": "string" }
+ "schema": {
+ "enum": ["true", "false"],
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Max results (default 10)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
- "responses": { "200": { "description": "Paginated organizations" } },
+ "responses": {
+ "200": {
+ "description": "Paginated organizations"
+ }
+ },
"summary": "Search organizations",
"tags": ["Organization"]
}
@@ -9655,7 +13285,10 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -9666,8 +13299,14 @@
"schema": {
"type": "object",
"properties": {
- "id": { "type": "string", "example": "org_1234567890" },
- "name": { "type": "string", "example": "Tech Innovators" },
+ "id": {
+ "type": "string",
+ "example": "org_1234567890"
+ },
+ "name": {
+ "type": "string",
+ "example": "Tech Innovators"
+ },
"logo": {
"type": "string",
"example": "https://example.com/logo.png"
@@ -9703,38 +13342,63 @@
},
"members": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["user_123", "user_456"]
},
"admins": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["user_123"]
},
- "owner": { "type": "string", "example": "user_123" },
+ "owner": {
+ "type": "string",
+ "example": "user_123"
+ },
"hackathons": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": []
},
"grants": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": []
},
- "isProfileComplete": { "type": "boolean", "example": true },
+ "isProfileComplete": {
+ "type": "boolean",
+ "example": true
+ },
"pendingInvites": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"example": ["invite_123"]
},
"betterAuthOrgId": {
"type": "string",
"example": "better_auth_org_123"
},
- "isArchived": { "type": "boolean", "example": false },
- "archivedBy": { "type": "string", "example": null },
- "archivedAt": { "type": "string", "example": null },
+ "isArchived": {
+ "type": "boolean",
+ "example": false
+ },
+ "archivedBy": {
+ "type": "string",
+ "example": null
+ },
+ "archivedAt": {
+ "type": "string",
+ "example": null
+ },
"createdAt": {
"type": "string",
"example": "2024-01-15T10:30:00.000Z"
@@ -9752,9 +13416,18 @@
"members": {
"type": "object",
"properties": {
- "current": { "type": "number", "example": 25 },
- "previous": { "type": "number", "example": 22 },
- "change": { "type": "number", "example": 3 },
+ "current": {
+ "type": "number",
+ "example": 25
+ },
+ "previous": {
+ "type": "number",
+ "example": 22
+ },
+ "change": {
+ "type": "number",
+ "example": 3
+ },
"changePercentage": {
"type": "number",
"example": 13.64
@@ -9768,9 +13441,18 @@
"hackathons": {
"type": "object",
"properties": {
- "current": { "type": "number", "example": 5 },
- "previous": { "type": "number", "example": 4 },
- "change": { "type": "number", "example": 1 },
+ "current": {
+ "type": "number",
+ "example": 5
+ },
+ "previous": {
+ "type": "number",
+ "example": 4
+ },
+ "change": {
+ "type": "number",
+ "example": 1
+ },
"changePercentage": {
"type": "number",
"example": 25
@@ -9784,9 +13466,18 @@
"grants": {
"type": "object",
"properties": {
- "current": { "type": "number", "example": 0 },
- "previous": { "type": "number", "example": 0 },
- "change": { "type": "number", "example": 0 },
+ "current": {
+ "type": "number",
+ "example": 0
+ },
+ "previous": {
+ "type": "number",
+ "example": 0
+ },
+ "change": {
+ "type": "number",
+ "example": 0
+ },
"changePercentage": {
"type": "number",
"example": 0
@@ -9811,8 +13502,14 @@
"type": "string",
"example": "January"
},
- "year": { "type": "number", "example": 2024 },
- "count": { "type": "number", "example": 2 },
+ "year": {
+ "type": "number",
+ "example": 2024
+ },
+ "count": {
+ "type": "number",
+ "example": 2
+ },
"timestamp": {
"type": "string",
"example": "2024-01-01T00:00:00.000Z"
@@ -9829,7 +13526,9 @@
}
}
},
- "404": { "description": "Organization not found" }
+ "404": {
+ "description": "Organization not found"
+ }
},
"summary": "Get organization by ID",
"tags": ["Organization"]
@@ -9841,18 +13540,26 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateOrganizationDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateOrganizationDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
},
"delete": {
@@ -9862,10 +13569,16 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
}
},
@@ -9877,10 +13590,80 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "tags": ["Organization"]
+ }
+ },
+ "/api/organizations/{id}/permissions": {
+ "get": {
+ "operationId": "OrganizationsController_getOrganizationPermissions",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "summary": "Get the org role-permission matrix",
+ "tags": ["Organization"]
+ },
+ "patch": {
+ "operationId": "OrganizationsController_updateOrganizationPermissions",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "summary": "Update the org role-permission matrix (owner only)",
+ "tags": ["Organization"]
+ }
+ },
+ "/api/organizations/{id}/permissions/reset": {
+ "post": {
+ "operationId": "OrganizationsController_resetOrganizationPermissions",
+ "parameters": [
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "summary": "Reset the org role-permission matrix (owner only)",
"tags": ["Organization"]
}
},
@@ -9892,10 +13675,16 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Organization"]
}
},
@@ -9907,10 +13696,16 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Members"]
}
},
@@ -9922,16 +13717,24 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Members"]
},
"delete": {
@@ -9941,16 +13744,24 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Members"]
}
},
@@ -9962,24 +13773,34 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateMemberRoleDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateMemberRoleDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Members"]
}
},
@@ -9991,10 +13812,16 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Members"]
}
},
@@ -10006,18 +13833,26 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/InviteMemberDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InviteMemberDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
},
"get": {
@@ -10027,10 +13862,16 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
}
},
@@ -10042,10 +13883,16 @@
"name": "invitationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
}
},
@@ -10057,10 +13904,16 @@
"name": "invitationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
}
},
@@ -10072,16 +13925,24 @@
"name": "invitationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
}
},
@@ -10089,7 +13950,11 @@
"get": {
"operationId": "InvitationsController_getMyInvitations",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Invitations"]
}
},
@@ -10101,7 +13966,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -10119,11 +13987,54 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List treasury wallets",
"tags": ["Organization Treasury"]
}
},
+ "/api/organizations/{organizationId}/treasury/wallets/archived": {
+ "get": {
+ "description": "Wallets are never deleted, only archived. This returns the archived set so they can be reviewed and restored.",
+ "operationId": "OrganizationTreasuryController_listArchivedWallets",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/TreasuryWalletResponseDto"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "List archived treasury wallets",
+ "tags": ["Organization Treasury"]
+ }
+ },
"/api/organizations/{organizationId}/treasury/default-wallet": {
"get": {
"description": "Returns the org canonical managed wallet, provisioning one if none exists. Owner/admin only (may create). Use this as the funding + contract-auth identity for organization events.",
@@ -10133,7 +14044,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -10148,7 +14062,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get (or create) the organization default wallet",
"tags": ["Organization Treasury"]
}
@@ -10162,7 +14080,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -10187,7 +14108,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a Tier 1 managed treasury wallet",
"tags": ["Organization Treasury"]
}
@@ -10201,7 +14126,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -10226,7 +14154,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Register a connected (Tier 2/3) wallet",
"tags": ["Organization Treasury"]
}
@@ -10239,13 +14171,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "walletId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10260,7 +14197,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Re-fetch a connected wallet signer set from Horizon",
"tags": ["Organization Treasury"]
}
@@ -10273,13 +14214,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "walletId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -10304,7 +14250,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update a wallet label / default flag",
"tags": ["Organization Treasury"]
}
@@ -10317,13 +14267,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "walletId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10338,11 +14293,59 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Archive a treasury wallet",
"tags": ["Organization Treasury"]
}
},
+ "/api/organizations/{organizationId}/treasury/wallets/{walletId}/restore": {
+ "post": {
+ "description": "Wallets are never deleted; archiving is always reversible.",
+ "operationId": "OrganizationTreasuryController_restoreWallet",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "walletId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TreasuryWalletResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Restore an archived treasury wallet",
+ "tags": ["Organization Treasury"]
+ }
+ },
"/api/organizations/{organizationId}/treasury/wallets/{walletId}/balance": {
"get": {
"operationId": "OrganizationTreasuryController_walletBalance",
@@ -10351,13 +14354,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "walletId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10372,7 +14380,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Live USDC + XLM balance for a wallet",
"tags": ["Organization Treasury"]
}
@@ -10385,7 +14397,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"responses": {
@@ -10400,7 +14415,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get the treasury spend policy (defaults if unset)",
"tags": ["Organization Treasury"]
},
@@ -10411,7 +14430,10 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -10436,7 +14458,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update the treasury spend policy (owner only)",
"tags": ["Organization Treasury"]
}
@@ -10449,14 +14475,19 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/InitiateSpendDto" }
+ "schema": {
+ "$ref": "#/components/schemas/InitiateSpendDto"
+ }
}
}
},
@@ -10472,7 +14503,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Initiate a spend request",
"tags": ["Organization Treasury"]
},
@@ -10483,13 +14518,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "status",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10507,11 +14547,185 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List spend requests",
"tags": ["Organization Treasury"]
}
},
+ "/api/organizations/{organizationId}/treasury/spend/funding-otp/request": {
+ "post": {
+ "operationId": "OrganizationTreasuryController_requestSendOtp",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RequestFundingOtpResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Request an email verification code before sending funds",
+ "tags": ["Organization Treasury"]
+ }
+ },
+ "/api/organizations/{organizationId}/treasury/spend/funding-otp/verify": {
+ "post": {
+ "operationId": "OrganizationTreasuryController_verifySendOtp",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyFundingOtpDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyFundingOtpResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Verify the email code to authorize sending funds",
+ "tags": ["Organization Treasury"]
+ }
+ },
+ "/api/organizations/{organizationId}/treasury/spend/send": {
+ "post": {
+ "description": "Owner/admin only. When email step-up is enabled, requires a recent verification (see spend/funding-otp/request + verify). Creates, authorizes, and executes the payment in a single call.",
+ "operationId": "OrganizationTreasuryController_sendFunds",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SendTreasuryFundsDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SpendRequestResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Send funds from a managed treasury wallet",
+ "tags": ["Organization Treasury"]
+ }
+ },
+ "/api/organizations/{organizationId}/treasury/spend/destination-readiness": {
+ "get": {
+ "description": "Returns whether the recipient account exists on-chain and has a USDC trustline, so the UI can warn before a send instead of failing on-chain.",
+ "operationId": "OrganizationTreasuryController_checkSendDestination",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "address",
+ "required": true,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SendDestinationReadinessDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Check whether a destination can receive USDC",
+ "tags": ["Organization Treasury"]
+ }
+ },
"/api/organizations/{organizationId}/treasury/spend/{requestId}": {
"get": {
"operationId": "OrganizationTreasuryController_getSpend",
@@ -10520,13 +14734,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10541,7 +14760,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get a spend request",
"tags": ["Organization Treasury"]
}
@@ -10554,20 +14777,27 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": false,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SpendDecisionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SpendDecisionDto"
+ }
}
}
},
@@ -10583,7 +14813,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Approve a spend request (owner/admin)",
"tags": ["Organization Treasury"]
}
@@ -10596,20 +14830,27 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": false,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SpendDecisionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SpendDecisionDto"
+ }
}
}
},
@@ -10625,7 +14866,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Reject a spend request (owner/admin)",
"tags": ["Organization Treasury"]
}
@@ -10638,13 +14883,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10659,7 +14909,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel a spend request (initiator or owner)",
"tags": ["Organization Treasury"]
}
@@ -10673,13 +14927,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10694,7 +14953,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Execute an approved spend on-chain (managed wallets)",
"tags": ["Organization Treasury"]
}
@@ -10708,13 +14971,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10729,7 +14997,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Build the unsigned XDR for a connected-wallet spend",
"tags": ["Organization Treasury"]
}
@@ -10742,13 +15014,18 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "requestId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -10773,7 +15050,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit a browser-signed spend XDR (connected wallets)",
"tags": ["Organization Treasury"]
}
@@ -10786,19 +15067,26 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -10813,11 +15101,232 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Paginated treasury audit log",
"tags": ["Organization Treasury"]
}
},
+ "/api/organizations/{organizationId}/receipts": {
+ "get": {
+ "operationId": "OrganizationReceiptsController_list",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "limit",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "type",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "referenceType",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "referenceId",
+ "required": false,
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ReceiptListResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "List money receipts (newest first)",
+ "tags": ["Organization Receipts"]
+ }
+ },
+ "/api/organizations/{organizationId}/receipts/{receiptId}": {
+ "get": {
+ "operationId": "OrganizationReceiptsController_getOne",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "receiptId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ReceiptResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Get a single receipt",
+ "tags": ["Organization Receipts"]
+ }
+ },
+ "/api/organizations/{organizationId}/receipts/{receiptId}/send": {
+ "post": {
+ "operationId": "OrganizationReceiptsController_send",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "receiptId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SendReceiptDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Email a copy of the receipt",
+ "tags": ["Organization Receipts"]
+ }
+ },
+ "/api/organizations/{organizationId}/receipts/{receiptId}/void": {
+ "post": {
+ "operationId": "OrganizationReceiptsController_void",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "receiptId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VoidReceiptDto"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ReceiptResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Void a receipt (owner/admin). Never deleted.",
+ "tags": ["Organization Receipts"]
+ }
+ },
"/api/votes": {
"post": {
"operationId": "VotesController_createVote",
@@ -10826,11 +15335,17 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateVoteDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateVoteDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
"tags": ["Votes"]
},
"get": {
@@ -10841,45 +15356,67 @@
"required": false,
"in": "query",
"description": "Project ID",
- "schema": { "example": "123", "type": "string" }
+ "schema": {
+ "example": "123",
+ "type": "string"
+ }
},
{
"name": "entityType",
"required": false,
"in": "query",
"description": "Entity Type",
- "schema": { "example": "PROJECT", "type": "string" }
+ "schema": {
+ "example": "PROJECT",
+ "type": "string"
+ }
},
{
"name": "voteType",
"required": true,
"in": "query",
"description": "Vote Type",
- "schema": { "example": "UPVOTE", "type": "string" }
+ "schema": {
+ "example": "UPVOTE",
+ "type": "string"
+ }
},
{
"name": "userId",
"required": true,
"in": "query",
"description": "User ID",
- "schema": { "example": "123", "type": "string" }
+ "schema": {
+ "example": "123",
+ "type": "string"
+ }
},
{
"name": "limit",
"required": true,
"in": "query",
"description": "Limit",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "offset",
"required": true,
"in": "query",
"description": "Offset",
- "schema": { "example": 0, "type": "number" }
+ "schema": {
+ "example": 0,
+ "type": "number"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Votes"]
}
},
@@ -10891,16 +15428,24 @@
"name": "projectId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Votes"]
}
},
@@ -10912,16 +15457,24 @@
"name": "projectId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Votes"]
}
},
@@ -10933,16 +15486,24 @@
"name": "projectId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityType",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["Votes"]
}
},
@@ -10955,7 +15516,9 @@
"name": "projectId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "entityType",
@@ -10975,29 +15538,42 @@
"name": "voteType",
"required": false,
"in": "query",
- "schema": { "enum": ["UPVOTE", "DOWNVOTE"], "type": "string" }
+ "schema": {
+ "enum": ["UPVOTE", "DOWNVOTE"],
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "includeVoters",
"required": false,
"in": "query",
"description": "Include voter list and vote counts in response",
- "schema": { "type": "boolean" }
+ "schema": {
+ "type": "boolean"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "Get project votes",
"tags": ["Votes"]
}
@@ -11037,18 +15613,24 @@
"required": false,
"in": "query",
"description": "Items per page, max 50 (default: 20)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (default: 1)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "Leaderboard retrieved successfully" }
+ "200": {
+ "description": "Leaderboard retrieved successfully"
+ }
},
"summary": "Get community leaderboard entries",
"tags": ["leaderboard"]
@@ -11062,17 +15644,31 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateBlogPostDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateBlogPostDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Blog post created successfully" },
- "400": { "description": "Invalid input" },
- "403": { "description": "Forbidden" },
- "429": { "description": "Rate limit exceeded" }
+ "201": {
+ "description": "Blog post created successfully"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "429": {
+ "description": "Rate limit exceeded"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a new blog post",
"tags": ["blog-posts"]
},
@@ -11084,7 +15680,9 @@
"required": false,
"in": "query",
"description": "Author ID to filter posts",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -11101,42 +15699,60 @@
"required": false,
"in": "query",
"description": "Search query for post title/content",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "tags",
"required": false,
"in": "query",
"description": "Filter by tags (comma-separated)",
- "schema": { "example": "smart-contracts,soroban", "type": "string" }
+ "schema": {
+ "example": "smart-contracts,soroban",
+ "type": "string"
+ }
},
{
"name": "categories",
"required": false,
"in": "query",
"description": "Filter by categories (comma-separated)",
- "schema": { "example": "tutorials,development", "type": "string" }
+ "schema": {
+ "example": "tutorials,development",
+ "type": "string"
+ }
},
{
"name": "isFeatured",
"required": false,
"in": "query",
"description": "Include only featured posts",
- "schema": { "default": false, "type": "boolean" }
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ }
},
{
"name": "includePinned",
"required": false,
"in": "query",
"description": "Include pinned posts first",
- "schema": { "default": true, "type": "boolean" }
+ "schema": {
+ "default": true,
+ "type": "boolean"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "minimum": 1, "default": 1, "type": "number" }
+ "schema": {
+ "minimum": 1,
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
@@ -11180,7 +15796,9 @@
}
],
"responses": {
- "200": { "description": "Blog posts retrieved successfully" }
+ "200": {
+ "description": "Blog posts retrieved successfully"
+ }
},
"summary": "List all blog posts with pagination and filters",
"tags": ["blog-posts"]
@@ -11195,13 +15813,21 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Blog post retrieved successfully" },
- "403": { "description": "Post is not published" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post retrieved successfully"
+ },
+ "403": {
+ "description": "Post is not published"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
"summary": "Get blog post by ID",
"tags": ["blog-posts"]
@@ -11216,13 +15842,21 @@
"required": true,
"in": "path",
"description": "Blog post slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Blog post retrieved successfully" },
- "403": { "description": "Post is not published" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post retrieved successfully"
+ },
+ "403": {
+ "description": "Post is not published"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
"summary": "Get blog post by slug",
"tags": ["blog-posts"]
@@ -11237,18 +15871,26 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "limit",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Related posts retrieved successfully" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Related posts retrieved successfully"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
"summary": "Get related blog posts",
"tags": ["blog-posts"]
@@ -11263,23 +15905,37 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateBlogPostDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateBlogPostDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Blog post updated successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post updated successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update a blog post",
"tags": ["blog-posts"]
},
@@ -11291,15 +15947,27 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "204": { "description": "Blog post deleted successfully" },
- "403": { "description": "Forbidden" },
- "404": { "description": "Blog post not found" }
+ "204": {
+ "description": "Blog post deleted successfully"
+ },
+ "403": {
+ "description": "Forbidden"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete a blog post",
"tags": ["blog-posts"]
}
@@ -11314,16 +15982,26 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "content": { "type": "string" } },
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ },
"required": ["content"]
}
}
}
},
"responses": {
- "200": { "description": "Excerpt generated successfully" }
+ "200": {
+ "description": "Excerpt generated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Generate excerpt from content",
"tags": ["Admin - AI"]
}
@@ -11338,16 +16016,26 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "content": { "type": "string" } },
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ },
"required": ["content"]
}
}
}
},
"responses": {
- "200": { "description": "Reading time generated successfully" }
+ "200": {
+ "description": "Reading time generated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Generate reading time estimate from content",
"tags": ["Admin - AI"]
}
@@ -11362,16 +16050,26 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "content": { "type": "string" } },
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ },
"required": ["content"]
}
}
}
},
"responses": {
- "200": { "description": "SEO settings generated successfully" }
+ "200": {
+ "description": "SEO settings generated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Generate SEO settings from content",
"tags": ["Admin - AI"]
}
@@ -11386,16 +16084,26 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "content": { "type": "string" } },
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ },
"required": ["content"]
}
}
}
},
"responses": {
- "200": { "description": "Tags generated successfully" }
+ "200": {
+ "description": "Tags generated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Generate tags from content",
"tags": ["Admin - AI"]
}
@@ -11410,16 +16118,26 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "content": { "type": "string" } },
+ "properties": {
+ "content": {
+ "type": "string"
+ }
+ },
"required": ["content"]
}
}
}
},
"responses": {
- "200": { "description": "Category generated successfully" }
+ "200": {
+ "description": "Category generated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Generate category from content",
"tags": ["Admin - AI"]
}
@@ -11434,7 +16152,10 @@
"required": false,
"in": "query",
"description": "Time range for the overview data",
- "schema": { "enum": ["7d", "30d", "90d"], "type": "string" }
+ "schema": {
+ "enum": ["7d", "30d", "90d"],
+ "type": "string"
+ }
}
],
"responses": {
@@ -11448,11 +16169,21 @@
}
}
},
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "500": { "description": "Internal server error" }
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "500": {
+ "description": "Internal server error"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get admin overview data (Admin only)",
"tags": ["Admin"]
}
@@ -11467,43 +16198,65 @@
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search by name, email, or username",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "role",
"required": false,
"in": "query",
"description": "Filter by user role",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "isActive",
"required": false,
"in": "query",
"description": "Filter by active status (not banned)",
- "schema": { "type": "boolean" }
+ "schema": {
+ "type": "boolean"
+ }
}
],
"responses": {
- "200": { "description": "Users retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" }
+ "200": {
+ "description": "Users retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get all users (Admin only)",
"tags": ["Admin"]
}
@@ -11514,11 +16267,21 @@
"operationId": "AdminController_exportUsers",
"parameters": [],
"responses": {
- "200": { "description": "CSV file download" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" }
+ "200": {
+ "description": "CSV file download"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Export all users as CSV (Admin only)",
"tags": ["Admin"]
}
@@ -11533,16 +16296,31 @@
"required": true,
"in": "path",
"description": "User username or ID",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User details retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User details retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user details (Admin only)",
"tags": ["Admin"]
}
@@ -11557,16 +16335,31 @@
"required": true,
"in": "path",
"description": "User username or ID",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User statistics retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User statistics retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user statistics (Admin only)",
"tags": ["Admin"]
}
@@ -11581,30 +16374,51 @@
"required": true,
"in": "path",
"description": "User username or ID",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
}
],
"responses": {
- "200": { "description": "User activity retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User activity retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user activity (Admin only)",
"tags": ["Admin"]
}
@@ -11619,44 +16433,71 @@
"required": true,
"in": "path",
"description": "User username or ID",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "status",
"required": false,
"in": "query",
"description": "Filter by project status",
- "schema": { "example": "ACTIVE", "type": "string" }
+ "schema": {
+ "example": "ACTIVE",
+ "type": "string"
+ }
},
{
"name": "category",
"required": false,
"in": "query",
"description": "Filter by project category",
- "schema": { "example": "defi", "type": "string" }
+ "schema": {
+ "example": "defi",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User projects retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User projects retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user projects (Admin only)",
"tags": ["Admin"]
}
@@ -11671,29 +16512,47 @@
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search by organization name or slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Organizations retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" }
+ "200": {
+ "description": "Organizations retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get all organizations (Admin only)",
"tags": ["Admin"]
}
@@ -11708,18 +16567,31 @@
"required": true,
"in": "path",
"description": "Organization ID",
- "schema": { "example": "clx1234567890", "type": "string" }
+ "schema": {
+ "example": "clx1234567890",
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "Organization details retrieved successfully"
},
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "Organization not found" }
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "Organization not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get organization details (Admin only)",
"tags": ["Admin"]
}
@@ -11734,16 +16606,31 @@
"required": true,
"in": "path",
"description": "User username or ID",
- "schema": { "example": "johndoe", "type": "string" }
+ "schema": {
+ "example": "johndoe",
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "User organizations retrieved successfully" },
- "401": { "description": "Unauthorized - Authentication required" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "User organizations retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized - Authentication required"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get user organizations (Admin only)",
"tags": ["Admin"]
}
@@ -11756,17 +16643,31 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateBlogPostDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateBlogPostDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Blog post created successfully" },
- "400": { "description": "Invalid input" },
- "403": { "description": "Forbidden - Admin access required" },
- "429": { "description": "Rate limit exceeded" }
+ "201": {
+ "description": "Blog post created successfully"
+ },
+ "400": {
+ "description": "Invalid input"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "429": {
+ "description": "Rate limit exceeded"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Create a new blog post (Admin only)",
"tags": ["Admin - Blog Posts"]
},
@@ -11778,7 +16679,9 @@
"required": false,
"in": "query",
"description": "Author ID to filter posts",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -11795,42 +16698,60 @@
"required": false,
"in": "query",
"description": "Search query for post title/content",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "tags",
"required": false,
"in": "query",
"description": "Filter by tags (comma-separated)",
- "schema": { "example": "smart-contracts,soroban", "type": "string" }
+ "schema": {
+ "example": "smart-contracts,soroban",
+ "type": "string"
+ }
},
{
"name": "categories",
"required": false,
"in": "query",
"description": "Filter by categories (comma-separated)",
- "schema": { "example": "tutorials,development", "type": "string" }
+ "schema": {
+ "example": "tutorials,development",
+ "type": "string"
+ }
},
{
"name": "isFeatured",
"required": false,
"in": "query",
"description": "Include only featured posts",
- "schema": { "default": false, "type": "boolean" }
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ }
},
{
"name": "includePinned",
"required": false,
"in": "query",
"description": "Include pinned posts first",
- "schema": { "default": true, "type": "boolean" }
+ "schema": {
+ "default": true,
+ "type": "boolean"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "minimum": 1, "default": 1, "type": "number" }
+ "schema": {
+ "minimum": 1,
+ "default": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
@@ -11874,9 +16795,15 @@
}
],
"responses": {
- "200": { "description": "Blog posts retrieved successfully" }
+ "200": {
+ "description": "Blog posts retrieved successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "List all blog posts including drafts (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -11890,14 +16817,24 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Blog post retrieved successfully" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post retrieved successfully"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get blog post by ID (Admin only)",
"tags": ["Admin - Blog Posts"]
},
@@ -11909,23 +16846,37 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdateBlogPostDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdateBlogPostDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Blog post updated successfully" },
- "403": { "description": "Forbidden - Admin access required" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post updated successfully"
+ },
+ "403": {
+ "description": "Forbidden - Admin access required"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Update a blog post (Admin only)",
"tags": ["Admin - Blog Posts"]
},
@@ -11938,14 +16889,24 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "204": { "description": "Blog post deleted successfully" },
- "404": { "description": "Blog post not found" }
+ "204": {
+ "description": "Blog post deleted successfully"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Soft delete a blog post (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -11960,16 +16921,24 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"204": {
"description": "Blog post permanently deleted successfully"
},
- "404": { "description": "Blog post not found" }
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Permanently delete a blog post (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -11983,14 +16952,24 @@
"required": true,
"in": "path",
"description": "Blog post ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Blog post restored successfully" },
- "404": { "description": "Blog post not found" }
+ "200": {
+ "description": "Blog post restored successfully"
+ },
+ "404": {
+ "description": "Blog post not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Restore a soft-deleted blog post (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -12003,13 +16982,21 @@
"name": "limit",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Tags retrieved successfully" }
+ "200": {
+ "description": "Tags retrieved successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get all tags with post counts (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -12023,14 +17010,24 @@
"required": true,
"in": "path",
"description": "Tag slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Tag retrieved successfully" },
- "404": { "description": "Tag not found" }
+ "200": {
+ "description": "Tag retrieved successfully"
+ },
+ "404": {
+ "description": "Tag not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get tag by slug (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -12041,9 +17038,15 @@
"operationId": "AdminBlogsController_deleteUnusedTags",
"parameters": [],
"responses": {
- "200": { "description": "Unused tags deleted successfully" }
+ "200": {
+ "description": "Unused tags deleted successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Delete all unused tags (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -12053,9 +17056,15 @@
"operationId": "AdminBlogsController_publishScheduledPosts",
"parameters": [],
"responses": {
- "200": { "description": "Scheduled posts published successfully" }
+ "200": {
+ "description": "Scheduled posts published successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Manually trigger publishing of scheduled posts (Admin only)",
"tags": ["Admin - Blog Posts"]
}
@@ -12064,11 +17073,29 @@
"get": {
"operationId": "AdminCrowdfundingController_list",
"parameters": [
- { "name": "limit", "required": false, "in": "query", "schema": {} },
- { "name": "page", "required": false, "in": "query", "schema": {} }
+ {
+ "name": "limit",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ },
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of campaigns"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
],
- "responses": { "200": { "description": "List of campaigns" } },
- "security": [{ "JWT-auth": [] }],
"summary": "List crowdfunding campaigns",
"tags": ["Admin - Crowdfunding"]
}
@@ -12082,16 +17109,36 @@
"required": true,
"in": "path",
"description": "Username or User ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "limit",
+ "required": false,
+ "in": "query",
+ "schema": {}
},
- { "name": "limit", "required": false, "in": "query", "schema": {} },
- { "name": "page", "required": false, "in": "query", "schema": {} }
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ }
],
"responses": {
- "200": { "description": "List of campaigns by user" },
- "404": { "description": "User not found" }
+ "200": {
+ "description": "List of campaigns by user"
+ },
+ "404": {
+ "description": "User not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "List crowdfunding campaigns by user",
"tags": ["Admin - Crowdfunding"]
}
@@ -12105,14 +17152,24 @@
"required": true,
"in": "path",
"description": "Campaign ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign details" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Campaign details"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get crowdfunding campaign by ID",
"tags": ["Admin - Crowdfunding"]
}
@@ -12121,11 +17178,29 @@
"get": {
"operationId": "AdminCrowdfundingController_listPending",
"parameters": [
- { "name": "limit", "required": false, "in": "query", "schema": {} },
- { "name": "page", "required": false, "in": "query", "schema": {} }
+ {
+ "name": "limit",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ },
+ {
+ "name": "page",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of pending campaigns"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
],
- "responses": { "200": { "description": "List of pending campaigns" } },
- "security": [{ "JWT-auth": [] }],
"summary": "List crowdfunding campaigns pending admin review",
"tags": ["Admin - Crowdfunding"]
}
@@ -12138,11 +17213,21 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Campaign approved"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "Campaign approved" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Approve a crowdfunding campaign",
"tags": ["Admin - Crowdfunding"]
}
@@ -12155,7 +17240,9 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12168,8 +17255,16 @@
}
}
},
- "responses": { "200": { "description": "Campaign rejected" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "200": {
+ "description": "Campaign rejected"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Reject a crowdfunding campaign",
"tags": ["Admin - Crowdfunding"]
}
@@ -12182,7 +17277,9 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12196,10 +17293,18 @@
}
},
"responses": {
- "200": { "description": "Revision request created" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Revision request created"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Request revisions for a crowdfunding campaign",
"tags": ["Admin - Crowdfunding"]
}
@@ -12212,7 +17317,9 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12226,10 +17333,18 @@
}
},
"responses": {
- "200": { "description": "Review note added" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Review note added"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Add an admin review note for a campaign",
"tags": ["Admin - Crowdfunding"]
}
@@ -12242,7 +17357,9 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12256,10 +17373,18 @@
}
},
"responses": {
- "200": { "description": "Reviewer assigned" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Reviewer assigned"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Assign a reviewer to a campaign",
"tags": ["Admin - Crowdfunding"]
}
@@ -12274,14 +17399,20 @@
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "status",
@@ -12329,9 +17460,15 @@
}
],
"responses": {
- "200": { "description": "List of campaigns with their milestones" }
+ "200": {
+ "description": "List of campaigns with their milestones"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "List all milestones grouped by campaign",
"tags": ["Admin"]
}
@@ -12345,14 +17482,20 @@
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "status",
@@ -12399,8 +17542,16 @@
}
}
],
- "responses": { "200": { "description": "List of pending milestones" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "200": {
+ "description": "List of pending milestones"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get pending milestone review queue",
"tags": ["Admin"]
}
@@ -12413,14 +17564,24 @@
"name": "milestoneId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Milestone details" },
- "404": { "description": "Milestone not found" }
+ "200": {
+ "description": "Milestone details"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get milestone detail for review",
"tags": ["Admin"]
}
@@ -12433,22 +17594,34 @@
"name": "milestoneId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ApproveMilestoneDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ApproveMilestoneDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Milestone approved" },
- "404": { "description": "Milestone not found" }
+ "200": {
+ "description": "Milestone approved"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Approve a milestone submission",
"tags": ["Admin"]
}
@@ -12461,22 +17634,34 @@
"name": "milestoneId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/RejectMilestoneDto" }
+ "schema": {
+ "$ref": "#/components/schemas/RejectMilestoneDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Milestone rejected" },
- "404": { "description": "Milestone not found" }
+ "200": {
+ "description": "Milestone rejected"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Reject a milestone submission",
"tags": ["Admin"]
}
@@ -12489,7 +17674,9 @@
"name": "milestoneId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12503,10 +17690,18 @@
}
},
"responses": {
- "200": { "description": "Resubmission requested" },
- "404": { "description": "Milestone not found" }
+ "200": {
+ "description": "Resubmission requested"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Request milestone resubmission with changes",
"tags": ["Admin"]
}
@@ -12519,7 +17714,9 @@
"name": "milestoneId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12533,10 +17730,18 @@
}
},
"responses": {
- "201": { "description": "Review note added" },
- "404": { "description": "Milestone not found" }
+ "201": {
+ "description": "Review note added"
+ },
+ "404": {
+ "description": "Milestone not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Add a review note to milestone",
"tags": ["Admin"]
}
@@ -12549,14 +17754,24 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Escrow information" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Escrow information"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get escrow information and transaction history for campaign",
"tags": ["Admin"]
}
@@ -12570,22 +17785,34 @@
"name": "campaignId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ManualEscrowActionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ManualEscrowActionDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Escrow action executed" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Escrow action executed"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Execute manual escrow action (testnet only)",
"tags": ["Admin"]
}
@@ -12599,14 +17826,20 @@
"required": false,
"in": "query",
"description": "Page number",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
},
{
"name": "status",
@@ -12637,8 +17870,16 @@
}
}
],
- "responses": { "200": { "description": "List of disputes" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "200": {
+ "description": "List of disputes"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get dispute dashboard with filtering",
"tags": ["Admin"]
}
@@ -12651,14 +17892,24 @@
"name": "disputeId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Dispute details" },
- "404": { "description": "Dispute not found" }
+ "200": {
+ "description": "Dispute details"
+ },
+ "404": {
+ "description": "Dispute not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get detailed dispute information",
"tags": ["Admin"]
}
@@ -12671,22 +17922,34 @@
"name": "disputeId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AssignDisputeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AssignDisputeDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Dispute assigned" },
- "404": { "description": "Dispute not found" }
+ "200": {
+ "description": "Dispute assigned"
+ },
+ "404": {
+ "description": "Dispute not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Assign dispute to an admin",
"tags": ["Admin"]
}
@@ -12700,22 +17963,34 @@
"name": "disputeId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AddDisputeNoteDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AddDisputeNoteDto"
+ }
}
}
},
"responses": {
- "201": { "description": "Note added" },
- "404": { "description": "Dispute not found" }
+ "201": {
+ "description": "Note added"
+ },
+ "404": {
+ "description": "Dispute not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Add note or message to dispute",
"tags": ["Admin"]
}
@@ -12728,22 +18003,34 @@
"name": "disputeId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ResolveDisputeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ResolveDisputeDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Dispute resolved" },
- "404": { "description": "Dispute not found" }
+ "200": {
+ "description": "Dispute resolved"
+ },
+ "404": {
+ "description": "Dispute not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Resolve a dispute with a final decision",
"tags": ["Admin"]
}
@@ -12756,22 +18043,34 @@
"name": "disputeId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/EscalateDisputeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/EscalateDisputeDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Dispute escalated" },
- "404": { "description": "Dispute not found" }
+ "200": {
+ "description": "Dispute escalated"
+ },
+ "404": {
+ "description": "Dispute not found"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Escalate dispute to arbitration",
"tags": ["Admin"]
}
@@ -12784,17 +18083,31 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "List pending manual project submissions",
"tags": ["Admin Manual Projects"]
}
@@ -12808,11 +18121,21 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Approve a pending manual project",
"tags": ["Admin Manual Projects"]
}
@@ -12826,7 +18149,9 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12839,8 +18164,16 @@
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Reject a pending manual project",
"tags": ["Admin Manual Projects"]
}
@@ -12854,7 +18187,9 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -12867,8 +18202,16 @@
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Request changes for a pending manual project",
"tags": ["Admin Manual Projects"]
}
@@ -12881,17 +18224,31 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "example": 1, "type": "number" }
+ "schema": {
+ "example": 1,
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "example": 20, "type": "number" }
+ "schema": {
+ "example": 20,
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "List pending major project edits",
"tags": ["Admin Project Edits"]
}
@@ -12905,11 +18262,21 @@
"required": true,
"in": "path",
"description": "ProjectEdit ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Approve a pending major project edit",
"tags": ["Admin Project Edits"]
}
@@ -12923,19 +18290,31 @@
"required": true,
"in": "path",
"description": "ProjectEdit ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/RejectProjectEditDto" }
+ "schema": {
+ "$ref": "#/components/schemas/RejectProjectEditDto"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Reject a pending major project edit",
"tags": ["Admin Project Edits"]
}
@@ -12948,7 +18327,10 @@
"name": "timeRange",
"required": false,
"in": "query",
- "schema": { "enum": ["7d", "30d", "90d"], "type": "string" }
+ "schema": {
+ "enum": ["7d", "30d", "90d"],
+ "type": "string"
+ }
}
],
"responses": {
@@ -12956,12 +18338,18 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/AdminWalletStatsDto" }
+ "schema": {
+ "$ref": "#/components/schemas/AdminWalletStatsDto"
+ }
}
}
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get wallet statistics",
"tags": ["Admin Wallets"]
}
@@ -12974,19 +18362,25 @@
"name": "search",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
@@ -13001,7 +18395,11 @@
}
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "List user wallets",
"tags": ["Admin Wallets"]
}
@@ -13014,7 +18412,9 @@
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -13032,7 +18432,11 @@
}
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get wallets for a specific user",
"tags": ["Admin Wallets"]
}
@@ -13045,7 +18449,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -13060,7 +18466,11 @@
}
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Get detailed wallet info",
"tags": ["Admin Wallets"]
}
@@ -13074,13 +18484,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Wallet activated successfully" }
+ "200": {
+ "description": "Wallet activated successfully"
+ }
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Sponsor-activate a wallet by ID (creates account + configured trustlines, default USDC)",
"tags": ["Admin Wallets"]
}
@@ -13094,7 +18512,9 @@
"name": "userId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -13102,7 +18522,11 @@
"description": "Returns activation result for the user (activated, alreadyActivated, addedTrustlines, hash)."
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Sponsor-activate a single user (account + USDC trustline)",
"tags": ["Admin Wallets"]
}
@@ -13116,7 +18540,9 @@
"name": "hackathonId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -13124,7 +18550,11 @@
"description": "Job enqueued. Returns { jobId, hackathonId, estimatedParticipants, statusUrl }."
}
},
- "security": [{ "JWT-auth": [] }],
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Enqueue sponsor activation for every participant of a hackathon",
"tags": ["Admin Wallets"]
}
@@ -13138,11 +18568,21 @@
"name": "jobId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Get status of a sponsor-activation job",
"tags": ["Admin Wallets"]
}
@@ -13152,7 +18592,11 @@
"description": "Returns 200 if the process is alive. No downstream checks. Use for orchestrator restart decisions.",
"operationId": "HealthController_liveness",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "Liveness probe",
"tags": ["Health"]
}
@@ -13170,14 +18614,25 @@
"schema": {
"type": "object",
"properties": {
- "status": { "type": "string", "example": "ok" },
+ "status": {
+ "type": "string",
+ "example": "ok"
+ },
"info": {
"type": "object",
- "example": { "database": { "status": "up" } },
+ "example": {
+ "database": {
+ "status": "up"
+ }
+ },
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
},
"nullable": true
@@ -13188,18 +18643,30 @@
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
},
"nullable": true
},
"details": {
"type": "object",
- "example": { "database": { "status": "up" } },
+ "example": {
+ "database": {
+ "status": "up"
+ }
+ },
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
}
}
@@ -13215,14 +18682,25 @@
"schema": {
"type": "object",
"properties": {
- "status": { "type": "string", "example": "error" },
+ "status": {
+ "type": "string",
+ "example": "error"
+ },
"info": {
"type": "object",
- "example": { "database": { "status": "up" } },
+ "example": {
+ "database": {
+ "status": "up"
+ }
+ },
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
},
"nullable": true
@@ -13238,7 +18716,11 @@
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
},
"nullable": true
@@ -13246,7 +18728,9 @@
"details": {
"type": "object",
"example": {
- "database": { "status": "up" },
+ "database": {
+ "status": "up"
+ },
"redis": {
"status": "down",
"message": "Could not connect"
@@ -13255,7 +18739,11 @@
"additionalProperties": {
"type": "object",
"required": ["status"],
- "properties": { "status": { "type": "string" } },
+ "properties": {
+ "status": {
+ "type": "string"
+ }
+ },
"additionalProperties": true
}
}
@@ -13286,7 +18774,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get current verification state for the authenticated user",
"tags": ["Didit Identity Verification"]
}
@@ -13296,7 +18788,11 @@
"description": "Didit redirects the user here after the hosted KYC flow. We resolve authoritative status from the DB (the query string from Didit is not trusted) and 302 to the frontend with `?state=...`. State maps directly to the values returned by GET /didit/status.",
"operationId": "DiditController_callback",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "Didit redirect target (post-verification)",
"tags": ["Didit Identity Verification"]
}
@@ -13310,7 +18806,9 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateDiditSessionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateDiditSessionDto"
+ }
}
}
},
@@ -13333,9 +18831,15 @@
"400": {
"description": "Missing DIDIT_API_KEY or DIDIT_WORKFLOW_ID"
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create verification session",
"tags": ["Didit Identity Verification"]
}
@@ -13346,8 +18850,12 @@
"operationId": "DiditController_webhook",
"parameters": [],
"responses": {
- "200": { "description": "Webhook accepted" },
- "400": { "description": "Invalid signature" }
+ "200": {
+ "description": "Webhook accepted"
+ },
+ "400": {
+ "description": "Invalid signature"
+ }
},
"summary": "Didit webhook",
"tags": ["Didit Identity Verification"]
@@ -13370,28 +18878,38 @@
"name": "organizationId",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "budgetStroops",
"required": true,
"in": "query",
"description": "Budget in stroops (7-decimal). String to preserve precision.",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "salesOverrideBps",
"required": false,
"in": "query",
"description": "Override fee bps from a sales authority. 0 = waiver.",
- "schema": { "minimum": 0, "maximum": 5000, "type": "number" }
+ "schema": {
+ "minimum": 0,
+ "maximum": 5000,
+ "type": "number"
+ }
},
{
"name": "salesOverrideReason",
"required": false,
"in": "query",
"description": "Free-text reason for the audit log.",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -13414,7 +18932,11 @@
"post": {
"operationId": "AdminOpsController_pause",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["AdminOps"]
}
},
@@ -13422,7 +18944,11 @@
"post": {
"operationId": "AdminOpsController_unpause",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["AdminOps"]
}
},
@@ -13430,7 +18956,11 @@
"post": {
"operationId": "AdminOpsController_setFeeBps",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"tags": ["AdminOps"]
}
},
@@ -13520,7 +19050,11 @@
"200": {
"description": "USD price as a decimal string (6 dp).",
"content": {
- "application/json": { "schema": { "example": "0.117800" } }
+ "application/json": {
+ "schema": {
+ "example": "0.117800"
+ }
+ }
}
}
},
@@ -13537,7 +19071,9 @@
"description": "Full payload for the stepped draft creation",
"content": {
"application/json": {
- "schema": { "type": "object" },
+ "schema": {
+ "type": "object"
+ },
"examples": {
"campaign": {
"value": {
@@ -13644,18 +19180,32 @@
"githubUrl": "https://github.com/example/nft-marketplace",
"projectWebsite": "https://nft-marketplace.example.com",
"demoVideo": "https://example.com/demo.mp4",
- "socialLinks": { "twitter": "https://twitter.com/example" },
- "contact": { "primary": "@alex123" },
+ "socialLinks": {
+ "twitter": "https://twitter.com/example"
+ },
+ "contact": {
+ "primary": "@alex123"
+ },
"tags": ["NFT", "React"],
- "draftData": { "isCampaign": false }
+ "draftData": {
+ "isCampaign": false
+ }
}
}
}
}
}
},
- "responses": { "201": { "description": "Draft created successfully" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "201": {
+ "description": "Draft created successfully"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a project draft (stepped form)",
"tags": ["projects"]
}
@@ -13669,7 +19219,9 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -13677,7 +19229,9 @@
"description": "Full payload for stepped draft autosave",
"content": {
"application/json": {
- "schema": { "type": "object" },
+ "schema": {
+ "type": "object"
+ },
"examples": {
"campaign": {
"value": {
@@ -13784,18 +19338,32 @@
"githubUrl": "https://github.com/example/nft-marketplace",
"projectWebsite": "https://nft-marketplace.example.com",
"demoVideo": "https://example.com/demo.mp4",
- "socialLinks": { "twitter": "https://twitter.com/example" },
- "contact": { "primary": "@alex123" },
+ "socialLinks": {
+ "twitter": "https://twitter.com/example"
+ },
+ "contact": {
+ "primary": "@alex123"
+ },
"tags": ["NFT", "React"],
- "draftData": { "isCampaign": false }
+ "draftData": {
+ "isCampaign": false
+ }
}
}
}
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Update a project draft (stepped form autosave)",
"tags": ["projects"]
}
@@ -13804,7 +19372,11 @@
"get": {
"operationId": "ProjectsController_listPublicProjects",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "List public projects (PRD products directory)",
"tags": ["projects"]
}
@@ -13817,10 +19389,16 @@
"name": "search",
"required": false,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "Search public projects",
"tags": ["projects"]
}
@@ -13829,7 +19407,11 @@
"get": {
"operationId": "ProjectsController_listFeaturedProjects",
"parameters": [],
- "responses": { "200": { "description": "" } },
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
"summary": "List featured projects",
"tags": ["projects"]
}
@@ -13842,19 +19424,31 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/Function" }
+ "schema": {
+ "$ref": "#/components/schemas/Function"
+ }
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit a major/minor edit for your project",
"tags": ["projects"]
},
@@ -13865,11 +19459,21 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "List edit history for your project",
"tags": ["projects"]
}
@@ -13883,7 +19487,9 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -13894,18 +19500,37 @@
"schema": {
"type": "object",
"properties": {
- "isCampaign": { "type": "boolean", "example": true }
+ "isCampaign": {
+ "type": "boolean",
+ "example": true
+ }
}
},
"examples": {
- "publishCampaign": { "value": { "isCampaign": true } },
- "publishNonCampaign": { "value": { "isCampaign": false } }
+ "publishCampaign": {
+ "value": {
+ "isCampaign": true
+ }
+ },
+ "publishNonCampaign": {
+ "value": {
+ "isCampaign": false
+ }
+ }
}
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish/submit a project draft (Review & Submit)",
"tags": ["projects"]
}
@@ -13918,23 +19543,37 @@
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "offset",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "status",
"required": true,
"in": "query",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "List my projects",
"tags": ["projects"]
}
@@ -13948,11 +19587,21 @@
"required": true,
"in": "path",
"description": "Project slug",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Get public project by slug",
"tags": ["projects"]
}
@@ -13966,15 +19615,329 @@
"required": true,
"in": "path",
"description": "Project ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Get my project by ID",
"tags": ["projects"]
}
},
+ "/api/organizations/{organizationId}/bounties/draft/{id}": {
+ "delete": {
+ "description": "Deletes an unpublished bounty (draft / draft_awaiting_funding).",
+ "operationId": "OrganizationBountiesDraftsController_deleteDraft",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "Bounty draft id",
+ "schema": {
+ "example": "bnt_123",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Draft deleted"
+ },
+ "400": {
+ "description": "Draft not found, not authorized, or not an unpublished draft"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Delete a bounty draft",
+ "tags": ["Organization Bounties - Drafts"]
+ },
+ "patch": {
+ "description": "Applies any subset of wizard sections in a single PATCH. Send one section for a per-step \"Continue\", or several for \"Save draft\". Each present section is validated and transformed independently, then merged into one write. The reward section replaces the prize tiers.",
+ "operationId": "OrganizationBountiesDraftsController_updateDraft",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "Bounty draft id",
+ "schema": {
+ "example": "bnt_123",
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateBountyDraftDto"
+ },
+ "examples": {
+ "singleSection": {
+ "summary": "Update one section (per-step Continue)",
+ "value": {
+ "scope": {
+ "title": "Build a Soroban faucet bot",
+ "description": "A Discord bot that drips testnet tokens on request."
+ }
+ }
+ },
+ "multipleSections": {
+ "summary": "Update several sections (Save draft)",
+ "value": {
+ "mode": {
+ "claimType": "COMPETITION",
+ "entryType": "APPLICATION_LIGHT"
+ },
+ "submission": {
+ "submissionDeadline": "2026-12-01T00:00:00Z",
+ "applicationWindowCloseAt": "2026-11-01T00:00:00Z",
+ "shortlistSize": 3
+ },
+ "reward": {
+ "rewardCurrency": "USDC",
+ "prizeTiers": [
+ {
+ "position": 1,
+ "amount": "500"
+ },
+ {
+ "position": 2,
+ "amount": "250"
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Draft updated",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BountyDraftResponseDto"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Validation failed for one or more sections"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Update one or more sections of a bounty draft",
+ "tags": ["Organization Bounties - Drafts"]
+ },
+ "get": {
+ "description": "Returns the current section-keyed state of a bounty draft.",
+ "operationId": "OrganizationBountiesDraftsController_getDraft",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "required": true,
+ "in": "path",
+ "description": "Bounty draft id",
+ "schema": {
+ "example": "bnt_123",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Draft retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BountyDraftResponseDto"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Get a bounty draft for resume",
+ "tags": ["Organization Bounties - Drafts"]
+ }
+ },
+ "/api/organizations/{organizationId}/bounties": {
+ "get": {
+ "description": "Lists bounties for an organization, newest first.",
+ "operationId": "OrganizationBountiesDraftsController_getOrganizationBounties",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ },
+ {
+ "name": "page",
+ "required": true,
+ "in": "query",
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "limit",
+ "required": true,
+ "in": "query",
+ "schema": {
+ "type": "number"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Bounties retrieved"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Get an organization's published bounties",
+ "tags": ["Organization Bounties - Drafts"]
+ }
+ },
+ "/api/organizations/{organizationId}/bounties/draft": {
+ "post": {
+ "description": "Creates an empty bounty in draft status that organization members can edit section by section through the Configure wizard.",
+ "operationId": "OrganizationBountiesDraftsController_createDraft",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "Draft created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BountyDraftResponseDto"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "User is not a member of the organization"
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Create a new bounty draft for an organization",
+ "tags": ["Organization Bounties - Drafts"]
+ }
+ },
+ "/api/organizations/{organizationId}/bounties/drafts": {
+ "get": {
+ "description": "Lists draft and draft_awaiting_funding bounties for an organization.",
+ "operationId": "OrganizationBountiesDraftsController_getOrganizationDrafts",
+ "parameters": [
+ {
+ "name": "organizationId",
+ "required": true,
+ "in": "path",
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Drafts retrieved",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BountyDraftResponseDto"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Get an organization's bounty drafts",
+ "tags": ["Organization Bounties - Drafts"]
+ }
+ },
"/api/organizations/{organizationId}/bounties/{id}/escrow/publish": {
"post": {
"description": "Validates the draft, transitions it to draft_awaiting_funding, and returns an unsigned XDR (EXTERNAL) or the op in PENDING_CONFIRM (MANAGED). Reconciliation transitions the bounty to OPEN on success.",
@@ -13984,14 +19947,20 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Bounty draft id",
- "schema": { "example": "bnt_1234567890", "type": "string" }
+ "schema": {
+ "example": "bnt_1234567890",
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14019,7 +19988,11 @@
"description": "Validation failed or bounty not in draft status"
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish a bounty draft to the events contract",
"tags": ["Organization Bounties - Escrow (v2)"]
}
@@ -14033,21 +20006,28 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CancelBountyEscrowDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CancelBountyEscrowDto"
+ }
}
}
},
@@ -14063,7 +20043,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel an active bounty",
"tags": ["Organization Bounties - Escrow (v2)"]
}
@@ -14077,14 +20061,19 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14109,7 +20098,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Select winners for a bounty",
"tags": ["Organization Bounties - Escrow (v2)"]
}
@@ -14122,21 +20115,27 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14161,7 +20160,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit signed XDR for a previously-built bounty escrow op",
"tags": ["Organization Bounties - Escrow (v2)"]
}
@@ -14174,21 +20177,27 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -14203,7 +20212,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Read the current state of a bounty escrow op",
"tags": ["Organization Bounties - Escrow (v2)"]
}
@@ -14218,14 +20231,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ApplyBountyDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ApplyBountyDto"
+ }
}
}
},
@@ -14241,7 +20258,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Apply to a bounty",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14256,7 +20277,9 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14281,7 +20304,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Withdraw a bounty application",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14296,14 +20323,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SubmitBountyDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SubmitBountyDto"
+ }
}
}
},
@@ -14319,7 +20350,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit work for a bounty",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14333,14 +20368,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/WithdrawSubmissionDto" }
+ "schema": {
+ "$ref": "#/components/schemas/WithdrawSubmissionDto"
+ }
}
}
},
@@ -14356,7 +20395,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Withdraw a bounty submission anchor",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14371,14 +20414,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ContributeBountyDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ContributeBountyDto"
+ }
}
}
},
@@ -14394,7 +20441,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Contribute funds to a bounty pool",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14408,14 +20459,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14440,7 +20495,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit signed XDR for a previously-built participant op",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14454,14 +20513,18 @@
"required": true,
"in": "path",
"description": "Bounty id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "description": "EscrowOp cuid",
- "schema": { "type": "string" }
+ "description": "EscrowOp uuid",
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -14476,7 +20539,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Read the state of a participant op",
"tags": ["Bounties - Participant Escrow (v2)"]
}
@@ -14489,7 +20556,9 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14502,9 +20571,17 @@
}
}
},
- "responses": { "201": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Submit an application for a LIGHT/HEAVY bounty",
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Submit an application for a application bounty",
"tags": ["Bounty v2 - Applications"]
}
},
@@ -14516,11 +20593,21 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Read the caller's application for this bounty",
"tags": ["Bounty v2 - Applications"]
}
@@ -14533,13 +20620,17 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "appId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14552,8 +20643,16 @@
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Edit a SUBMITTED application (before shortlist)",
"tags": ["Bounty v2 - Applications"]
},
@@ -14564,17 +20663,29 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "appId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
"summary": "Withdraw a SUBMITTED application",
"tags": ["Bounty v2 - Applications"]
}
@@ -14587,7 +20698,9 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "status",
@@ -14612,34 +20725,54 @@
"schema": {}
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List applications on a bounty",
"tags": ["Bounty v2 - Organizer Shortlist"]
}
},
"/api/organizations/{organizationId}/bounties/{bountyId}/v2/applications/select": {
"post": {
- "operationId": "OrganizationBountyShortlistController_selectForPick",
+ "operationId": "OrganizationBountyShortlistController_selectForSingleClaim",
"parameters": [
{
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SelectForPickDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SelectForSingleClaimDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Select a single application (Curated Pick / Pitched Pick)",
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Select a single application (application (light) single claim / application (full) single claim)",
"tags": ["Bounty v2 - Organizer Shortlist"]
}
},
@@ -14651,20 +20784,32 @@
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CreateShortlistDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CreateShortlistDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Approve a shortlist (Curated Showdown / Pitched Showdown)",
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Approve a shortlist (application (light) competition / application (full) competition)",
"tags": ["Bounty v2 - Organizer Shortlist"]
}
},
@@ -14676,69 +20821,105 @@
"name": "appId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/DeclineApplicationDto" }
+ "schema": {
+ "$ref": "#/components/schemas/DeclineApplicationDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Decline an application with optional reason",
"tags": ["Bounty v2 - Organizer Shortlist"]
}
},
- "/api/bounties/{bountyId}/v2/showdown/join": {
+ "/api/bounties/{bountyId}/v2/competition/join": {
"post": {
- "operationId": "BountyShowdownJoinController_join",
+ "operationId": "BountyCompetitionJoinController_join",
"parameters": [
{
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/JoinShowdownDto" }
+ "schema": {
+ "$ref": "#/components/schemas/JoinCompetitionDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Join an Open Showdown bounty",
- "tags": ["Bounty v2 - Open Showdown"]
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Join an open competition bounty",
+ "tags": ["Bounty v2 - open competition"]
},
"delete": {
- "operationId": "BountyShowdownJoinController_leave",
+ "operationId": "BountyCompetitionJoinController_leave",
"parameters": [
{
"name": "bountyId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/JoinShowdownDto" }
+ "schema": {
+ "$ref": "#/components/schemas/JoinCompetitionDto"
+ }
}
}
},
- "responses": { "200": { "description": "" } },
- "security": [{ "bearer": [] }],
- "summary": "Leave an Open Showdown before submitting",
- "tags": ["Bounty v2 - Open Showdown"]
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
+ "summary": "Leave an open competition before submitting",
+ "tags": ["Bounty v2 - open competition"]
}
},
"/api/bounties": {
@@ -14749,16 +20930,30 @@
"name": "page",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
+ },
+ {
+ "name": "search",
+ "required": false,
+ "in": "query",
+ "schema": {}
+ },
+ {
+ "name": "status",
+ "required": false,
+ "in": "query",
+ "schema": {}
},
- { "name": "search", "required": false, "in": "query", "schema": {} },
- { "name": "status", "required": false, "in": "query", "schema": {} },
{
"name": "organizationId",
"required": false,
@@ -14771,7 +20966,9 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/BountyPublicListDto" }
+ "schema": {
+ "$ref": "#/components/schemas/BountyPublicListDto"
+ }
}
}
}
@@ -14788,7 +20985,9 @@
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -14796,7 +20995,9 @@
"description": "",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/BountyPublicDto" }
+ "schema": {
+ "$ref": "#/components/schemas/BountyPublicDto"
+ }
}
}
}
@@ -14814,21 +21015,28 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "example": "org_1234567890", "type": "string" }
+ "schema": {
+ "example": "org_1234567890",
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
"description": "Grant id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/PublishGrantEscrowDto" }
+ "schema": {
+ "$ref": "#/components/schemas/PublishGrantEscrowDto"
+ }
}
}
},
@@ -14843,9 +21051,15 @@
}
}
},
- "400": { "description": "Draft not in DRAFT status" }
+ "400": {
+ "description": "Draft not in DRAFT status"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Publish a grant draft to the events contract",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -14858,20 +21072,26 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/CancelGrantEscrowDto" }
+ "schema": {
+ "$ref": "#/components/schemas/CancelGrantEscrowDto"
+ }
}
}
},
@@ -14887,7 +21107,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Cancel an active grant",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -14901,20 +21125,26 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SelectGrantWinnersDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SelectGrantWinnersDto"
+ }
}
}
},
@@ -14930,7 +21160,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Select grant recipients",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -14944,13 +21178,17 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -14975,7 +21213,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Pay out a specific milestone for a recipient",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -14988,19 +21230,25 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
@@ -15025,7 +21273,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Submit signed XDR for a grant op",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -15038,19 +21290,25 @@
"name": "organizationId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "id",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "opRowId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -15065,7 +21323,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Read the state of a grant op",
"tags": ["Organization Grants - Escrow (v2)"]
}
@@ -15080,14 +21342,18 @@
"required": true,
"in": "path",
"description": "Grant id",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/ContributeGrantDto" }
+ "schema": {
+ "$ref": "#/components/schemas/ContributeGrantDto"
+ }
}
}
},
@@ -15103,7 +21369,11 @@
}
}
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Contribute funds to a grant pool",
"tags": ["Grants - Contribute (v2)"]
}
@@ -15118,21 +21388,30 @@
"required": false,
"in": "query",
"description": "Pillar-specific status filter (open, closed, in_progress).",
- "schema": { "example": "open", "type": "string" }
+ "schema": {
+ "example": "open",
+ "type": "string"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Case-insensitive substring match against project title and summary.",
- "schema": { "example": "governance", "type": "string" }
+ "schema": {
+ "example": "governance",
+ "type": "string"
+ }
},
{
"name": "category",
"required": false,
"in": "query",
"description": "Filter by the underlying project category.",
- "schema": { "example": "defi", "type": "string" }
+ "schema": {
+ "example": "defi",
+ "type": "string"
+ }
},
{
"name": "page",
@@ -15198,21 +21477,30 @@
"required": false,
"in": "query",
"description": "Pillar-specific status filter. Adapters match case-insensitively against their own enum and return [] when no value matches.",
- "schema": { "example": "open", "type": "string" }
+ "schema": {
+ "example": "open",
+ "type": "string"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Case-insensitive substring match against title and summary across adapters.",
- "schema": { "example": "governance", "type": "string" }
+ "schema": {
+ "example": "governance",
+ "type": "string"
+ }
},
{
"name": "tags",
"required": false,
"in": "query",
"description": "Comma-separated tag list. Pillar-aware: bounty has no tag field and returns [] for any tags filter.",
- "schema": { "example": "stellar,defi", "type": "string" }
+ "schema": {
+ "example": "stellar,defi",
+ "type": "string"
+ }
},
{
"name": "sort",
@@ -15275,7 +21563,9 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/SubscribeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/SubscribeDto"
+ }
}
}
},
@@ -15293,9 +21583,15 @@
}
}
},
- "400": { "description": "Invalid tags provided" },
- "409": { "description": "Email is already subscribed" },
- "429": { "description": "Too many requests — rate limited" }
+ "400": {
+ "description": "Invalid tags provided"
+ },
+ "409": {
+ "description": "Email is already subscribed"
+ },
+ "429": {
+ "description": "Too many requests — rate limited"
+ }
},
"summary": "Subscribe to the newsletter",
"tags": ["Newsletter"]
@@ -15311,13 +21607,21 @@
"required": true,
"in": "path",
"description": "Confirmation token received via email",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "302": { "description": "Redirects to frontend confirmation page" },
- "400": { "description": "Confirmation token has expired" },
- "404": { "description": "Invalid or expired confirmation token" }
+ "302": {
+ "description": "Redirects to frontend confirmation page"
+ },
+ "400": {
+ "description": "Confirmation token has expired"
+ },
+ "404": {
+ "description": "Invalid or expired confirmation token"
+ }
},
"summary": "Confirm newsletter subscription",
"tags": ["Newsletter"]
@@ -15333,14 +21637,18 @@
"required": true,
"in": "path",
"description": "Unsubscribe token from the email footer",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
"302": {
"description": "Redirects to frontend unsubscribe confirmation page"
},
- "404": { "description": "Invalid unsubscribe link" }
+ "404": {
+ "description": "Invalid unsubscribe link"
+ }
},
"summary": "Unsubscribe by token",
"tags": ["Newsletter"]
@@ -15355,13 +21663,19 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UnsubscribeDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UnsubscribeDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Successfully unsubscribed" },
- "404": { "description": "Subscriber not found" }
+ "200": {
+ "description": "Successfully unsubscribed"
+ },
+ "404": {
+ "description": "Subscriber not found"
+ }
},
"summary": "Unsubscribe by email",
"tags": ["Newsletter"]
@@ -15376,14 +21690,22 @@
"required": true,
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/UpdatePreferencesDto" }
+ "schema": {
+ "$ref": "#/components/schemas/UpdatePreferencesDto"
+ }
}
}
},
"responses": {
- "200": { "description": "Preferences updated successfully" },
- "400": { "description": "Invalid tags provided" },
- "404": { "description": "Subscriber not found" }
+ "200": {
+ "description": "Preferences updated successfully"
+ },
+ "400": {
+ "description": "Invalid tags provided"
+ },
+ "404": {
+ "description": "Subscriber not found"
+ }
},
"summary": "Update subscription preferences",
"tags": ["Newsletter"]
@@ -15399,18 +21721,24 @@
"required": true,
"in": "path",
"description": "Campaign ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "subscriberId",
"required": true,
"in": "path",
"description": "Subscriber ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Returns 1x1 transparent GIF" }
+ "200": {
+ "description": "Returns 1x1 transparent GIF"
+ }
},
"summary": "Track email open",
"tags": ["Newsletter"]
@@ -15426,14 +21754,18 @@
"required": true,
"in": "path",
"description": "Campaign ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "subscriberId",
"required": true,
"in": "path",
"description": "Subscriber ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "url",
@@ -15447,7 +21779,9 @@
}
],
"responses": {
- "302": { "description": "Redirects to the target URL" }
+ "302": {
+ "description": "Redirects to the target URL"
+ }
},
"summary": "Track email link click",
"tags": ["Newsletter"]
@@ -15473,35 +21807,48 @@
"required": false,
"in": "query",
"description": "Filter by source",
- "schema": { "example": "website", "type": "string" }
+ "schema": {
+ "example": "website",
+ "type": "string"
+ }
},
{
"name": "tags",
"required": false,
"in": "query",
"description": "Filter by tags (comma-separated)",
- "schema": { "example": "updates,hackathons", "type": "string" }
+ "schema": {
+ "example": "updates,hackathons",
+ "type": "string"
+ }
},
{
"name": "search",
"required": false,
"in": "query",
"description": "Search by email or name",
- "schema": { "example": "john", "type": "string" }
+ "schema": {
+ "example": "john",
+ "type": "string"
+ }
},
{
"name": "page",
"required": false,
"in": "query",
"description": "Page number (default: 1)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page (default: 50)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
@@ -15520,9 +21867,15 @@
}
}
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List newsletter subscribers",
"tags": ["Newsletter"]
}
@@ -15546,7 +21899,12 @@
"unsubscribed": 8,
"bounced": 2
},
- "bySource": [{ "source": "website", "count": 60 }],
+ "bySource": [
+ {
+ "source": "website",
+ "count": 60
+ }
+ ],
"campaigns": {
"total": 5,
"totalSent": 400,
@@ -15558,9 +21916,15 @@
}
}
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get newsletter statistics",
"tags": ["Newsletter"]
}
@@ -15585,17 +21949,28 @@
"required": false,
"in": "query",
"description": "Filter by tags (comma-separated)",
- "schema": { "example": "updates,hackathons", "type": "string" }
+ "schema": {
+ "example": "updates,hackathons",
+ "type": "string"
+ }
}
],
"responses": {
"200": {
"description": "CSV file downloaded",
- "content": { "text/csv": {} }
+ "content": {
+ "text/csv": {}
+ }
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Export subscribers as CSV",
"tags": ["Newsletter"]
}
@@ -15610,7 +21985,9 @@
"required": true,
"in": "path",
"description": "Subscriber ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -15618,14 +21995,26 @@
"description": "Subscriber deleted successfully",
"content": {
"application/json": {
- "schema": { "example": { "success": true } }
+ "schema": {
+ "example": {
+ "success": true
+ }
+ }
}
}
},
- "401": { "description": "Unauthorized" },
- "404": { "description": "Subscriber not found" }
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "Subscriber not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Delete a subscriber",
"tags": ["Newsletter"]
}
@@ -15646,11 +22035,21 @@
}
},
"responses": {
- "201": { "description": "Campaign created successfully" },
- "400": { "description": "Invalid tags provided" },
- "401": { "description": "Unauthorized" }
+ "201": {
+ "description": "Campaign created successfully"
+ },
+ "400": {
+ "description": "Invalid tags provided"
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Create a new campaign",
"tags": ["Newsletter"]
},
@@ -15663,14 +22062,18 @@
"required": false,
"in": "query",
"description": "Page number (default: 1)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
},
{
"name": "limit",
"required": false,
"in": "query",
"description": "Items per page (default: 20)",
- "schema": { "type": "number" }
+ "schema": {
+ "type": "number"
+ }
}
],
"responses": {
@@ -15689,9 +22092,15 @@
}
}
},
- "401": { "description": "Unauthorized" }
+ "401": {
+ "description": "Unauthorized"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "List newsletter campaigns",
"tags": ["Newsletter"]
}
@@ -15706,15 +22115,27 @@
"required": true,
"in": "path",
"description": "Campaign ID",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
- "200": { "description": "Campaign details retrieved successfully" },
- "401": { "description": "Unauthorized" },
- "404": { "description": "Campaign not found" }
+ "200": {
+ "description": "Campaign details retrieved successfully"
+ },
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Get campaign details",
"tags": ["Newsletter"]
}
@@ -15729,7 +22150,9 @@
"required": true,
"in": "path",
"description": "Campaign ID to send",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -15738,7 +22161,11 @@
"content": {
"application/json": {
"schema": {
- "example": { "sentCount": 80, "failedCount": 2, "total": 82 }
+ "example": {
+ "sentCount": 80,
+ "failedCount": 2,
+ "total": 82
+ }
}
}
}
@@ -15746,10 +22173,18 @@
"400": {
"description": "Campaign already sent or currently sending"
},
- "401": { "description": "Unauthorized" },
- "404": { "description": "Campaign not found" }
+ "401": {
+ "description": "Unauthorized"
+ },
+ "404": {
+ "description": "Campaign not found"
+ }
},
- "security": [{ "bearer": [] }],
+ "security": [
+ {
+ "bearer": []
+ }
+ ],
"summary": "Send a campaign",
"tags": ["Newsletter"]
}
@@ -15758,8 +22193,16 @@
"get": {
"operationId": "DlqAdminController_getDepth",
"parameters": [],
- "responses": { "200": { "description": "Total parked jobs" } },
- "security": [{ "JWT-auth": [] }],
+ "responses": {
+ "200": {
+ "description": "Total parked jobs"
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
+ }
+ ],
"summary": "Current DLQ depth (admin only)",
"tags": ["Admin / Queues"]
}
@@ -15773,11 +22216,21 @@
"required": false,
"in": "query",
"description": "Max entries to return (1 to 200, default 50)",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "List parked DLQ entries (admin only)",
"tags": ["Admin / Queues"]
}
@@ -15790,11 +22243,21 @@
"name": "jobId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "200": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Fetch a single parked DLQ entry (admin only)",
"tags": ["Admin / Queues"]
}
@@ -15808,11 +22271,21 @@
"name": "jobId",
"required": true,
"in": "path",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": ""
+ }
+ },
+ "security": [
+ {
+ "JWT-auth": []
}
],
- "responses": { "201": { "description": "" } },
- "security": [{ "JWT-auth": [] }],
"summary": "Re-enqueue a parked DLQ entry on its original queue",
"tags": ["Admin / Queues"]
}
@@ -15822,7 +22295,11 @@
"tags": ["Default"],
"description": "Sign in with a social provider",
"operationId": "socialSignIn",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -15835,12 +22312,16 @@
"type": ["string", "null"],
"description": "Callback URL to redirect to after the user has signed in"
},
- "newUserCallbackURL": { "type": ["string", "null"] },
+ "newUserCallbackURL": {
+ "type": ["string", "null"]
+ },
"errorCallbackURL": {
"type": ["string", "null"],
"description": "Callback URL to redirect to if an error happens"
},
- "provider": { "type": "string" },
+ "provider": {
+ "type": "string"
+ },
"disableRedirect": {
"type": ["boolean", "null"],
"description": "Disable automatic redirection to the provider. Useful for handling the redirection yourself"
@@ -15883,7 +22364,9 @@
"type": ["string", "null"],
"description": "The login hint to use for the authorization code request"
},
- "additionalData": { "type": ["string", "null"] }
+ "additionalData": {
+ "type": ["string", "null"]
+ }
},
"required": ["provider"]
}
@@ -15899,13 +22382,20 @@
"type": "object",
"description": "Session response when idToken is provided",
"properties": {
- "token": { "type": "string" },
+ "token": {
+ "type": "string"
+ },
"user": {
"type": "object",
"$ref": "#/components/schemas/User"
},
- "url": { "type": "string" },
- "redirect": { "type": "boolean", "enum": [false] }
+ "url": {
+ "type": "string"
+ },
+ "redirect": {
+ "type": "boolean",
+ "enum": [false]
+ }
},
"required": ["redirect", "token", "user"]
}
@@ -15917,7 +22407,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -15929,7 +22423,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -15941,7 +22439,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -15952,7 +22454,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -15963,7 +22469,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -15974,7 +22484,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -15988,7 +22502,11 @@
"tags": ["Default"],
"description": "Get the current session",
"operationId": "getSession",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -15999,8 +22517,12 @@
"type": "object",
"nullable": true,
"properties": {
- "session": { "$ref": "#/components/schemas/Session" },
- "user": { "$ref": "#/components/schemas/User" }
+ "session": {
+ "$ref": "#/components/schemas/Session"
+ },
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
},
"required": ["session", "user"]
}
@@ -16012,7 +22534,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16024,7 +22550,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16036,7 +22566,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16047,7 +22581,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16058,7 +22596,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16069,7 +22611,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16083,12 +22629,19 @@
"tags": ["Default"],
"description": "Sign out the current user",
"operationId": "signOut",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
"application/json": {
- "schema": { "type": "object", "properties": {} }
+ "schema": {
+ "type": "object",
+ "properties": {}
+ }
}
}
},
@@ -16099,7 +22652,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -16109,7 +22666,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16121,7 +22682,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16133,7 +22698,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16144,7 +22713,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16155,7 +22728,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16166,7 +22743,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16180,7 +22761,11 @@
"tags": ["Default"],
"description": "Sign up a user using email and password",
"operationId": "signUpWithEmailAndPassword",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -16288,7 +22873,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16300,7 +22889,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16312,7 +22905,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16323,7 +22920,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16335,7 +22936,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
}
@@ -16345,7 +22950,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16356,7 +22965,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16370,7 +22983,11 @@
"tags": ["Default"],
"description": "Sign in with email and password",
"operationId": "signInEmail",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -16411,12 +23028,18 @@
"type": "object",
"description": "Session response when idToken is provided",
"properties": {
- "redirect": { "type": "boolean", "enum": [false] },
+ "redirect": {
+ "type": "boolean",
+ "enum": [false]
+ },
"token": {
"type": "string",
"description": "Session token"
},
- "url": { "type": "string", "nullable": true },
+ "url": {
+ "type": "string",
+ "nullable": true
+ },
"user": {
"type": "object",
"$ref": "#/components/schemas/User"
@@ -16432,7 +23055,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16444,7 +23071,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16456,7 +23087,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16467,7 +23102,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16478,7 +23117,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16489,7 +23132,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16503,7 +23150,11 @@
"tags": ["Default"],
"description": "Reset the password for a user",
"operationId": "resetPassword",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -16533,7 +23184,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -16543,7 +23198,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16555,7 +23214,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16567,7 +23230,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16578,7 +23245,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16589,7 +23260,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16600,7 +23275,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16614,7 +23293,11 @@
"tags": ["Default"],
"description": "Verify the current user's password",
"operationId": "verifyPassword",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -16640,7 +23323,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -16650,7 +23337,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16662,7 +23353,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16674,7 +23369,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16685,7 +23384,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16696,7 +23399,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16707,7 +23414,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16720,21 +23431,29 @@
"get": {
"tags": ["Default"],
"description": "Verify the email of the user",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "token",
"in": "query",
"description": "The token to verify the email",
"required": true,
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "callbackURL",
"in": "query",
"description": "The URL to redirect to after email verification",
"required": false,
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -16764,7 +23483,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16776,7 +23499,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16788,7 +23515,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16799,7 +23530,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16810,7 +23545,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16821,7 +23560,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16835,7 +23578,11 @@
"tags": ["Default"],
"description": "Send a verification email to the user",
"operationId": "sendVerificationEmail",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -16900,7 +23647,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -16912,7 +23663,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16923,7 +23678,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16934,7 +23693,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16945,7 +23708,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -16958,7 +23725,11 @@
"post": {
"tags": ["Default"],
"operationId": "changeEmail",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -17014,7 +23785,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17026,7 +23801,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17038,7 +23817,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17049,7 +23832,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17061,7 +23848,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
}
@@ -17071,7 +23862,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17082,7 +23877,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17096,7 +23895,11 @@
"tags": ["Default"],
"description": "Change the password of the user",
"operationId": "changePassword",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -17193,7 +23996,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17205,7 +24012,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17217,7 +24028,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17228,7 +24043,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17239,7 +24058,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17250,7 +24073,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17264,7 +24091,11 @@
"tags": ["Default"],
"description": "Update the current user",
"operationId": "updateUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -17308,7 +24139,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17320,7 +24155,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17332,7 +24171,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17343,7 +24186,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17354,7 +24201,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17365,7 +24216,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17379,7 +24234,11 @@
"tags": ["Default"],
"description": "Delete the user",
"operationId": "deleteUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -17432,7 +24291,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17444,7 +24307,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17456,7 +24323,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17467,7 +24338,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17478,7 +24353,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17489,7 +24368,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17503,7 +24386,11 @@
"tags": ["Default"],
"description": "Send a password reset email to the user",
"operationId": "requestPasswordReset",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -17534,8 +24421,12 @@
"schema": {
"type": "object",
"properties": {
- "status": { "type": "boolean" },
- "message": { "type": "string" }
+ "status": {
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ }
}
}
}
@@ -17546,7 +24437,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17558,7 +24453,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17570,7 +24469,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17581,7 +24484,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17592,7 +24499,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17603,7 +24514,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17617,21 +24532,29 @@
"tags": ["Default"],
"description": "Redirects the user to the callback URL with the token",
"operationId": "resetPasswordCallback",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "token",
"in": "path",
"required": true,
"description": "The token to reset the password",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
},
{
"name": "callbackURL",
"in": "query",
"required": true,
"description": "The URL to redirect the user to reset their password",
- "schema": { "type": "string" }
+ "schema": {
+ "type": "string"
+ }
}
],
"responses": {
@@ -17641,7 +24564,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "token": { "type": "string" } }
+ "properties": {
+ "token": {
+ "type": "string"
+ }
+ }
}
}
}
@@ -17651,7 +24578,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17663,7 +24594,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17675,7 +24610,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17686,7 +24625,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17697,7 +24640,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17708,7 +24655,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17722,7 +24673,11 @@
"tags": ["Default"],
"description": "List all active sessions for the user",
"operationId": "listUserSessions",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -17731,7 +24686,9 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/Session" }
+ "items": {
+ "$ref": "#/components/schemas/Session"
+ }
}
}
}
@@ -17741,7 +24698,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17753,7 +24714,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17765,7 +24730,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17776,7 +24745,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17787,7 +24760,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17798,7 +24775,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17811,7 +24792,11 @@
"post": {
"tags": ["Default"],
"description": "Revoke a single session",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -17852,7 +24837,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17864,7 +24853,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17876,7 +24869,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17887,7 +24884,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17898,7 +24899,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17909,7 +24914,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17922,12 +24931,19 @@
"post": {
"tags": ["Default"],
"description": "Revoke all sessions for the user",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
"application/json": {
- "schema": { "type": "object", "properties": {} }
+ "schema": {
+ "type": "object",
+ "properties": {}
+ }
}
}
},
@@ -17954,7 +24970,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17966,7 +24986,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -17978,7 +25002,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -17989,7 +25017,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18000,7 +25032,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18011,7 +25047,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18024,12 +25064,19 @@
"post": {
"tags": ["Default"],
"description": "Revoke all other sessions for the user except the current one",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
"application/json": {
- "schema": { "type": "object", "properties": {} }
+ "schema": {
+ "type": "object",
+ "properties": {}
+ }
}
}
},
@@ -18056,7 +25103,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18068,7 +25119,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18080,7 +25135,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18091,7 +25150,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18102,7 +25165,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18113,7 +25180,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18127,7 +25198,11 @@
"tags": ["Default"],
"description": "Link a social account to the user",
"operationId": "linkSocialAccount",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -18140,19 +25215,33 @@
"type": ["string", "null"],
"description": "The URL to redirect to after the user has signed in"
},
- "provider": { "type": "string" },
+ "provider": {
+ "type": "string"
+ },
"idToken": {
"type": ["object", "null"],
"properties": {
- "token": { "type": "string" },
- "nonce": { "type": ["string", "null"] },
- "accessToken": { "type": ["string", "null"] },
- "refreshToken": { "type": ["string", "null"] },
- "scopes": { "type": ["array", "null"] }
+ "token": {
+ "type": "string"
+ },
+ "nonce": {
+ "type": ["string", "null"]
+ },
+ "accessToken": {
+ "type": ["string", "null"]
+ },
+ "refreshToken": {
+ "type": ["string", "null"]
+ },
+ "scopes": {
+ "type": ["array", "null"]
+ }
},
"required": ["token"]
},
- "requestSignUp": { "type": ["boolean", "null"] },
+ "requestSignUp": {
+ "type": ["boolean", "null"]
+ },
"scopes": {
"type": ["array", "null"],
"description": "Additional scopes to request from the provider"
@@ -18165,7 +25254,9 @@
"type": ["boolean", "null"],
"description": "Disable automatic redirection to the provider. Useful for handling the redirection yourself"
},
- "additionalData": { "type": ["string", "null"] }
+ "additionalData": {
+ "type": ["string", "null"]
+ }
},
"required": ["provider"]
}
@@ -18188,7 +25279,9 @@
"type": "boolean",
"description": "Indicates if the user should be redirected to the authorization URL"
},
- "status": { "type": "boolean" }
+ "status": {
+ "type": "boolean"
+ }
},
"required": ["redirect"]
}
@@ -18200,7 +25293,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18212,7 +25309,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18224,7 +25325,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18235,7 +25340,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18246,7 +25355,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18257,7 +25370,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18271,7 +25388,11 @@
"tags": ["Default"],
"description": "List all accounts linked to the user",
"operationId": "listUserAccounts",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -18283,15 +25404,31 @@
"items": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "providerId": { "type": "string" },
- "createdAt": { "type": "string", "format": "date-time" },
- "updatedAt": { "type": "string", "format": "date-time" },
- "accountId": { "type": "string" },
- "userId": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "providerId": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "accountId": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
"scopes": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": [
@@ -18313,7 +25450,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18325,7 +25466,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18337,7 +25482,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18348,7 +25497,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18359,7 +25512,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18370,7 +25527,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18383,7 +25544,11 @@
"get": {
"tags": ["Default"],
"description": "Callback to complete user deletion with verification token",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "token",
@@ -18430,7 +25595,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18442,7 +25611,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18454,7 +25627,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18465,7 +25642,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18476,7 +25657,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18487,7 +25672,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18500,7 +25689,11 @@
"post": {
"tags": ["Default"],
"description": "Unlink an account",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -18509,8 +25702,12 @@
"schema": {
"type": "object",
"properties": {
- "providerId": { "type": "string" },
- "accountId": { "type": ["string", "null"] }
+ "providerId": {
+ "type": "string"
+ },
+ "accountId": {
+ "type": ["string", "null"]
+ }
},
"required": ["providerId"]
}
@@ -18524,7 +25721,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -18534,7 +25735,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18546,7 +25751,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18558,7 +25767,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18569,7 +25782,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18580,7 +25797,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18591,7 +25812,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18604,7 +25829,11 @@
"post": {
"tags": ["Default"],
"description": "Refresh the access token using a refresh token",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -18639,10 +25868,18 @@
"schema": {
"type": "object",
"properties": {
- "tokenType": { "type": "string" },
- "idToken": { "type": "string" },
- "accessToken": { "type": "string" },
- "refreshToken": { "type": "string" },
+ "tokenType": {
+ "type": "string"
+ },
+ "idToken": {
+ "type": "string"
+ },
+ "accessToken": {
+ "type": "string"
+ },
+ "refreshToken": {
+ "type": "string"
+ },
"accessTokenExpiresAt": {
"type": "string",
"format": "date-time"
@@ -18664,7 +25901,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18676,7 +25917,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18687,7 +25932,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18698,7 +25947,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18709,7 +25962,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18722,7 +25979,11 @@
"post": {
"tags": ["Default"],
"description": "Get a valid access token, doing a refresh if needed",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -18757,9 +26018,15 @@
"schema": {
"type": "object",
"properties": {
- "tokenType": { "type": "string" },
- "idToken": { "type": "string" },
- "accessToken": { "type": "string" },
+ "tokenType": {
+ "type": "string"
+ },
+ "idToken": {
+ "type": "string"
+ },
+ "accessToken": {
+ "type": "string"
+ },
"accessTokenExpiresAt": {
"type": "string",
"format": "date-time"
@@ -18777,7 +26044,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18789,7 +26060,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18800,7 +26075,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18811,7 +26090,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18822,7 +26105,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18835,7 +26122,11 @@
"get": {
"tags": ["Default"],
"description": "Get the account info provided by the provider",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -18848,11 +26139,21 @@
"user": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "email": { "type": "string" },
- "image": { "type": "string" },
- "emailVerified": { "type": "boolean" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "emailVerified": {
+ "type": "boolean"
+ }
},
"required": ["id", "emailVerified"]
},
@@ -18873,7 +26174,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18885,7 +26190,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18897,7 +26206,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18908,7 +26221,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18919,7 +26236,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18930,7 +26251,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -18943,7 +26268,11 @@
"get": {
"tags": ["Default"],
"description": "Check if the API is working",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -18968,7 +26297,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18980,7 +26313,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -18992,7 +26329,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19003,7 +26344,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19014,7 +26359,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19025,7 +26374,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19038,7 +26391,11 @@
"get": {
"tags": ["Default"],
"description": "Displays an error page",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -19057,7 +26414,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19069,7 +26430,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19081,7 +26446,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19092,7 +26461,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19103,7 +26476,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19114,7 +26491,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19127,7 +26508,11 @@
"post": {
"tags": ["Username"],
"description": "Sign in with username",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19170,7 +26555,9 @@
"type": "string",
"description": "Session token for the authenticated session"
},
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
},
"required": ["token", "user"]
}
@@ -19182,7 +26569,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19194,7 +26585,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19206,7 +26601,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19217,7 +26616,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19229,7 +26632,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
}
@@ -19239,7 +26646,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19250,7 +26661,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19262,7 +26677,11 @@
"/api/auth/is-username-available": {
"post": {
"tags": ["Username"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19287,7 +26706,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19299,7 +26722,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19311,7 +26738,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19322,7 +26753,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19333,7 +26768,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19344,7 +26783,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19357,7 +26800,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Use this endpoint to get the TOTP URI",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19383,7 +26830,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "totpURI": { "type": "string" } }
+ "properties": {
+ "totpURI": {
+ "type": "string"
+ }
+ }
}
}
}
@@ -19393,7 +26844,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19405,7 +26860,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19417,7 +26876,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19428,7 +26891,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19439,7 +26906,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19450,7 +26921,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19463,7 +26938,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Verify two factor TOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19493,7 +26972,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -19503,7 +26986,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19515,7 +27002,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19527,7 +27018,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19538,7 +27033,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19549,7 +27048,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19560,7 +27063,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19573,7 +27080,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Send two factor OTP to the user",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -19582,7 +27093,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -19592,7 +27107,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19604,7 +27123,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19616,7 +27139,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19627,7 +27154,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19638,7 +27169,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19649,7 +27184,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19662,7 +27201,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Verify two factor OTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19675,7 +27218,9 @@
"type": "string",
"description": "The otp code to verify. Eg: \"012345\""
},
- "trustDevice": { "type": ["boolean", "null"] }
+ "trustDevice": {
+ "type": ["boolean", "null"]
+ }
},
"required": ["code"]
}
@@ -19748,7 +27293,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19760,7 +27309,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19772,7 +27325,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19783,7 +27340,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19794,7 +27355,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19805,7 +27370,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19818,7 +27387,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Verify a backup code for two-factor authentication",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -19941,7 +27514,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19953,7 +27530,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -19965,7 +27546,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19976,7 +27561,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19987,7 +27576,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -19998,7 +27591,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20011,7 +27608,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Generate new backup codes for two-factor authentication",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20045,7 +27646,9 @@
},
"backupCodes": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"description": "Array of generated backup codes in plain text"
}
},
@@ -20059,7 +27662,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20071,7 +27678,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20083,7 +27694,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20094,7 +27709,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20105,7 +27724,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20116,7 +27739,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20129,7 +27756,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Use this endpoint to enable two factor authentication. This will generate a TOTP URI and backup codes. Once the user verifies the TOTP URI, the two factor authentication will be enabled.",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20160,10 +27791,15 @@
"schema": {
"type": "object",
"properties": {
- "totpURI": { "type": "string", "description": "TOTP URI" },
+ "totpURI": {
+ "type": "string",
+ "description": "TOTP URI"
+ },
"backupCodes": {
"type": "array",
- "items": { "type": "string" },
+ "items": {
+ "type": "string"
+ },
"description": "Backup codes"
}
}
@@ -20176,7 +27812,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20188,7 +27828,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20200,7 +27844,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20211,7 +27859,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20222,7 +27874,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20233,7 +27889,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20246,7 +27906,11 @@
"post": {
"tags": ["Two-factor"],
"description": "Use this endpoint to disable two factor authentication.",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20272,7 +27936,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -20282,7 +27950,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20294,7 +27966,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20306,7 +27982,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20317,7 +27997,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20328,7 +28012,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20339,7 +28027,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20352,7 +28044,11 @@
"post": {
"tags": ["One-tap"],
"description": "Use this endpoint to authenticate with Google One Tap",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20379,20 +28075,30 @@
"schema": {
"type": "object",
"properties": {
- "session": { "$ref": "#/components/schemas/Session" },
- "user": { "$ref": "#/components/schemas/User" }
+ "session": {
+ "$ref": "#/components/schemas/Session"
+ },
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
}
},
- "400": { "description": "Invalid token" },
+ "400": {
+ "description": "Invalid token"
+ },
"401": {
"content": {
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20404,7 +28110,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20415,7 +28125,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20426,7 +28140,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20437,7 +28155,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20451,7 +28173,11 @@
"tags": ["Email-otp"],
"description": "Send a verification OTP to an email",
"operationId": "sendEmailVerificationOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20464,7 +28190,10 @@
"type": "string",
"description": "Email address to send the OTP"
},
- "type": { "type": "string", "description": "Type of the OTP" }
+ "type": {
+ "type": "string",
+ "description": "Type of the OTP"
+ }
},
"required": ["email", "type"]
}
@@ -20478,7 +28207,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -20488,7 +28221,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20500,7 +28237,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20512,7 +28253,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20523,7 +28268,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20534,7 +28283,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20545,7 +28298,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20559,7 +28316,11 @@
"tags": ["Email-otp"],
"description": "Verify an email with an OTP",
"operationId": "verifyEmailWithOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20576,7 +28337,10 @@
"type": "string",
"description": "Type of the OTP"
},
- "otp": { "type": "string", "description": "OTP to verify" }
+ "otp": {
+ "type": "string",
+ "description": "OTP to verify"
+ }
},
"required": ["email", "type", "otp"]
}
@@ -20590,7 +28354,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -20600,7 +28368,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20612,7 +28384,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20624,7 +28400,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20635,7 +28415,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20646,7 +28430,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20657,7 +28445,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20670,7 +28462,11 @@
"post": {
"tags": ["Email-otp"],
"description": "Verify email with OTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20683,7 +28479,10 @@
"type": "string",
"description": "Email address to verify"
},
- "otp": { "type": "string", "description": "OTP to verify" }
+ "otp": {
+ "type": "string",
+ "description": "OTP to verify"
+ }
},
"required": ["email", "otp"]
}
@@ -20708,7 +28507,9 @@
"nullable": true,
"description": "Session token if autoSignInAfterVerification is enabled, otherwise null"
},
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
},
"required": ["status", "token", "user"]
}
@@ -20720,7 +28521,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20732,7 +28537,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20744,7 +28553,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20755,7 +28568,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20766,7 +28583,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20777,7 +28598,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20791,7 +28616,11 @@
"tags": ["Email-otp"],
"description": "Sign in with email and OTP",
"operationId": "signInWithEmailOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20826,7 +28655,9 @@
"type": "string",
"description": "Session token for the authenticated session"
},
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
},
"required": ["token", "user"]
}
@@ -20838,7 +28669,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20850,7 +28685,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20862,7 +28701,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20873,7 +28716,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20884,7 +28731,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20895,7 +28746,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20909,7 +28764,11 @@
"tags": ["Email-otp"],
"description": "Request password reset with email and OTP",
"operationId": "requestPasswordResetWithEmailOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -20950,7 +28809,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20962,7 +28825,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -20974,7 +28841,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20985,7 +28856,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -20996,7 +28871,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21007,7 +28886,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21021,7 +28904,11 @@
"tags": ["Email-otp"],
"description": "Deprecated: Use /email-otp/request-password-reset instead.",
"operationId": "forgetPasswordWithEmailOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21062,7 +28949,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21074,7 +28965,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21086,7 +28981,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21097,7 +28996,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21108,7 +29011,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21119,7 +29026,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21133,7 +29044,11 @@
"tags": ["Email-otp"],
"description": "Reset password with email and OTP",
"operationId": "resetPasswordWithEmailOTP",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21167,7 +29082,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -21177,7 +29096,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21189,7 +29112,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21201,7 +29128,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21212,7 +29143,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21223,7 +29158,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21234,7 +29173,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21247,7 +29190,11 @@
"post": {
"tags": ["Organization"],
"description": "Create an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21304,7 +29251,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21316,7 +29267,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21328,7 +29283,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21339,7 +29298,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21350,7 +29313,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21361,7 +29328,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21374,7 +29345,11 @@
"post": {
"tags": ["Organization"],
"description": "Update an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21432,7 +29407,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21444,7 +29423,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21456,7 +29439,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21467,7 +29454,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21478,7 +29469,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21489,7 +29484,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21502,7 +29501,11 @@
"post": {
"tags": ["Organization"],
"description": "Delete an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21538,7 +29541,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21550,7 +29557,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21562,7 +29573,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21573,7 +29588,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21584,7 +29603,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21595,7 +29618,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21609,7 +29636,11 @@
"tags": ["Organization"],
"description": "Set the active organization",
"operationId": "setActiveOrganization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21618,7 +29649,9 @@
"schema": {
"type": "object",
"properties": {
- "organizationId": { "type": ["string", "null"] },
+ "organizationId": {
+ "type": ["string", "null"]
+ },
"organizationSlug": {
"type": ["string", "null"],
"description": "The organization slug to set as active. It can be null to unset the active organization if organizationId is not provided. Eg: \"org-slug\""
@@ -21647,7 +29680,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21659,7 +29696,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21671,7 +29712,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21682,7 +29727,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21693,7 +29742,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21704,7 +29757,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21718,7 +29775,11 @@
"tags": ["Organization"],
"description": "Get the full organization",
"operationId": "getOrganization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -21738,7 +29799,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21750,7 +29815,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21762,7 +29831,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21773,7 +29846,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21784,7 +29861,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21795,7 +29876,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21808,7 +29893,11 @@
"get": {
"tags": ["Organization"],
"description": "List all organizations",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -21817,7 +29906,9 @@
"application/json": {
"schema": {
"type": "array",
- "items": { "$ref": "#/components/schemas/Organization" }
+ "items": {
+ "$ref": "#/components/schemas/Organization"
+ }
}
}
}
@@ -21827,7 +29918,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21839,7 +29934,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21851,7 +29950,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21862,7 +29965,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21873,7 +29980,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21884,7 +29995,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -21898,7 +30013,11 @@
"tags": ["Organization"],
"description": "Create an invitation to an organization",
"operationId": "createOrganizationInvitation",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -21923,7 +30042,9 @@
"type": ["boolean", "null"],
"description": "Resend the invitation email, if the user is already invited. Eg: true"
},
- "teamId": { "type": "string" }
+ "teamId": {
+ "type": "string"
+ }
},
"required": ["email", "role", "teamId"]
}
@@ -21938,14 +30059,30 @@
"schema": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "email": { "type": "string" },
- "role": { "type": "string" },
- "organizationId": { "type": "string" },
- "inviterId": { "type": "string" },
- "status": { "type": "string" },
- "expiresAt": { "type": "string" },
- "createdAt": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "inviterId": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string"
+ }
},
"required": [
"id",
@@ -21966,7 +30103,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21978,7 +30119,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -21990,7 +30135,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22001,7 +30150,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22012,7 +30165,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22023,7 +30180,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22035,7 +30196,11 @@
"/api/auth/organization/cancel-invitation": {
"post": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22060,7 +30225,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22072,7 +30241,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22084,7 +30257,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22095,7 +30272,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22106,7 +30287,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22117,7 +30302,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22130,7 +30319,11 @@
"post": {
"tags": ["Organization"],
"description": "Accept an invitation to an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22157,8 +30350,12 @@
"schema": {
"type": "object",
"properties": {
- "invitation": { "type": "object" },
- "member": { "type": "object" }
+ "invitation": {
+ "type": "object"
+ },
+ "member": {
+ "type": "object"
+ }
}
}
}
@@ -22169,7 +30366,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22181,7 +30382,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22193,7 +30398,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22204,7 +30413,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22215,7 +30428,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22226,7 +30443,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22239,7 +30460,11 @@
"get": {
"tags": ["Organization"],
"description": "Get an invitation by ID",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "id",
@@ -22258,16 +30483,36 @@
"schema": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "email": { "type": "string" },
- "role": { "type": "string" },
- "organizationId": { "type": "string" },
- "inviterId": { "type": "string" },
- "status": { "type": "string" },
- "expiresAt": { "type": "string" },
- "organizationName": { "type": "string" },
- "organizationSlug": { "type": "string" },
- "inviterEmail": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "inviterId": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": "string"
+ },
+ "organizationName": {
+ "type": "string"
+ },
+ "organizationSlug": {
+ "type": "string"
+ },
+ "inviterEmail": {
+ "type": "string"
+ }
},
"required": [
"id",
@@ -22290,7 +30535,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22302,7 +30551,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22314,7 +30567,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22325,7 +30582,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22336,7 +30597,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22347,7 +30612,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22360,7 +30629,11 @@
"post": {
"tags": ["Organization"],
"description": "Reject an invitation to an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22387,8 +30660,13 @@
"schema": {
"type": "object",
"properties": {
- "invitation": { "type": "object" },
- "member": { "type": "object", "nullable": true }
+ "invitation": {
+ "type": "object"
+ },
+ "member": {
+ "type": "object",
+ "nullable": true
+ }
}
}
}
@@ -22399,7 +30677,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22411,7 +30693,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22423,7 +30709,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22434,7 +30724,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22445,7 +30739,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22456,7 +30754,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22468,7 +30770,11 @@
"/api/auth/organization/list-invitations": {
"get": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"400": {
@@ -22476,7 +30782,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22488,7 +30798,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22500,7 +30814,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22511,7 +30829,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22522,7 +30844,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22533,7 +30859,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22546,7 +30876,11 @@
"get": {
"tags": ["Organization"],
"description": "Get the member details of the active organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -22556,10 +30890,18 @@
"schema": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "userId": { "type": "string" },
- "organizationId": { "type": "string" },
- "role": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
},
"required": ["id", "userId", "organizationId", "role"]
}
@@ -22571,7 +30913,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22583,7 +30929,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22595,7 +30945,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22606,7 +30960,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22617,7 +30975,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22628,7 +30990,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22640,7 +31006,11 @@
"/api/auth/organization/check-slug": {
"post": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22665,7 +31035,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22677,7 +31051,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22689,7 +31067,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22700,7 +31082,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22711,7 +31097,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22722,7 +31112,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22735,7 +31129,11 @@
"post": {
"tags": ["Organization"],
"description": "Remove a member from an organization",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22769,10 +31167,18 @@
"member": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "userId": { "type": "string" },
- "organizationId": { "type": "string" },
- "role": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
},
"required": ["id", "userId", "organizationId", "role"]
}
@@ -22787,7 +31193,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22799,7 +31209,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22811,7 +31225,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22822,7 +31240,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22833,7 +31255,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22844,7 +31270,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22858,7 +31288,11 @@
"tags": ["Organization"],
"description": "Update the role of a member in an organization",
"operationId": "updateOrganizationMemberRole",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -22896,10 +31330,18 @@
"member": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "userId": { "type": "string" },
- "organizationId": { "type": "string" },
- "role": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
},
"required": ["id", "userId", "organizationId", "role"]
}
@@ -22914,7 +31356,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22926,7 +31372,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -22938,7 +31388,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22949,7 +31403,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22960,7 +31418,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22971,7 +31433,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -22983,7 +31449,11 @@
"/api/auth/organization/leave": {
"post": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -23008,7 +31478,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23020,7 +31494,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23032,7 +31510,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23043,7 +31525,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23054,7 +31540,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23065,7 +31555,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23078,7 +31572,11 @@
"get": {
"tags": ["Organization"],
"description": "List all invitations a user has received",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -23090,11 +31588,21 @@
"items": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "email": { "type": "string" },
- "role": { "type": "string" },
- "organizationId": { "type": "string" },
- "organizationName": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "organizationName": {
+ "type": "string"
+ },
"inviterId": {
"type": "string",
"description": "The ID of the user who created the invitation"
@@ -23104,9 +31612,15 @@
"description": "The ID of the team associated with the invitation",
"nullable": true
},
- "status": { "type": "string" },
- "expiresAt": { "type": "string" },
- "createdAt": { "type": "string" }
+ "status": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string"
+ }
},
"required": [
"id",
@@ -23129,7 +31643,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23141,7 +31659,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23153,7 +31675,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23164,7 +31690,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23175,7 +31705,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23186,7 +31720,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23198,7 +31736,11 @@
"/api/auth/organization/list-members": {
"get": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"400": {
@@ -23206,7 +31748,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23218,7 +31764,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23230,7 +31780,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23241,7 +31795,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23252,7 +31810,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23263,7 +31825,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23275,7 +31841,11 @@
"/api/auth/organization/get-active-member-role": {
"get": {
"tags": ["Organization"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"400": {
@@ -23283,7 +31853,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23295,7 +31869,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23307,7 +31885,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23318,7 +31900,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23329,7 +31915,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23340,7 +31930,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23353,7 +31947,11 @@
"post": {
"tags": ["Organization"],
"description": "Check if the user has permission",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -23384,8 +31982,12 @@
"schema": {
"type": "object",
"properties": {
- "error": { "type": "string" },
- "success": { "type": "boolean" }
+ "error": {
+ "type": "string"
+ },
+ "success": {
+ "type": "boolean"
+ }
},
"required": ["success"]
}
@@ -23397,7 +31999,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23409,7 +32015,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23421,7 +32031,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23432,7 +32046,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23443,7 +32061,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23454,7 +32076,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23468,7 +32094,11 @@
"tags": ["Admin"],
"description": "Set the role of a user",
"operationId": "setUserRole",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -23477,7 +32107,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" },
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ },
"role": {
"type": "string",
"description": "The role to set, this can be a string or an array of strings. Eg: `admin` or `[admin, user]`"
@@ -23496,7 +32129,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -23507,7 +32142,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23519,7 +32158,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23531,7 +32174,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23542,7 +32189,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23553,7 +32204,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23564,7 +32219,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23578,12 +32237,19 @@
"tags": ["Admin"],
"description": "Get an existing user",
"operationId": "getUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "id",
"in": "query",
- "schema": { "type": "string", "description": "The id of the User" }
+ "schema": {
+ "type": "string",
+ "description": "The id of the User"
+ }
}
],
"responses": {
@@ -23594,7 +32260,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -23605,7 +32273,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23617,7 +32289,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23629,7 +32305,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23640,7 +32320,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23651,7 +32335,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23662,7 +32350,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23676,7 +32368,11 @@
"tags": ["Admin"],
"description": "Create a new user",
"operationId": "createUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -23689,13 +32385,19 @@
"type": "string",
"description": "The email of the user"
},
- "password": { "type": ["string", "null"] },
+ "password": {
+ "type": ["string", "null"]
+ },
"name": {
"type": "string",
"description": "The name of the user"
},
- "role": { "type": ["string", "null"] },
- "data": { "type": ["string", "null"] }
+ "role": {
+ "type": ["string", "null"]
+ },
+ "data": {
+ "type": ["string", "null"]
+ }
},
"required": ["email", "name"]
}
@@ -23710,7 +32412,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -23721,7 +32425,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23733,7 +32441,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23745,7 +32457,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23756,7 +32472,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23767,7 +32487,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23778,7 +32502,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23792,7 +32520,11 @@
"tags": ["Admin"],
"description": "Update a user's details",
"operationId": "updateUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -23801,7 +32533,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" },
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ },
"data": {
"type": "string",
"description": "The user data to update"
@@ -23820,7 +32555,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -23831,7 +32568,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23843,7 +32584,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -23855,7 +32600,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23866,7 +32615,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23877,7 +32630,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23888,7 +32645,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -23902,12 +32663,18 @@
"tags": ["Admin"],
"description": "List users",
"operationId": "listUsers",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "searchValue",
"in": "query",
- "schema": { "type": ["string", "null"] }
+ "schema": {
+ "type": ["string", "null"]
+ }
},
{
"name": "searchField",
@@ -23928,12 +32695,16 @@
{
"name": "limit",
"in": "query",
- "schema": { "type": ["string", "null"] }
+ "schema": {
+ "type": ["string", "null"]
+ }
},
{
"name": "offset",
"in": "query",
- "schema": { "type": ["string", "null"] }
+ "schema": {
+ "type": ["string", "null"]
+ }
},
{
"name": "sortBy",
@@ -23962,7 +32733,9 @@
{
"name": "filterValue",
"in": "query",
- "schema": { "type": ["string", "null"] }
+ "schema": {
+ "type": ["string", "null"]
+ }
},
{
"name": "filterOperator",
@@ -23983,11 +32756,19 @@
"properties": {
"users": {
"type": "array",
- "items": { "$ref": "#/components/schemas/User" }
+ "items": {
+ "$ref": "#/components/schemas/User"
+ }
+ },
+ "total": {
+ "type": "number"
+ },
+ "limit": {
+ "type": "number"
},
- "total": { "type": "number" },
- "limit": { "type": "number" },
- "offset": { "type": "number" }
+ "offset": {
+ "type": "number"
+ }
},
"required": ["users", "total"]
}
@@ -23999,7 +32780,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24011,7 +32796,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24023,7 +32812,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24034,7 +32827,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24045,7 +32842,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24056,7 +32857,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24070,7 +32875,11 @@
"tags": ["Admin"],
"description": "List user sessions",
"operationId": "listUserSessions",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24079,7 +32888,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["userId"]
}
@@ -24096,7 +32908,9 @@
"properties": {
"sessions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/Session" }
+ "items": {
+ "$ref": "#/components/schemas/Session"
+ }
}
}
}
@@ -24108,7 +32922,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24120,7 +32938,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24132,7 +32954,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24143,7 +32969,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24154,7 +32984,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24165,7 +32999,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24179,7 +33017,11 @@
"tags": ["Admin"],
"description": "Unban a user",
"operationId": "unbanUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24188,7 +33030,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["userId"]
}
@@ -24203,7 +33048,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -24214,7 +33061,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24226,7 +33077,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24238,7 +33093,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24249,7 +33108,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24260,7 +33123,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24271,7 +33138,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24285,7 +33156,11 @@
"tags": ["Admin"],
"description": "Ban a user",
"operationId": "banUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24294,7 +33169,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" },
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ },
"banReason": {
"type": ["string", "null"],
"description": "The reason for the ban"
@@ -24317,7 +33195,9 @@
"schema": {
"type": "object",
"properties": {
- "user": { "$ref": "#/components/schemas/User" }
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -24328,7 +33208,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24340,7 +33224,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24352,7 +33240,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24363,7 +33255,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24374,7 +33270,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24385,7 +33285,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24399,7 +33303,11 @@
"tags": ["Admin"],
"description": "Impersonate a user",
"operationId": "impersonateUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24408,7 +33316,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["userId"]
}
@@ -24423,8 +33334,12 @@
"schema": {
"type": "object",
"properties": {
- "session": { "$ref": "#/components/schemas/Session" },
- "user": { "$ref": "#/components/schemas/User" }
+ "session": {
+ "$ref": "#/components/schemas/Session"
+ },
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -24435,7 +33350,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24447,7 +33366,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24459,7 +33382,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24470,7 +33397,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24481,7 +33412,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24492,7 +33427,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24504,7 +33443,11 @@
"/api/auth/admin/stop-impersonating": {
"post": {
"tags": ["Admin"],
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"400": {
@@ -24512,7 +33455,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24524,7 +33471,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24536,7 +33487,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24547,7 +33502,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24558,7 +33517,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24569,7 +33532,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24583,7 +33550,11 @@
"tags": ["Admin"],
"description": "Revoke a user session",
"operationId": "revokeUserSession",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24609,7 +33580,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -24619,7 +33594,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24631,7 +33610,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24643,7 +33626,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24654,7 +33641,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24665,7 +33656,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24676,7 +33671,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24690,7 +33689,11 @@
"tags": ["Admin"],
"description": "Revoke all user sessions",
"operationId": "revokeUserSessions",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24699,7 +33702,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["userId"]
}
@@ -24713,7 +33719,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -24723,7 +33733,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24735,7 +33749,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24747,7 +33765,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24758,7 +33780,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24769,7 +33795,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24780,7 +33810,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24794,7 +33828,11 @@
"tags": ["Admin"],
"description": "Delete a user and all their sessions and accounts. Cannot be undone.",
"operationId": "removeUser",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24803,7 +33841,10 @@
"schema": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["userId"]
}
@@ -24817,7 +33858,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "success": { "type": "boolean" } }
+ "properties": {
+ "success": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -24827,7 +33872,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24839,7 +33888,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24851,7 +33904,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24862,7 +33919,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24873,7 +33934,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24884,7 +33949,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24898,7 +33967,11 @@
"tags": ["Admin"],
"description": "Set a user's password",
"operationId": "setUserPassword",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -24911,7 +33984,10 @@
"type": "string",
"description": "The new password"
},
- "userId": { "type": "string", "description": "The user id" }
+ "userId": {
+ "type": "string",
+ "description": "The user id"
+ }
},
"required": ["newPassword", "userId"]
}
@@ -24925,7 +34001,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -24935,7 +34015,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24947,7 +34031,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -24959,7 +34047,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24970,7 +34062,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24981,7 +34077,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -24992,7 +34092,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25005,7 +34109,11 @@
"post": {
"tags": ["Admin"],
"description": "Check if the user has permission",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"content": {
@@ -25036,8 +34144,12 @@
"schema": {
"type": "object",
"properties": {
- "error": { "type": "string" },
- "success": { "type": "boolean" }
+ "error": {
+ "type": "string"
+ },
+ "success": {
+ "type": "boolean"
+ }
},
"required": ["success"]
}
@@ -25049,7 +34161,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25061,7 +34177,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25073,7 +34193,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25084,7 +34208,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25095,7 +34223,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25106,7 +34238,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25120,7 +34256,11 @@
"tags": ["Passkey"],
"description": "Generate registration options for a new passkey",
"operationId": "generatePasskeyRegistrationOptions",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -25142,20 +34282,32 @@
"schema": {
"type": "object",
"properties": {
- "challenge": { "type": "string" },
+ "challenge": {
+ "type": "string"
+ },
"rp": {
"type": "object",
"properties": {
- "name": { "type": "string" },
- "id": { "type": "string" }
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ }
}
},
"user": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "displayName": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
}
},
"pubKeyCredParams": {
@@ -25163,22 +34315,34 @@
"items": {
"type": "object",
"properties": {
- "type": { "type": "string" },
- "alg": { "type": "number" }
+ "type": {
+ "type": "string"
+ },
+ "alg": {
+ "type": "number"
+ }
}
}
},
- "timeout": { "type": "number" },
+ "timeout": {
+ "type": "number"
+ },
"excludeCredentials": {
"type": "array",
"items": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "type": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
"transports": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
}
}
@@ -25186,13 +34350,23 @@
"authenticatorSelection": {
"type": "object",
"properties": {
- "authenticatorAttachment": { "type": "string" },
- "requireResidentKey": { "type": "boolean" },
- "userVerification": { "type": "string" }
+ "authenticatorAttachment": {
+ "type": "string"
+ },
+ "requireResidentKey": {
+ "type": "boolean"
+ },
+ "userVerification": {
+ "type": "string"
+ }
}
},
- "attestation": { "type": "string" },
- "extensions": { "type": "object" }
+ "attestation": {
+ "type": "string"
+ },
+ "extensions": {
+ "type": "object"
+ }
}
}
}
@@ -25203,7 +34377,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25215,7 +34393,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25227,7 +34409,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25238,7 +34424,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25249,7 +34439,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25260,7 +34454,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25274,7 +34472,11 @@
"tags": ["Passkey"],
"description": "Generate authentication options for a passkey",
"operationId": "passkeyGenerateAuthenticateOptions",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -25284,47 +34486,77 @@
"schema": {
"type": "object",
"properties": {
- "challenge": { "type": "string" },
+ "challenge": {
+ "type": "string"
+ },
"rp": {
"type": "object",
"properties": {
- "name": { "type": "string" },
- "id": { "type": "string" }
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ }
}
},
"user": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "displayName": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
}
},
- "timeout": { "type": "number" },
+ "timeout": {
+ "type": "number"
+ },
"allowCredentials": {
"type": "array",
"items": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "type": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
"transports": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
}
}
},
- "userVerification": { "type": "string" },
+ "userVerification": {
+ "type": "string"
+ },
"authenticatorSelection": {
"type": "object",
"properties": {
- "authenticatorAttachment": { "type": "string" },
- "requireResidentKey": { "type": "boolean" },
- "userVerification": { "type": "string" }
+ "authenticatorAttachment": {
+ "type": "string"
+ },
+ "requireResidentKey": {
+ "type": "boolean"
+ },
+ "userVerification": {
+ "type": "string"
+ }
}
},
- "extensions": { "type": "object" }
+ "extensions": {
+ "type": "object"
+ }
}
}
}
@@ -25335,7 +34567,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25347,7 +34583,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25359,7 +34599,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25370,7 +34614,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25381,7 +34629,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25392,7 +34644,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25406,7 +34662,11 @@
"tags": ["Passkey"],
"description": "Verify registration of a new passkey",
"operationId": "passkeyVerifyRegistration",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -25415,7 +34675,9 @@
"schema": {
"type": "object",
"properties": {
- "response": { "type": "string" },
+ "response": {
+ "type": "string"
+ },
"name": {
"type": ["string", "null"],
"description": "Name of the passkey"
@@ -25431,17 +34693,25 @@
"description": "Success",
"content": {
"application/json": {
- "schema": { "$ref": "#/components/schemas/Passkey" }
+ "schema": {
+ "$ref": "#/components/schemas/Passkey"
+ }
}
}
},
- "400": { "description": "Bad request" },
+ "400": {
+ "description": "Bad request"
+ },
"401": {
"content": {
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25453,7 +34723,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25464,7 +34738,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25475,7 +34753,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25486,7 +34768,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25500,7 +34786,11 @@
"tags": ["Passkey"],
"description": "Verify authentication of a passkey",
"operationId": "passkeyVerifyAuthentication",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -25508,7 +34798,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "response": { "type": "string" } },
+ "properties": {
+ "response": {
+ "type": "string"
+ }
+ },
"required": ["response"]
}
}
@@ -25522,8 +34816,12 @@
"schema": {
"type": "object",
"properties": {
- "session": { "$ref": "#/components/schemas/Session" },
- "user": { "$ref": "#/components/schemas/User" }
+ "session": {
+ "$ref": "#/components/schemas/Session"
+ },
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -25534,7 +34832,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25546,7 +34848,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25558,7 +34864,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25569,7 +34879,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25580,7 +34894,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25591,7 +34909,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25604,7 +34926,11 @@
"get": {
"tags": ["Passkey"],
"description": "List all passkeys for the authenticated user",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"responses": {
"200": {
@@ -25633,7 +34959,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25645,7 +34975,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25657,7 +34991,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25668,7 +35006,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25679,7 +35021,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25690,7 +35036,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25703,7 +35053,11 @@
"post": {
"tags": ["Passkey"],
"description": "Delete a specific passkey",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -25745,7 +35099,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25757,7 +35115,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25769,7 +35131,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25780,7 +35146,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25791,7 +35161,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25802,7 +35176,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25815,7 +35193,11 @@
"post": {
"tags": ["Passkey"],
"description": "Update a specific passkey's name",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -25846,7 +35228,9 @@
"schema": {
"type": "object",
"properties": {
- "passkey": { "$ref": "#/components/schemas/Passkey" }
+ "passkey": {
+ "$ref": "#/components/schemas/Passkey"
+ }
},
"required": ["passkey"]
}
@@ -25858,7 +35242,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25870,7 +35258,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25882,7 +35274,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25893,7 +35289,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25904,7 +35304,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25915,7 +35319,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -25929,7 +35337,11 @@
"tags": ["Magic-link"],
"description": "Sign in with magic link",
"operationId": "signInWithMagicLink",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [],
"requestBody": {
"required": true,
@@ -25971,7 +35383,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "status": { "type": "boolean" } }
+ "properties": {
+ "status": {
+ "type": "boolean"
+ }
+ }
}
}
}
@@ -25981,7 +35397,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -25993,7 +35413,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -26005,7 +35429,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26016,7 +35444,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26027,7 +35459,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26038,7 +35474,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26052,12 +35492,19 @@
"tags": ["Magic-link"],
"description": "Verify magic link",
"operationId": "verifyMagicLink",
- "security": [{ "bearerAuth": [] }],
+ "security": [
+ {
+ "bearerAuth": []
+ }
+ ],
"parameters": [
{
"name": "token",
"in": "query",
- "schema": { "type": "string", "description": "Verification token" }
+ "schema": {
+ "type": "string",
+ "description": "Verification token"
+ }
},
{
"name": "callbackURL",
@@ -26092,8 +35539,12 @@
"schema": {
"type": "object",
"properties": {
- "session": { "$ref": "#/components/schemas/Session" },
- "user": { "$ref": "#/components/schemas/User" }
+ "session": {
+ "$ref": "#/components/schemas/Session"
+ },
+ "user": {
+ "$ref": "#/components/schemas/User"
+ }
}
}
}
@@ -26104,7 +35555,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -26116,7 +35571,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } },
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ },
"required": ["message"]
}
}
@@ -26128,7 +35587,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26139,7 +35602,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26150,7 +35617,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26161,7 +35632,11 @@
"application/json": {
"schema": {
"type": "object",
- "properties": { "message": { "type": "string" } }
+ "properties": {
+ "message": {
+ "type": "string"
+ }
+ }
}
}
},
@@ -26178,14 +35653,20 @@
"contact": {}
},
"tags": [
- { "name": "boundless", "description": "" },
+ {
+ "name": "boundless",
+ "description": ""
+ },
{
"name": "Default",
"description": "Default endpoints that are included with Better Auth by default. These endpoints are not part of any plugin."
}
],
"servers": [
- { "url": "http://localhost:8000", "description": "Development server" }
+ {
+ "url": "http://localhost:8000",
+ "description": "Development server"
+ }
],
"components": {
"securitySchemes": {
@@ -26210,7 +35691,10 @@
}
},
"schemas": {
- "NotificationPreferencesDto": { "type": "object", "properties": {} },
+ "NotificationPreferencesDto": {
+ "type": "object",
+ "properties": {}
+ },
"UpdatePrivacySettingsDto": {
"type": "object",
"properties": {
@@ -26306,7 +35790,10 @@
"PublicEarningActivityDto": {
"type": "object",
"properties": {
- "id": { "type": "string", "description": "Unique activity id" },
+ "id": {
+ "type": "string",
+ "description": "Unique activity id"
+ },
"source": {
"type": "string",
"description": "Earnings source category",
@@ -26348,11 +35835,15 @@
"summary": {
"$ref": "#/components/schemas/PublicEarningsSummaryDto"
},
- "breakdown": { "$ref": "#/components/schemas/EarningsBreakdownDto" },
+ "breakdown": {
+ "$ref": "#/components/schemas/EarningsBreakdownDto"
+ },
"activities": {
"description": "Verified activity history (completed only)",
"type": "array",
- "items": { "$ref": "#/components/schemas/PublicEarningActivityDto" }
+ "items": {
+ "$ref": "#/components/schemas/PublicEarningActivityDto"
+ }
}
},
"required": ["summary", "breakdown", "activities"]
@@ -26433,102 +35924,70 @@
"EarningsResponseDto": {
"type": "object",
"properties": {
- "summary": { "$ref": "#/components/schemas/EarningsSummaryDto" },
- "breakdown": { "$ref": "#/components/schemas/EarningsBreakdownDto" },
+ "summary": {
+ "$ref": "#/components/schemas/EarningsSummaryDto"
+ },
+ "breakdown": {
+ "$ref": "#/components/schemas/EarningsBreakdownDto"
+ },
"activities": {
"description": "Activity feed",
"type": "array",
- "items": { "$ref": "#/components/schemas/EarningActivityDto" }
+ "items": {
+ "$ref": "#/components/schemas/EarningActivityDto"
+ }
}
},
"required": ["summary", "breakdown", "activities"]
},
- "WithdrawItemDto": {
+ "DashboardUserStatsDto": {
"type": "object",
"properties": {
- "source": {
- "type": "string",
- "description": "Source of the claimable (crowdfunding or grants; user claims release to wallet)",
- "enum": ["crowdfunding", "grants"]
+ "followers": {
+ "type": "number"
},
- "entityId": {
- "type": "string",
- "description": "Entity id (e.g. milestoneId for crowdfunding or grants)"
+ "following": {
+ "type": "number"
}
},
- "required": ["source", "entityId"]
- },
- "WithdrawRequestDto": {
- "type": "object",
- "properties": {
- "items": {
- "description": "Items to claim (source + entityId). Only crowdfunding supported (grants not yet). Payout goes to user's linked wallet.",
- "type": "array",
- "items": { "$ref": "#/components/schemas/WithdrawItemDto" }
- }
- }
+ "required": ["followers", "following"]
},
- "ConfirmReleaseDto": {
+ "DashboardUserDto": {
"type": "object",
"properties": {
- "signedXdr": {
- "type": "string",
- "description": "Signed XDR from creator/grantee wallet (release milestone transaction from real wallet)"
+ "id": {
+ "type": "string"
},
- "entityId": {
+ "name": {
"type": "string",
- "description": "Entity id (e.g. crowdfunding milestone id)"
+ "nullable": true
},
- "source": {
+ "email": {
+ "type": "string"
+ },
+ "username": {
"type": "string",
- "description": "Source of the claimable (only crowdfunding supported for confirm-release)",
- "example": "crowdfunding",
- "enum": ["crowdfunding"]
- }
- },
- "required": ["signedXdr", "entityId", "source"]
- },
- "ConfirmReleaseResponseDto": {
- "type": "object",
- "properties": {
- "success": {
- "type": "boolean",
- "description": "Whether the release was submitted successfully",
- "example": true
+ "nullable": true
},
- "transactionHash": {
+ "displayUsername": {
"type": "string",
- "description": "Transaction hash once the release is executed on-chain"
+ "nullable": true
},
- "message": {
+ "image": {
"type": "string",
- "description": "Human-readable message",
- "example": "Release submitted successfully"
+ "nullable": true
+ },
+ "role": {
+ "type": "string"
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "stats": {
+ "$ref": "#/components/schemas/DashboardUserStatsDto"
}
},
- "required": ["success"]
- },
- "DashboardUserStatsDto": {
- "type": "object",
- "properties": {
- "followers": { "type": "number" },
- "following": { "type": "number" }
- },
- "required": ["followers", "following"]
- },
- "DashboardUserDto": {
- "type": "object",
- "properties": {
- "id": { "type": "string" },
- "name": { "type": "string", "nullable": true },
- "email": { "type": "string" },
- "username": { "type": "string", "nullable": true },
- "displayUsername": { "type": "string", "nullable": true },
- "image": { "type": "string", "nullable": true },
- "role": { "type": "string" },
- "createdAt": { "format": "date-time", "type": "string" },
- "stats": { "$ref": "#/components/schemas/DashboardUserStatsDto" }
- },
"required": [
"id",
"name",
@@ -26543,17 +36002,39 @@
"UserStatsDto": {
"type": "object",
"properties": {
- "projectsCreated": { "type": "number" },
- "projectsFunded": { "type": "number" },
- "totalContributed": { "type": "number" },
- "commentsPosted": { "type": "number" },
- "votes": { "type": "number" },
- "grants": { "type": "number" },
- "hackathons": { "type": "number" },
- "followers": { "type": "number" },
- "following": { "type": "number" },
- "reputation": { "type": "number" },
- "communityScore": { "type": "number" }
+ "projectsCreated": {
+ "type": "number"
+ },
+ "projectsFunded": {
+ "type": "number"
+ },
+ "totalContributed": {
+ "type": "number"
+ },
+ "commentsPosted": {
+ "type": "number"
+ },
+ "votes": {
+ "type": "number"
+ },
+ "grants": {
+ "type": "number"
+ },
+ "hackathons": {
+ "type": "number"
+ },
+ "followers": {
+ "type": "number"
+ },
+ "following": {
+ "type": "number"
+ },
+ "reputation": {
+ "type": "number"
+ },
+ "communityScore": {
+ "type": "number"
+ }
},
"required": [
"projectsCreated",
@@ -26576,7 +36057,10 @@
"type": "string",
"description": "Date in YYYY-MM-DD format"
},
- "count": { "type": "number", "description": "Count for that date" }
+ "count": {
+ "type": "number",
+ "description": "Count for that date"
+ }
},
"required": ["date", "count"]
},
@@ -26585,7 +36069,9 @@
"properties": {
"data": {
"type": "array",
- "items": { "$ref": "#/components/schemas/ChartDataPointDto" }
+ "items": {
+ "$ref": "#/components/schemas/ChartDataPointDto"
+ }
}
},
"required": ["data"]
@@ -26595,7 +36081,9 @@
"properties": {
"data": {
"type": "array",
- "items": { "$ref": "#/components/schemas/ChartDataPointDto" }
+ "items": {
+ "$ref": "#/components/schemas/ChartDataPointDto"
+ }
}
},
"required": ["data"]
@@ -26603,31 +36091,62 @@
"ActivityProjectDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "title": { "type": "string" },
- "banner": { "type": "string", "nullable": true },
- "logo": { "type": "string", "nullable": true }
+ "id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "banner": {
+ "type": "string",
+ "nullable": true
+ },
+ "logo": {
+ "type": "string",
+ "nullable": true
+ }
},
"required": ["id", "title"]
},
"ActivityOrganizationDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
},
"required": ["id", "name"]
},
"RecentActivityDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "type": { "type": "string" },
- "userId": { "type": "string" },
- "projectId": { "type": "string", "nullable": true },
- "organizationId": { "type": "string", "nullable": true },
- "createdAt": { "format": "date-time", "type": "string" },
- "project": { "$ref": "#/components/schemas/ActivityProjectDto" },
+ "id": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "projectId": {
+ "type": "string",
+ "nullable": true
+ },
+ "organizationId": {
+ "type": "string",
+ "nullable": true
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "project": {
+ "$ref": "#/components/schemas/ActivityProjectDto"
+ },
"organization": {
"$ref": "#/components/schemas/ActivityOrganizationDto"
}
@@ -26639,17 +36158,27 @@
"properties": {
"user": {
"description": "User profile data",
- "allOf": [{ "$ref": "#/components/schemas/DashboardUserDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DashboardUserDto"
+ }
+ ]
+ },
+ "stats": {
+ "$ref": "#/components/schemas/UserStatsDto"
+ },
+ "chart": {
+ "$ref": "#/components/schemas/ChartDto"
},
- "stats": { "$ref": "#/components/schemas/UserStatsDto" },
- "chart": { "$ref": "#/components/schemas/ChartDto" },
"activitiesGraph": {
"$ref": "#/components/schemas/ActivitiesGraphDto"
},
"recentActivities": {
"description": "Recent activities",
"type": "array",
- "items": { "$ref": "#/components/schemas/RecentActivityDto" }
+ "items": {
+ "$ref": "#/components/schemas/RecentActivityDto"
+ }
}
},
"required": [
@@ -26660,19 +36189,58 @@
"recentActivities"
]
},
- "UpdateProfileDto": { "type": "object", "properties": {} },
- "UpdateUserDto": { "type": "object", "properties": {} },
- "UploadResponseDto": { "type": "object", "properties": {} },
- "MultipleUploadResponseDto": { "type": "object", "properties": {} },
- "FileInfoResponseDto": { "type": "object", "properties": {} },
- "SearchFilesResponseDto": { "type": "object", "properties": {} },
- "OptimizedUrlResponseDto": { "type": "object", "properties": {} },
- "ResponsiveUrlsResponseDto": { "type": "object", "properties": {} },
- "UsageStatsResponseDto": { "type": "object", "properties": {} },
- "RegisterDto": { "type": "object", "properties": {} },
- "LoginDto": { "type": "object", "properties": {} },
- "RefreshTokenDto": { "type": "object", "properties": {} },
- "VerifySignatureDto": { "type": "object", "properties": {} },
+ "UpdateProfileDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "UpdateUserDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "UploadResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "MultipleUploadResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "FileInfoResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "SearchFilesResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "OptimizedUrlResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "ResponsiveUrlsResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "UsageStatsResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "RegisterDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "LoginDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "RefreshTokenDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "VerifySignatureDto": {
+ "type": "object",
+ "properties": {}
+ },
"CreateConversationDto": {
"type": "object",
"properties": {
@@ -26694,7 +36262,10 @@
},
"required": ["body"]
},
- "ContactDto": { "type": "object", "properties": {} },
+ "ContactDto": {
+ "type": "object",
+ "properties": {}
+ },
"CreateCampaignDto": {
"type": "object",
"properties": {
@@ -26770,10 +36341,12 @@
}
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"team": {
- "description": "Team of the campaign",
+ "description": "Team of the campaign (optional; solo builders may omit)",
"example": [
{
"name": "John Doe",
@@ -26784,7 +36357,9 @@
}
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"contact": {
"description": "Contact of the campaign",
@@ -26792,25 +36367,24 @@
"primary": "john.doe",
"backup": "john.doe@example.com"
},
- "allOf": [{ "$ref": "#/components/schemas/ContactDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ContactDto"
+ }
+ ]
},
"socialLinks": {
- "description": "Social links of the campaign",
+ "description": "Social links of the campaign (optional)",
"example": [
- { "platform": "twitter", "url": "https://twitter.com/john-doe" }
+ {
+ "platform": "twitter",
+ "url": "https://twitter.com/john-doe"
+ }
],
"type": "array",
- "items": { "type": "string" }
- },
- "escrowId": {
- "type": "string",
- "description": "Escrow contract ID for the campaign",
- "example": "CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV"
- },
- "transactionHash": {
- "type": "string",
- "description": "Transaction hash of the deployed escrow contract",
- "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"
+ "items": {
+ "type": "string"
+ }
}
},
"required": [
@@ -26827,11 +36401,20 @@
"projectWebsite",
"demoVideo",
"milestones",
- "team",
- "contact",
- "socialLinks"
+ "contact"
]
},
+ "CreateDraftDto": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "Working title for the campaign",
+ "example": "Stellar Analytics Dashboard"
+ }
+ },
+ "required": ["title"]
+ },
"UpdateCampaignDto": {
"type": "object",
"properties": {
@@ -26907,10 +36490,12 @@
}
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"team": {
- "description": "Team of the campaign",
+ "description": "Team of the campaign (optional; solo builders may omit)",
"example": [
{
"name": "John Doe",
@@ -26921,7 +36506,9 @@
}
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"contact": {
"description": "Contact of the campaign",
@@ -26929,52 +36516,24 @@
"primary": "john.doe",
"backup": "john.doe@example.com"
},
- "allOf": [{ "$ref": "#/components/schemas/ContactDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ContactDto"
+ }
+ ]
},
"socialLinks": {
- "description": "Social links of the campaign",
+ "description": "Social links of the campaign (optional)",
"example": [
- { "platform": "twitter", "url": "https://twitter.com/john-doe" }
+ {
+ "platform": "twitter",
+ "url": "https://twitter.com/john-doe"
+ }
],
"type": "array",
- "items": { "type": "string" }
- },
- "escrowId": {
- "type": "string",
- "description": "Escrow contract ID for the campaign",
- "example": "CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV"
- },
- "transactionHash": {
- "type": "string",
- "description": "Transaction hash of the deployed escrow contract",
- "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"
- }
- }
- },
- "UpdateEscrowDto": {
- "type": "object",
- "properties": {
- "transactionHash": {
- "type": "string",
- "description": "Transaction hash of the deployed escrow contract",
- "example": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6"
- },
- "escrowAddress": {
- "type": "string",
- "description": "Escrow contract address",
- "example": "CCAJPWPKSR6FY5Q5RYT5E3EIZQNDMDFYVVKJ656C5SUOIXQOQ4JQVWGV"
- },
- "trustlessWorkStatus": {
- "type": "string",
- "description": "Trustless Work status",
- "example": "deployed",
- "enum": ["pending", "deployed", "funded", "failed"]
- },
- "escrowType": {
- "type": "string",
- "description": "Escrow type",
- "example": "multi-release",
- "enum": ["single-release", "multi-release"]
+ "items": {
+ "type": "string"
+ }
}
}
},
@@ -26994,28 +36553,6 @@
},
"required": ["email", "role"]
},
- "ContributeCampaignDto": {
- "type": "object",
- "properties": {
- "amount": {
- "type": "number",
- "description": "Amount of the contribution",
- "example": 100
- },
- "message": {
- "type": "string",
- "description": "Optional message from the contributor",
- "example": "I love this campaign!"
- },
- "anonymous": {
- "type": "boolean",
- "description": "Whether to make this contribution anonymous",
- "example": false,
- "default": false
- }
- },
- "required": ["amount"]
- },
"ValidateMilestoneSubmissionDto": {
"type": "object",
"properties": {
@@ -27026,7 +36563,9 @@
"https://example.com/screenshot.png"
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"proofOfWorkLinks": {
"description": "Array of proof of work links (GitHub PRs, demos, deployed sites, etc.) - must be valid URLs",
@@ -27035,7 +36574,9 @@
"https://demo.example.com"
],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"submissionNotes": {
"type": "string",
@@ -27052,12 +36593,16 @@
"proofOfWorkFiles": {
"description": "Array of proof of work file URLs (documents, images, etc.)",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"proofOfWorkLinks": {
"description": "Array of proof of work links (GitHub PRs, demos, etc.)",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"submissionNotes": {
"type": "string",
@@ -27163,6 +36708,16 @@
},
"required": ["contributorAddress", "walletOrigin", "amount"]
},
+ "CrowdfundingSubmitSignedXdrDto": {
+ "type": "object",
+ "properties": {
+ "signedXdr": {
+ "type": "string",
+ "description": "Signed transaction XDR returned by the wallet."
+ }
+ },
+ "required": ["signedXdr"]
+ },
"CastCrowdfundingVoteDto": {
"type": "object",
"properties": {
@@ -27182,6 +36737,12 @@
"type": "string",
"description": "The user delegated to validate this campaign's milestones. D6=A: exactly one reviewer per campaign, assigned at approval time.",
"example": "user_1234567890"
+ },
+ "voteGoal": {
+ "type": "number",
+ "description": "Minimum total community votes required to resolve the vote (quorum). Defaults to 1 for now (target is 10 at launch).",
+ "example": 10,
+ "minimum": 1
}
},
"required": ["delegatedReviewerId"]
@@ -27195,12 +36756,44 @@
}
}
},
+ "ExtendCrowdfundingFundingDto": {
+ "type": "object",
+ "properties": {
+ "fundingEndDate": {
+ "type": "string",
+ "description": "New funding deadline (ISO 8601). Must be in the future. Enforced off-chain by the contribute gate.",
+ "example": "2026-08-01T00:00:00.000Z"
+ }
+ },
+ "required": ["fundingEndDate"]
+ },
"PauseCrowdfundingCampaignDto": {
"type": "object",
"properties": {
- "reason": { "type": "string", "description": "Reason for the pause." }
+ "reason": {
+ "type": "string",
+ "description": "Reason for the pause."
+ }
}
},
+ "ApproveCrowdfundingMilestoneDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "RejectCrowdfundingMilestoneDto": {
+ "type": "object",
+ "properties": {
+ "rejectionFeedback": {
+ "type": "string",
+ "description": "Feedback shown to the builder."
+ },
+ "resubmissionDeadline": {
+ "type": "string",
+ "description": "Deadline by which the builder must resubmit (ISO 8601)."
+ }
+ },
+ "required": ["rejectionFeedback"]
+ },
"ReclaimDormantDto": {
"type": "object",
"properties": {
@@ -27351,7 +36944,10 @@
},
"required": ["content", "entityType", "entityId"]
},
- "UpdateCommentDto": { "type": "object", "properties": {} },
+ "UpdateCommentDto": {
+ "type": "object",
+ "properties": {}
+ },
"AddReactionDto": {
"type": "object",
"properties": {
@@ -27416,7 +37012,10 @@
},
"required": ["status"]
},
- "HackathonsListResponseDto": { "type": "object", "properties": {} },
+ "HackathonsListResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
"FeeEstimateResponseDto": {
"type": "object",
"properties": {
@@ -27485,15 +37084,29 @@
"type": "string",
"description": "Name of the project"
},
- "teamName": { "type": "object", "description": "Name of the team" },
- "logo": { "type": "object", "description": "Logo of the project" },
+ "teamName": {
+ "type": "object",
+ "description": "Name of the team"
+ },
+ "logo": {
+ "type": "object",
+ "description": "Logo of the project"
+ },
"participants": {
"description": "List of participants",
"type": "array",
- "items": { "$ref": "#/components/schemas/ParticipantDto" }
+ "items": {
+ "$ref": "#/components/schemas/ParticipantDto"
+ }
+ },
+ "prize": {
+ "type": "string",
+ "description": "Prize information"
},
- "prize": { "type": "string", "description": "Prize information" },
- "submissionId": { "type": "string", "description": "Submission ID" }
+ "submissionId": {
+ "type": "string",
+ "description": "Submission ID"
+ }
},
"required": [
"rank",
@@ -27506,11 +37119,16 @@
"HackathonWinnersResponseDto": {
"type": "object",
"properties": {
- "hackathonId": { "type": "string", "description": "Hackathon ID" },
+ "hackathonId": {
+ "type": "string",
+ "description": "Hackathon ID"
+ },
"winners": {
"description": "List of winners",
"type": "array",
- "items": { "$ref": "#/components/schemas/HackathonWinnerDto" }
+ "items": {
+ "$ref": "#/components/schemas/HackathonWinnerDto"
+ }
}
},
"required": ["hackathonId", "winners"]
@@ -27518,21 +37136,52 @@
"PublicAggregatedJudgingResultDto": {
"type": "object",
"properties": {
- "submissionId": { "type": "string" },
- "projectName": { "type": "string" },
- "teamId": { "type": "object" },
- "participantId": { "type": "string" },
- "status": { "type": "string" },
- "submittedAt": { "format": "date-time", "type": "string" },
- "averageScore": { "type": "number" },
- "totalScore": { "type": "number" },
- "judgeCount": { "type": "number" },
- "expectedJudgeCount": { "type": "number" },
- "judgingProgress": { "type": "string" },
- "rank": { "type": "object" },
- "isComplete": { "type": "boolean" },
- "isPending": { "type": "boolean" },
- "hasDisagreement": { "type": "boolean" }
+ "submissionId": {
+ "type": "string"
+ },
+ "projectName": {
+ "type": "string"
+ },
+ "teamId": {
+ "type": "object"
+ },
+ "participantId": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "submittedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "averageScore": {
+ "type": "number"
+ },
+ "totalScore": {
+ "type": "number"
+ },
+ "judgeCount": {
+ "type": "number"
+ },
+ "expectedJudgeCount": {
+ "type": "number"
+ },
+ "judgingProgress": {
+ "type": "string"
+ },
+ "rank": {
+ "type": "object"
+ },
+ "isComplete": {
+ "type": "boolean"
+ },
+ "isPending": {
+ "type": "boolean"
+ },
+ "hasDisagreement": {
+ "type": "boolean"
+ }
},
"required": [
"submissionId",
@@ -27553,11 +37202,21 @@
"JudgingResultsMetadataDto": {
"type": "object",
"properties": {
- "sortedBy": { "type": "string" },
- "includesVariance": { "type": "boolean" },
- "includesIndividualScores": { "type": "boolean" },
- "includesProgressTracking": { "type": "boolean" },
- "onlyWinners": { "type": "boolean" }
+ "sortedBy": {
+ "type": "string"
+ },
+ "includesVariance": {
+ "type": "boolean"
+ },
+ "includesIndividualScores": {
+ "type": "boolean"
+ },
+ "includesProgressTracking": {
+ "type": "boolean"
+ },
+ "onlyWinners": {
+ "type": "boolean"
+ }
},
"required": [
"sortedBy",
@@ -27569,23 +37228,42 @@
"PublicJudgingResultsResponseDto": {
"type": "object",
"properties": {
- "hackathonId": { "type": "string" },
- "totalSubmissions": { "type": "number" },
- "submissionsScoredCount": { "type": "number" },
- "submissionsPendingCount": { "type": "number" },
- "averageScoreAcrossAll": { "type": "number" },
- "resultsPublished": { "type": "boolean" },
- "judgesAssigned": { "type": "number" },
+ "hackathonId": {
+ "type": "string"
+ },
+ "totalSubmissions": {
+ "type": "number"
+ },
+ "submissionsScoredCount": {
+ "type": "number"
+ },
+ "submissionsPendingCount": {
+ "type": "number"
+ },
+ "averageScoreAcrossAll": {
+ "type": "number"
+ },
+ "resultsPublished": {
+ "type": "boolean"
+ },
+ "judgesAssigned": {
+ "type": "number"
+ },
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/PublicAggregatedJudgingResultDto"
}
},
- "generatedAt": { "format": "date-time", "type": "string" },
+ "generatedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"winnerOverrides": {
"type": "object",
- "additionalProperties": { "type": "number" },
+ "additionalProperties": {
+ "type": "number"
+ },
"description": "Manual winner assignments override (submissionId -> rank)"
},
"metadata": {
@@ -27608,51 +37286,98 @@
"CreatorRelationDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "username": { "type": "string" },
- "image": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ }
},
"required": ["id", "name"]
},
"OrganizationRelationDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "logo": { "type": "string" },
- "slug": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ }
},
"required": ["id", "name"]
},
"HackathonResponseDto": {
"type": "object",
"properties": {
- "createdBy": { "$ref": "#/components/schemas/CreatorRelationDto" },
+ "createdBy": {
+ "$ref": "#/components/schemas/CreatorRelationDto"
+ },
"organization": {
"$ref": "#/components/schemas/OrganizationRelationDto"
}
},
"required": ["createdBy"]
},
+ "VerifyHackathonAccessDto": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "string",
+ "description": "The access password for a private hackathon"
+ }
+ },
+ "required": ["password"]
+ },
+ "HackathonAccessTokenResponseDto": {
+ "type": "object",
+ "properties": {
+ "accessToken": {
+ "type": "string"
+ }
+ },
+ "required": ["accessToken"]
+ },
"JoinHackathonDto": {
"type": "object",
"properties": {
"customAnswers": {
"type": "object",
"description": "Answers to REGISTRATION-scope custom questions. Keyed by question id; each value is a string (or string[] for multi-select).",
- "example": { "cq_role": "Backend developer" }
+ "example": {
+ "cq_role": "Backend developer"
+ }
}
}
},
- "ParticipationResponseDto": { "type": "object", "properties": {} },
- "ParticipantResponseDto": { "type": "object", "properties": {} },
+ "ParticipationResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "ParticipantResponseDto": {
+ "type": "object",
+ "properties": {}
+ },
"HackathonParticipantsResponseDto": {
"type": "object",
"properties": {
"participants": {
"type": "array",
- "items": { "$ref": "#/components/schemas/ParticipantResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/ParticipantResponseDto"
+ }
}
},
"required": ["participants"]
@@ -27745,49 +37470,118 @@
"SubmissionResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "hackathonId": { "type": "string" },
- "projectId": { "type": "string" },
- "participantId": { "type": "string" },
- "organizationId": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "hackathonId": {
+ "type": "string"
+ },
+ "projectId": {
+ "type": "string"
+ },
+ "participantId": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
"participationType": {
"type": "string",
"enum": ["INDIVIDUAL", "TEAM"]
},
- "teamId": { "type": "string" },
- "teamName": { "type": "string" },
+ "teamId": {
+ "type": "string"
+ },
+ "teamName": {
+ "type": "string"
+ },
"teamMembers": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamMemberDto" }
- },
- "projectName": { "type": "string" },
- "category": { "type": "string" },
- "description": { "type": "string" },
- "logo": { "type": "string" },
- "banner": { "type": "string" },
- "videoUrl": { "type": "string" },
- "introduction": { "type": "string" },
+ "items": {
+ "$ref": "#/components/schemas/TeamMemberDto"
+ }
+ },
+ "projectName": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "banner": {
+ "type": "string"
+ },
+ "videoUrl": {
+ "type": "string"
+ },
+ "introduction": {
+ "type": "string"
+ },
"links": {
"type": "array",
- "items": { "$ref": "#/components/schemas/SubmissionLinkDto" }
+ "items": {
+ "$ref": "#/components/schemas/SubmissionLinkDto"
+ }
+ },
+ "socialLinks": {
+ "$ref": "#/components/schemas/SocialLinksDto"
+ },
+ "status": {
+ "type": "string"
+ },
+ "rank": {
+ "type": "number"
},
- "socialLinks": { "$ref": "#/components/schemas/SocialLinksDto" },
- "status": { "type": "string" },
- "rank": { "type": "number" },
"trackEntries": {
"description": "Track entries this submission has opted into. Each entry carries the track slug/name and a wonRank stamped when the submission won that track (null until results are published).",
"type": "array",
- "items": { "type": "array" }
- },
- "tagline": { "type": "string" },
- "builtWith": { "type": "array", "items": { "type": "string" } },
- "screenshots": { "type": "array", "items": { "type": "string" } },
- "license": { "type": "string" },
- "codeAttestedAt": { "format": "date-time", "type": "string" },
- "registeredAt": { "format": "date-time", "type": "string" },
- "submittedAt": { "format": "date-time", "type": "string" },
- "createdAt": { "format": "date-time", "type": "string" },
- "updatedAt": { "format": "date-time", "type": "string" }
+ "items": {
+ "type": "array"
+ }
+ },
+ "tagline": {
+ "type": "string"
+ },
+ "builtWith": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "screenshots": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "license": {
+ "type": "string"
+ },
+ "codeAttestedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "registeredAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "submittedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
},
"required": [
"id",
@@ -27841,7 +37635,9 @@
"description": "[Ignored by backend.] Team members are snapshotted from the user's authoritative team record at submission time. Sending this field has no effect.",
"deprecated": true,
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamMemberDto" }
+ "items": {
+ "$ref": "#/components/schemas/TeamMemberDto"
+ }
},
"projectName": {
"type": "string",
@@ -27881,17 +37677,25 @@
"links": {
"description": "Links to project resources. Each fixed link type (github, demo, video, document, presentation) can appear at most once. Use \"other\" for additional links, up to a maximum of 5.",
"type": "array",
- "items": { "$ref": "#/components/schemas/SubmissionLinkDto" }
+ "items": {
+ "$ref": "#/components/schemas/SubmissionLinkDto"
+ }
},
"socialLinks": {
"description": "Social links for the project",
- "allOf": [{ "$ref": "#/components/schemas/SocialLinksDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SocialLinksDto"
+ }
+ ]
},
"trackIds": {
"description": "Optional list of track ids to enter. Only allowed when the hackathon has prizeStructure != OVERALL_ONLY. Capped at Hackathon.tracksMaxPerSubmission.",
"example": ["trk_abc", "trk_def"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"trackAnswers": {
"type": "object",
@@ -27899,8 +37703,12 @@
"example": {
"trk_abc": {
"promptAnswer": "We focused on a one-tap escrow flow.",
- "customAnswers": { "q_audience": "Freelancers" },
- "artifacts": { "figma": "https://figma.com/file/..." }
+ "customAnswers": {
+ "q_audience": "Freelancers"
+ },
+ "artifacts": {
+ "figma": "https://figma.com/file/..."
+ }
}
}
},
@@ -27915,23 +37723,22 @@
"tagline": {
"type": "string",
"description": "Short elevator pitch shown on cards / sidebars / judge queue. Max ~160 chars.",
- "example": "Trustless escrow for one-time freelance gigs on Stellar."
+ "example": "Milestone-based escrow for one-time freelance gigs on Stellar."
},
"builtWith": {
"description": "Free-form tech-stack tags. Max 20 entries, 40 chars each.",
- "example": [
- "Soroban",
- "Stellar SDK",
- "Next.js",
- "TrustlessWork SDK"
- ],
+ "example": ["Soroban", "Stellar SDK", "Next.js", "Rust"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"screenshots": {
"description": "Up to 5 screenshot URLs for the project gallery.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"license": {
"type": "string",
@@ -28000,21 +37807,31 @@
"links": {
"description": "Links to project resources. Each fixed link type (github, demo, video, document, presentation) can appear at most once. Use \"other\" for additional links, up to a maximum of 5.",
"type": "array",
- "items": { "$ref": "#/components/schemas/SubmissionLinkDto" }
+ "items": {
+ "$ref": "#/components/schemas/SubmissionLinkDto"
+ }
},
"socialLinks": {
"description": "Social links for the project",
- "allOf": [{ "$ref": "#/components/schemas/SocialLinksDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/SocialLinksDto"
+ }
+ ]
},
"teamMembers": {
"description": "Team members (for team submissions)",
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamMemberDto" }
+ "items": {
+ "$ref": "#/components/schemas/TeamMemberDto"
+ }
},
"trackIds": {
"description": "Replace the submission's track picks. Omit to leave existing entries untouched; pass an empty array to clear all picks.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"trackAnswers": {
"type": "object",
@@ -28028,9 +37845,21 @@
"cq_stack": ["Web", "AI"]
}
},
- "tagline": { "type": "string" },
- "builtWith": { "type": "array", "items": { "type": "string" } },
- "screenshots": { "type": "array", "items": { "type": "string" } },
+ "tagline": {
+ "type": "string"
+ },
+ "builtWith": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "screenshots": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"license": {
"type": "string",
"enum": [
@@ -28042,20 +37871,34 @@
"OTHER"
]
},
- "codeAttested": { "type": "boolean" }
+ "codeAttested": {
+ "type": "boolean"
+ }
}
},
"TeamMemberResponseDto": {
"type": "object",
"properties": {
- "userId": { "type": "string", "description": "User ID" },
- "username": { "type": "string", "description": "Username" },
- "name": { "type": "string", "description": "Display name" },
+ "userId": {
+ "type": "string",
+ "description": "User ID"
+ },
+ "username": {
+ "type": "string",
+ "description": "Username"
+ },
+ "name": {
+ "type": "string",
+ "description": "Display name"
+ },
"role": {
"type": "string",
"description": "Role in team (e.g. leader, member)"
},
- "image": { "type": "string", "description": "Profile image URL" },
+ "image": {
+ "type": "string",
+ "description": "Profile image URL"
+ },
"joinedAt": {
"type": "string",
"description": "When the member joined the team (ISO string)"
@@ -28075,7 +37918,9 @@
"description": "Optional free-form skills associated with this role",
"example": ["React", "TypeScript"],
"type": "array",
- "items": { "type": "array" }
+ "items": {
+ "type": "array"
+ }
}
},
"required": ["role"]
@@ -28083,7 +37928,10 @@
"TeamRoleResponseDto": {
"type": "object",
"properties": {
- "skill": { "type": "string", "description": "Skill/role name" },
+ "skill": {
+ "type": "string",
+ "description": "Skill/role name"
+ },
"hired": {
"type": "boolean",
"description": "Whether this role has been filled"
@@ -28108,7 +37956,10 @@
"type": "string",
"description": "Team description"
},
- "hackathonId": { "type": "string", "description": "Hackathon ID" },
+ "hackathonId": {
+ "type": "string",
+ "description": "Hackathon ID"
+ },
"leader": {
"type": "object",
"description": "Team leader information"
@@ -28116,7 +37967,9 @@
"members": {
"description": "Team members",
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamMemberResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TeamMemberResponseDto"
+ }
},
"memberCount": {
"type": "number",
@@ -28131,12 +37984,16 @@
"lookingFor": {
"description": "Roles the team is looking for, with optional free-form skills",
"type": "array",
- "items": { "$ref": "#/components/schemas/LookingForRoleDto" }
+ "items": {
+ "$ref": "#/components/schemas/LookingForRoleDto"
+ }
},
"rolesStatus": {
"description": "Hired status per role (when using lookingFor)",
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamRoleResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TeamRoleResponseDto"
+ }
},
"contactInfo": {
"type": "object",
@@ -28151,7 +38008,10 @@
"type": "string",
"description": "Team creation date"
},
- "updatedAt": { "type": "string", "description": "Last update date" }
+ "updatedAt": {
+ "type": "string",
+ "description": "Last update date"
+ }
},
"required": [
"id",
@@ -28173,7 +38033,9 @@
"teams": {
"description": "List of teams",
"type": "array",
- "items": { "$ref": "#/components/schemas/TeamResponseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TeamResponseDto"
+ }
},
"pagination": {
"type": "object",
@@ -28202,12 +38064,17 @@
"lookingFor": {
"description": "Roles the team is looking for. Each entry is a role title with optional free-form skills. Team will be CLOSED unless at least one role is specified. The number of roles is bounded by the hackathon's teamMin/teamMax (excluding the leader).",
"type": "array",
- "items": { "$ref": "#/components/schemas/LookingForRoleDto" }
+ "items": {
+ "$ref": "#/components/schemas/LookingForRoleDto"
+ }
},
"contactInfo": {
"type": "object",
"description": "Contact information for interested members",
- "example": { "telegram": "@teamlead", "discord": "lead#1234" }
+ "example": {
+ "telegram": "@teamlead",
+ "discord": "lead#1234"
+ }
}
},
"required": ["teamName", "description"]
@@ -28227,7 +38094,9 @@
"lookingFor": {
"description": "Roles the team is looking for. Set to empty array to close the team. Each entry is a role title with optional free-form skills.",
"type": "array",
- "items": { "$ref": "#/components/schemas/LookingForRoleDto" }
+ "items": {
+ "$ref": "#/components/schemas/LookingForRoleDto"
+ }
},
"contactInfo": {
"type": "object",
@@ -28273,8 +38142,14 @@
"type": "object",
"description": "Hackathon information"
},
- "invitee": { "type": "object", "description": "Invitee information" },
- "inviter": { "type": "object", "description": "Inviter information" },
+ "invitee": {
+ "type": "object",
+ "description": "Invitee information"
+ },
+ "inviter": {
+ "type": "object",
+ "description": "Inviter information"
+ },
"status": {
"type": "string",
"description": "Invitation status",
@@ -28355,7 +38230,9 @@
"invitation": {
"description": "Updated invitation",
"allOf": [
- { "$ref": "#/components/schemas/TeamInvitationResponseDto" }
+ {
+ "$ref": "#/components/schemas/TeamInvitationResponseDto"
+ }
]
}
},
@@ -28399,7 +38276,11 @@
},
"team": {
"description": "Updated team with new leader",
- "allOf": [{ "$ref": "#/components/schemas/TeamResponseDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TeamResponseDto"
+ }
+ ]
},
"previousLeaderId": {
"type": "string",
@@ -28509,11 +38390,21 @@
"description": "Short tagline",
"maxLength": 200
},
- "country": { "type": "string" },
- "state": { "type": "string" },
- "city": { "type": "string" },
- "venueName": { "type": "string" },
- "venueAddress": { "type": "string" },
+ "country": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "city": {
+ "type": "string"
+ },
+ "venueName": {
+ "type": "string"
+ },
+ "venueAddress": {
+ "type": "string"
+ },
"slug": {
"type": "string",
"description": "Read-only URL slug (server-assigned)"
@@ -28531,24 +38422,52 @@
"PhaseDto": {
"type": "object",
"properties": {
- "name": { "type": "string", "description": "Phase name" },
- "startDate": { "type": "string", "format": "date-time" },
- "endDate": { "type": "string", "format": "date-time" },
- "description": { "type": "string" }
+ "name": {
+ "type": "string",
+ "description": "Phase name"
+ },
+ "startDate": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "endDate": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "description": {
+ "type": "string"
+ }
},
"required": ["name", "startDate", "endDate"]
},
"TimelineFormData": {
"type": "object",
"properties": {
- "startDate": { "type": "string", "format": "date-time" },
- "submissionDeadline": { "type": "string", "format": "date-time" },
- "timezone": { "type": "string", "description": "IANA timezone" },
- "registrationDeadline": { "type": "string", "format": "date-time" },
- "judgingDeadline": { "type": "string", "format": "date-time" },
+ "startDate": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "submissionDeadline": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "timezone": {
+ "type": "string",
+ "description": "IANA timezone"
+ },
+ "registrationDeadline": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "judgingDeadline": {
+ "type": "string",
+ "format": "date-time"
+ },
"phases": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PhaseDto" }
+ "items": {
+ "$ref": "#/components/schemas/PhaseDto"
+ }
},
"submissionDeadlineOriginal": {
"type": "string",
@@ -28570,26 +38489,60 @@
"type": "string",
"enum": ["individual", "team", "team_or_individual"]
},
- "teamMin": { "type": "number", "minimum": 1, "maximum": 20 },
- "teamMax": { "type": "number", "minimum": 1, "maximum": 20 },
+ "teamMin": {
+ "type": "number",
+ "minimum": 1,
+ "maximum": 20
+ },
+ "teamMax": {
+ "type": "number",
+ "minimum": 1,
+ "maximum": 20
+ },
"maxParticipants": {
"type": "number",
"minimum": 1,
"description": "Participant cap; omit for unlimited"
},
- "require_github": { "type": "boolean" },
- "require_demo_video": { "type": "boolean" },
- "require_other_links": { "type": "boolean" },
- "detailsTab": { "type": "boolean" },
- "participantsTab": { "type": "boolean" },
- "resourcesTab": { "type": "boolean" },
- "submissionTab": { "type": "boolean" },
- "announcementsTab": { "type": "boolean" },
- "discussionTab": { "type": "boolean" },
- "winnersTab": { "type": "boolean" },
- "sponsorsTab": { "type": "boolean" },
- "joinATeamTab": { "type": "boolean" },
- "rulesTab": { "type": "boolean" },
+ "require_github": {
+ "type": "boolean"
+ },
+ "require_demo_video": {
+ "type": "boolean"
+ },
+ "require_other_links": {
+ "type": "boolean"
+ },
+ "detailsTab": {
+ "type": "boolean"
+ },
+ "participantsTab": {
+ "type": "boolean"
+ },
+ "resourcesTab": {
+ "type": "boolean"
+ },
+ "submissionTab": {
+ "type": "boolean"
+ },
+ "announcementsTab": {
+ "type": "boolean"
+ },
+ "discussionTab": {
+ "type": "boolean"
+ },
+ "winnersTab": {
+ "type": "boolean"
+ },
+ "sponsorsTab": {
+ "type": "boolean"
+ },
+ "joinATeamTab": {
+ "type": "boolean"
+ },
+ "rulesTab": {
+ "type": "boolean"
+ },
"submissionVisibility": {
"type": "string",
"enum": ["PUBLIC", "PARTICIPANTS_ONLY"]
@@ -28613,7 +38566,10 @@
"PrizeTierDto": {
"type": "object",
"properties": {
- "id": { "type": "string", "description": "Client-generated tier id" },
+ "id": {
+ "type": "string",
+ "description": "Client-generated tier id"
+ },
"place": {
"type": "string",
"description": "Placement label, e.g. \"1st Place\""
@@ -28622,11 +38578,24 @@
"type": "string",
"description": "Prize amount as a decimal string"
},
- "description": { "type": "string" },
- "currency": { "type": "string" },
- "passMark": { "type": "number", "minimum": 0, "maximum": 100 },
- "kind": { "type": "string", "enum": ["OVERALL", "TRACK"] },
- "trackId": { "type": "string" }
+ "description": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "passMark": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "kind": {
+ "type": "string",
+ "enum": ["OVERALL", "TRACK"]
+ },
+ "trackId": {
+ "type": "string"
+ }
},
"required": ["id", "place", "prizeAmount", "passMark"]
},
@@ -28637,13 +38606,21 @@
"type": "number",
"description": "1 = 1st place; unique within a prize"
},
- "label": { "type": "string" },
+ "label": {
+ "type": "string"
+ },
"amount": {
"type": "string",
"description": "Prize amount as a decimal string"
},
- "currency": { "type": "string" },
- "passMark": { "type": "number", "minimum": 0, "maximum": 100 }
+ "currency": {
+ "type": "string"
+ },
+ "passMark": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ }
},
"required": ["position", "amount"]
},
@@ -28654,15 +38631,21 @@
"type": "string",
"description": "Prize name, e.g. \"Grand Prize\" or \"Best UI/UX\""
},
- "description": { "type": "string" },
+ "description": {
+ "type": "string"
+ },
"trackIds": {
"description": "Linked HackathonTrack ids; empty = overall prize",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"placements": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PrizePlacementWriteDto" }
+ "items": {
+ "$ref": "#/components/schemas/PrizePlacementWriteDto"
+ }
}
},
"required": ["name", "trackIds", "placements"]
@@ -28674,9 +38657,16 @@
"type": "string",
"description": "Submission id the override targets"
},
- "rank": { "type": "number", "minimum": 1 },
- "prizeAmount": { "type": "string" },
- "currency": { "type": "string" }
+ "rank": {
+ "type": "number",
+ "minimum": 1
+ },
+ "prizeAmount": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ }
},
"required": ["submissionId"]
},
@@ -28685,15 +38675,21 @@
"properties": {
"prizeTiers": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PrizeTierDto" }
+ "items": {
+ "$ref": "#/components/schemas/PrizeTierDto"
+ }
},
"prizes": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PrizeWriteDto" }
+ "items": {
+ "$ref": "#/components/schemas/PrizeWriteDto"
+ }
},
"winnerOverrides": {
"type": "array",
- "items": { "$ref": "#/components/schemas/WinnerOverrideDto" }
+ "items": {
+ "$ref": "#/components/schemas/WinnerOverrideDto"
+ }
},
"prizeStructure": {
"type": "string",
@@ -28703,6 +38699,9 @@
"type": "number",
"minimum": 1,
"maximum": 20
+ },
+ "allowWinnerStacking": {
+ "type": "boolean"
}
}
},
@@ -28713,14 +38712,22 @@
"type": "string",
"description": "Client-generated resource id"
},
- "link": { "type": "string" },
- "description": { "type": "string" },
+ "link": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
"file": {
"type": "object",
"description": "Uploaded file metadata",
"properties": {
- "url": { "type": "string" },
- "name": { "type": "string" }
+ "url": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
}
}
},
@@ -28731,7 +38738,9 @@
"properties": {
"resources": {
"type": "array",
- "items": { "$ref": "#/components/schemas/ResourceItemDto" }
+ "items": {
+ "$ref": "#/components/schemas/ResourceItemDto"
+ }
}
},
"required": ["resources"]
@@ -28743,9 +38752,18 @@
"type": "string",
"description": "Client-generated criterion id"
},
- "name": { "type": "string", "description": "Criterion name" },
- "weight": { "type": "number", "minimum": 0, "maximum": 100 },
- "description": { "type": "string" }
+ "name": {
+ "type": "string",
+ "description": "Criterion name"
+ },
+ "weight": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "description": {
+ "type": "string"
+ }
},
"required": ["id", "name", "weight"]
},
@@ -28754,7 +38772,9 @@
"properties": {
"criteria": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CriterionDto" }
+ "items": {
+ "$ref": "#/components/schemas/CriterionDto"
+ }
}
},
"required": ["criteria"]
@@ -28766,9 +38786,15 @@
"type": "string",
"description": "Client-generated sponsor/partner id"
},
- "name": { "type": "string" },
- "logo": { "type": "string" },
- "link": { "type": "string" }
+ "name": {
+ "type": "string"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "link": {
+ "type": "string"
+ }
},
"required": ["id"]
},
@@ -28779,12 +38805,23 @@
"type": "string",
"description": "Organizer contact email"
},
- "telegram": { "type": "string" },
- "discord": { "type": "string" },
- "socialLinks": { "type": "array", "items": { "type": "string" } },
+ "telegram": {
+ "type": "string"
+ },
+ "discord": {
+ "type": "string"
+ },
+ "socialLinks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"sponsorsPartners": {
"type": "array",
- "items": { "$ref": "#/components/schemas/SponsorPartnerDto" }
+ "items": {
+ "$ref": "#/components/schemas/SponsorPartnerDto"
+ }
}
},
"required": ["contactEmail"]
@@ -28792,15 +38829,27 @@
"HackathonDraftDataDto": {
"type": "object",
"properties": {
- "information": { "$ref": "#/components/schemas/InfoFormData" },
- "timeline": { "$ref": "#/components/schemas/TimelineFormData" },
+ "information": {
+ "$ref": "#/components/schemas/InfoFormData"
+ },
+ "timeline": {
+ "$ref": "#/components/schemas/TimelineFormData"
+ },
"participation": {
"$ref": "#/components/schemas/ParticipantFormData"
},
- "tracks": { "$ref": "#/components/schemas/HackathonDraftTracksDto" },
- "rewards": { "$ref": "#/components/schemas/RewardsFormData" },
- "resources": { "$ref": "#/components/schemas/ResourcesFormData" },
- "judging": { "$ref": "#/components/schemas/JudgingFormData" },
+ "tracks": {
+ "$ref": "#/components/schemas/HackathonDraftTracksDto"
+ },
+ "rewards": {
+ "$ref": "#/components/schemas/RewardsFormData"
+ },
+ "resources": {
+ "$ref": "#/components/schemas/ResourcesFormData"
+ },
+ "judging": {
+ "$ref": "#/components/schemas/JudgingFormData"
+ },
"collaboration": {
"$ref": "#/components/schemas/CollaborationFormData"
}
@@ -28819,17 +38868,24 @@
"HackathonDraftPrizePlacementDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
"position": {
"type": "number",
"description": "1 = 1st place, unique within a prize"
},
- "label": { "type": "string", "nullable": true },
+ "label": {
+ "type": "string",
+ "nullable": true
+ },
"amount": {
"type": "string",
"description": "Decimal string in the prize currency"
},
- "currency": { "type": "string" },
+ "currency": {
+ "type": "string"
+ },
"passMark": {
"type": "number",
"description": "Minimum score (0-100) to win this placement"
@@ -28840,14 +38896,25 @@
"HackathonDraftPrizeDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "description": { "type": "string", "nullable": true },
- "displayOrder": { "type": "number" },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string",
+ "nullable": true
+ },
+ "displayOrder": {
+ "type": "number"
+ },
"trackIds": {
"description": "Linked track ids; empty = overall prize",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"placements": {
"type": "array",
@@ -28861,7 +38928,9 @@
"HackathonDraftResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
"status": {
"type": "string",
"enum": [
@@ -28876,29 +38945,50 @@
"type": "number",
"description": "First incomplete step (1-based)"
},
- "completedSteps": { "type": "array", "items": { "type": "string" } },
- "data": { "$ref": "#/components/schemas/HackathonDraftDataDto" },
- "isValidForPublish": { "type": "boolean" },
+ "completedSteps": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "data": {
+ "$ref": "#/components/schemas/HackathonDraftDataDto"
+ },
+ "isValidForPublish": {
+ "type": "boolean"
+ },
"validationErrors": {
"type": "object",
"additionalProperties": {
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"description": "Per-section validation messages, keyed by step"
},
- "createdAt": { "type": "string", "format": "date-time" },
- "updatedAt": { "type": "string", "format": "date-time" },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
"aiGeneration": {
"description": "Present when the draft was generated with Organizer Assist; enables per-section AI regenerate in the wizard.",
"allOf": [
- { "$ref": "#/components/schemas/HackathonDraftAiGenerationDto" }
+ {
+ "$ref": "#/components/schemas/HackathonDraftAiGenerationDto"
+ }
]
},
"prizes": {
"description": "Prize entity (named prizes + linked tracks + placements). Additive read path alongside data.rewards.prizeTiers; becomes authoritative as readers cut over.",
"type": "array",
- "items": { "$ref": "#/components/schemas/HackathonDraftPrizeDto" }
+ "items": {
+ "$ref": "#/components/schemas/HackathonDraftPrizeDto"
+ }
}
},
"required": [
@@ -28917,14 +39007,24 @@
"UpdateHackathonDraftDto": {
"type": "object",
"properties": {
- "information": { "$ref": "#/components/schemas/InfoFormData" },
- "timeline": { "$ref": "#/components/schemas/TimelineFormData" },
+ "information": {
+ "$ref": "#/components/schemas/InfoFormData"
+ },
+ "timeline": {
+ "$ref": "#/components/schemas/TimelineFormData"
+ },
"participation": {
"$ref": "#/components/schemas/ParticipantFormData"
},
- "rewards": { "$ref": "#/components/schemas/RewardsFormData" },
- "resources": { "$ref": "#/components/schemas/ResourcesFormData" },
- "judging": { "$ref": "#/components/schemas/JudgingFormData" },
+ "rewards": {
+ "$ref": "#/components/schemas/RewardsFormData"
+ },
+ "resources": {
+ "$ref": "#/components/schemas/ResourcesFormData"
+ },
+ "judging": {
+ "$ref": "#/components/schemas/JudgingFormData"
+ },
"collaboration": {
"$ref": "#/components/schemas/CollaborationFormData"
},
@@ -28958,7 +39058,9 @@
"description": "Up to 3 example briefs/drafts to steer style.",
"maxItems": 3,
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["brief", "budgetCapUsdc", "earliestStart"]
@@ -28966,9 +39068,15 @@
"AiGenerationMetaDto": {
"type": "object",
"properties": {
- "generationId": { "type": "string" },
- "model": { "type": "string" },
- "promptVersion": { "type": "string" },
+ "generationId": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "promptVersion": {
+ "type": "string"
+ },
"costUsd": {
"type": "string",
"description": "Cost in USD as a decimal string (never a float)."
@@ -28983,8 +39091,12 @@
"type": "string",
"description": "Id of the created draft."
},
- "draft": { "$ref": "#/components/schemas/HackathonDraftResponseDto" },
- "generation": { "$ref": "#/components/schemas/AiGenerationMetaDto" }
+ "draft": {
+ "$ref": "#/components/schemas/HackathonDraftResponseDto"
+ },
+ "generation": {
+ "$ref": "#/components/schemas/AiGenerationMetaDto"
+ }
},
"required": ["draftId", "draft", "generation"]
},
@@ -29015,7 +39127,9 @@
"additionalProperties": true,
"description": "Regenerated values in the wizard section shape."
},
- "generation": { "$ref": "#/components/schemas/AiGenerationMetaDto" }
+ "generation": {
+ "$ref": "#/components/schemas/AiGenerationMetaDto"
+ }
},
"required": ["section", "data", "generation"]
},
@@ -29093,7 +39207,9 @@
"description": "Array of submission IDs",
"example": ["sub_1234567890", "sub_0987654321"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"action": {
"type": "string",
@@ -29112,10 +39228,22 @@
"SummaryMetricsDto": {
"type": "object",
"properties": {
- "participantsCount": { "type": "number", "example": 120 },
- "submissionsCount": { "type": "number", "example": 45 },
- "activeJudges": { "type": "number", "example": 6 },
- "completedMilestones": { "type": "number", "example": 3 }
+ "participantsCount": {
+ "type": "number",
+ "example": 120
+ },
+ "submissionsCount": {
+ "type": "number",
+ "example": 45
+ },
+ "activeJudges": {
+ "type": "number",
+ "example": 6
+ },
+ "completedMilestones": {
+ "type": "number",
+ "example": 3
+ }
},
"required": [
"participantsCount",
@@ -29127,8 +39255,14 @@
"TrendPointDto": {
"type": "object",
"properties": {
- "date": { "type": "string", "example": "2026-02-01" },
- "count": { "type": "number", "example": 5 }
+ "date": {
+ "type": "string",
+ "example": "2026-02-01"
+ },
+ "count": {
+ "type": "number",
+ "example": 5
+ }
},
"required": ["date", "count"]
},
@@ -29137,11 +39271,15 @@
"properties": {
"submissionsOverTime": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrendPointDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrendPointDto"
+ }
},
"participantSignupsOverTime": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrendPointDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrendPointDto"
+ }
}
},
"required": ["submissionsOverTime", "participantSignupsOverTime"]
@@ -29149,12 +39287,18 @@
"TimelinePhaseDto": {
"type": "object",
"properties": {
- "phase": { "type": "string", "example": "Registration" },
+ "phase": {
+ "type": "string",
+ "example": "Registration"
+ },
"description": {
"type": "string",
"example": "Individuals and teams are signing up to participate in the hackathon."
},
- "date": { "type": "string", "example": "2026-01-20" },
+ "date": {
+ "type": "string",
+ "example": "2026-01-20"
+ },
"status": {
"type": "string",
"enum": ["upcoming", "ongoing", "completed"]
@@ -29165,12 +39309,21 @@
"HackathonAnalyticsResponseDto": {
"type": "object",
"properties": {
- "hackathonId": { "type": "string", "example": "hack_1234567890" },
- "summary": { "$ref": "#/components/schemas/SummaryMetricsDto" },
- "trends": { "$ref": "#/components/schemas/TrendsDto" },
+ "hackathonId": {
+ "type": "string",
+ "example": "hack_1234567890"
+ },
+ "summary": {
+ "$ref": "#/components/schemas/SummaryMetricsDto"
+ },
+ "trends": {
+ "$ref": "#/components/schemas/TrendsDto"
+ },
"timeline": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TimelinePhaseDto" }
+ "items": {
+ "$ref": "#/components/schemas/TimelinePhaseDto"
+ }
}
},
"required": ["hackathonId", "summary", "trends", "timeline"]
@@ -29178,26 +39331,57 @@
"AnnouncementAuthorDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "image": { "type": "string" },
- "username": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ }
},
"required": ["id", "name"]
},
"AnnouncementResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "hackathonId": { "type": "string" },
- "title": { "type": "string" },
- "content": { "type": "string" },
- "isDraft": { "type": "boolean" },
- "isPinned": { "type": "boolean" },
- "publishedAt": { "format": "date-time", "type": "string" },
- "createdAt": { "format": "date-time", "type": "string" },
- "updatedAt": { "format": "date-time", "type": "string" },
- "author": { "$ref": "#/components/schemas/AnnouncementAuthorDto" }
+ "id": {
+ "type": "string"
+ },
+ "hackathonId": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "isDraft": {
+ "type": "boolean"
+ },
+ "isPinned": {
+ "type": "boolean"
+ },
+ "publishedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "author": {
+ "$ref": "#/components/schemas/AnnouncementAuthorDto"
+ }
},
"required": [
"id",
@@ -29300,7 +39484,9 @@
"criteriaScores": {
"description": "Scores for each individual criterion",
"type": "array",
- "items": { "$ref": "#/components/schemas/CriterionScoreDto" }
+ "items": {
+ "$ref": "#/components/schemas/CriterionScoreDto"
+ }
},
"judgeId": {
"type": "string",
@@ -29323,42 +39509,97 @@
"UserDetailsDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "email": { "type": "string" },
- "name": { "type": "string" },
- "username": { "type": "string" },
- "image": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ }
},
"required": ["id", "email", "name", "username"]
},
"JudgingSubmissionParticipantDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "userId": { "type": "string" },
- "user": { "$ref": "#/components/schemas/UserDetailsDto" },
- "participationType": { "type": "string" },
- "teamId": { "type": "string" },
- "teamName": { "type": "string" },
- "teamMembers": { "type": "array", "items": { "type": "object" } }
+ "id": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "user": {
+ "$ref": "#/components/schemas/UserDetailsDto"
+ },
+ "participationType": {
+ "type": "string"
+ },
+ "teamId": {
+ "type": "string"
+ },
+ "teamName": {
+ "type": "string"
+ },
+ "teamMembers": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ }
},
"required": ["id", "userId", "user", "participationType"]
},
"JudgingSubmissionDataDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "projectName": { "type": "string" },
- "category": { "type": "string" },
- "description": { "type": "string" },
- "logo": { "type": "string" },
- "videoUrl": { "type": "string" },
- "introduction": { "type": "string" },
- "links": { "type": "array", "items": { "type": "object" } },
- "socialLinks": { "type": "object", "additionalProperties": true },
- "submissionDate": { "type": "string" },
- "status": { "type": "string" },
- "rank": { "type": "number" }
+ "id": {
+ "type": "string"
+ },
+ "projectName": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "videoUrl": {
+ "type": "string"
+ },
+ "introduction": {
+ "type": "string"
+ },
+ "links": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "socialLinks": {
+ "type": "object",
+ "additionalProperties": true
+ },
+ "submissionDate": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "rank": {
+ "type": "number"
+ }
},
"required": [
"id",
@@ -29372,14 +39613,25 @@
"IndividualJudgingResultDto": {
"type": "object",
"properties": {
- "judgeId": { "type": "string" },
- "judgeName": { "type": "string" },
+ "judgeId": {
+ "type": "string"
+ },
+ "judgeName": {
+ "type": "string"
+ },
"criteriaScores": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CriterionScoreDto" }
+ "items": {
+ "$ref": "#/components/schemas/CriterionScoreDto"
+ }
+ },
+ "totalScore": {
+ "type": "number"
},
- "totalScore": { "type": "number" },
- "submittedAt": { "format": "date-time", "type": "string" }
+ "submittedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
},
"required": [
"judgeId",
@@ -29401,18 +39653,31 @@
"myScore": {
"$ref": "#/components/schemas/IndividualJudgingResultDto"
},
- "averageScore": { "type": "object", "nullable": true },
- "judgeCount": { "type": "number" }
+ "averageScore": {
+ "type": "object",
+ "nullable": true
+ },
+ "judgeCount": {
+ "type": "number"
+ }
},
"required": ["participant", "submission", "averageScore", "judgeCount"]
},
"JudgingPaginationDto": {
"type": "object",
"properties": {
- "page": { "type": "number" },
- "limit": { "type": "number" },
- "total": { "type": "number" },
- "totalPages": { "type": "number" }
+ "page": {
+ "type": "number"
+ },
+ "limit": {
+ "type": "number"
+ },
+ "total": {
+ "type": "number"
+ },
+ "totalPages": {
+ "type": "number"
+ }
},
"required": ["page", "limit", "total", "totalPages"]
},
@@ -29421,13 +39686,19 @@
"properties": {
"submissions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/JudgingSubmissionDto" }
+ "items": {
+ "$ref": "#/components/schemas/JudgingSubmissionDto"
+ }
},
"criteria": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CriterionDto" }
+ "items": {
+ "$ref": "#/components/schemas/CriterionDto"
+ }
+ },
+ "pagination": {
+ "$ref": "#/components/schemas/JudgingPaginationDto"
},
- "pagination": { "$ref": "#/components/schemas/JudgingPaginationDto" },
"scoredCount": {
"type": "number",
"description": "Number of submissions in this hackathon that the calling judge has already scored. Independent of pagination so the progress strip is accurate even when the user is on page 2."
@@ -29449,72 +39720,148 @@
"JudgeResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "userId": { "type": "string" },
- "name": { "type": "string" },
- "image": { "type": "object" }
+ "id": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "image": {
+ "type": "object"
+ }
},
"required": ["id", "userId", "name"]
},
"IndividualScoreDto": {
"type": "object",
"properties": {
- "judgeId": { "type": "string" },
- "judgeName": { "type": "string" },
- "score": { "type": "number" }
+ "judgeId": {
+ "type": "string"
+ },
+ "judgeName": {
+ "type": "string"
+ },
+ "score": {
+ "type": "number"
+ }
},
"required": ["judgeId", "judgeName", "score"]
},
"ScoreRangeDto": {
"type": "object",
"properties": {
- "min": { "type": "number" },
- "max": { "type": "number" }
+ "min": {
+ "type": "number"
+ },
+ "max": {
+ "type": "number"
+ }
},
"required": ["min", "max"]
},
"CriteriaBreakdownDto": {
"type": "object",
"properties": {
- "criterionId": { "type": "string" },
- "averageScore": { "type": "number" },
- "min": { "type": "number" },
- "max": { "type": "number" },
- "variance": { "type": "number" }
+ "criterionId": {
+ "type": "string"
+ },
+ "averageScore": {
+ "type": "number"
+ },
+ "min": {
+ "type": "number"
+ },
+ "max": {
+ "type": "number"
+ },
+ "variance": {
+ "type": "number"
+ }
},
"required": ["criterionId", "averageScore", "min", "max", "variance"]
},
"AggregatedJudgingResultDto": {
"type": "object",
"properties": {
- "submissionId": { "type": "string" },
- "projectName": { "type": "string" },
- "teamId": { "type": "object" },
- "participantId": { "type": "string" },
- "status": { "type": "string" },
- "submittedAt": { "format": "date-time", "type": "string" },
- "averageScore": { "type": "number" },
- "totalScore": { "type": "number" },
- "judgeCount": { "type": "number" },
- "expectedJudgeCount": { "type": "number" },
- "judgingProgress": { "type": "string" },
+ "submissionId": {
+ "type": "string"
+ },
+ "projectName": {
+ "type": "string"
+ },
+ "teamId": {
+ "type": "object"
+ },
+ "participantId": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "submittedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "averageScore": {
+ "type": "number"
+ },
+ "totalScore": {
+ "type": "number"
+ },
+ "judgeCount": {
+ "type": "number"
+ },
+ "expectedJudgeCount": {
+ "type": "number"
+ },
+ "judgingProgress": {
+ "type": "string"
+ },
"individualScores": {
"type": "array",
- "items": { "$ref": "#/components/schemas/IndividualScoreDto" }
+ "items": {
+ "$ref": "#/components/schemas/IndividualScoreDto"
+ }
+ },
+ "scoreVariance": {
+ "type": "number"
+ },
+ "scoreRange": {
+ "$ref": "#/components/schemas/ScoreRangeDto"
},
- "scoreVariance": { "type": "number" },
- "scoreRange": { "$ref": "#/components/schemas/ScoreRangeDto" },
"criteriaBreakdown": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CriteriaBreakdownDto" }
- },
- "rank": { "type": "object" },
- "computedRank": { "type": "number" },
- "prize": { "type": "string" },
- "isComplete": { "type": "boolean" },
- "isPending": { "type": "boolean" },
- "hasDisagreement": { "type": "boolean" },
- "trackIds": { "type": "array", "items": { "type": "string" } },
+ "items": {
+ "$ref": "#/components/schemas/CriteriaBreakdownDto"
+ }
+ },
+ "rank": {
+ "type": "object"
+ },
+ "computedRank": {
+ "type": "number"
+ },
+ "prize": {
+ "type": "string"
+ },
+ "isComplete": {
+ "type": "boolean"
+ },
+ "isPending": {
+ "type": "boolean"
+ },
+ "hasDisagreement": {
+ "type": "boolean"
+ },
+ "trackIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
"recommendedOverall": {
"type": "boolean",
"description": "True when this submission is in the top X% overall per the recommendation threshold."
@@ -29522,7 +39869,9 @@
"recommendedTrackIds": {
"description": "Track ids where this submission is in the top X% per the per-track recommendation threshold.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": [
@@ -29548,23 +39897,42 @@
"JudgingResultsResponseDto": {
"type": "object",
"properties": {
- "hackathonId": { "type": "string" },
- "totalSubmissions": { "type": "number" },
- "submissionsScoredCount": { "type": "number" },
- "submissionsPendingCount": { "type": "number" },
- "averageScoreAcrossAll": { "type": "number" },
- "resultsPublished": { "type": "boolean" },
- "judgesAssigned": { "type": "number" },
+ "hackathonId": {
+ "type": "string"
+ },
+ "totalSubmissions": {
+ "type": "number"
+ },
+ "submissionsScoredCount": {
+ "type": "number"
+ },
+ "submissionsPendingCount": {
+ "type": "number"
+ },
+ "averageScoreAcrossAll": {
+ "type": "number"
+ },
+ "resultsPublished": {
+ "type": "boolean"
+ },
+ "judgesAssigned": {
+ "type": "number"
+ },
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AggregatedJudgingResultDto"
}
},
- "generatedAt": { "format": "date-time", "type": "string" },
+ "generatedAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"winnerOverrides": {
"type": "object",
- "additionalProperties": { "type": "number" },
+ "additionalProperties": {
+ "type": "number"
+ },
"description": "Manual winner assignments override (submissionId -> rank)"
},
"metadata": {
@@ -29584,10 +39952,23 @@
"metadata"
]
},
+ "SetPlacementWinnerDto": {
+ "type": "object",
+ "properties": {
+ "submissionId": {
+ "type": "string",
+ "description": "The submission to award this placement to."
+ }
+ },
+ "required": ["submissionId"]
+ },
"InviteJudgeDto": {
"type": "object",
"properties": {
- "email": { "type": "string", "example": "judge@example.com" },
+ "email": {
+ "type": "string",
+ "example": "judge@example.com"
+ },
"displayName": {
"type": "string",
"description": "Optional public display name for the judge"
@@ -29615,7 +39996,9 @@
"invites": {
"description": "Up to 25 judges per request",
"type": "array",
- "items": { "$ref": "#/components/schemas/InviteJudgeDto" }
+ "items": {
+ "$ref": "#/components/schemas/InviteJudgeDto"
+ }
}
},
"required": ["invites"]
@@ -29623,7 +40006,9 @@
"BulkInviteRowResultDto": {
"type": "object",
"properties": {
- "email": { "type": "string" },
+ "email": {
+ "type": "string"
+ },
"status": {
"type": "string",
"enum": ["invited", "failed"],
@@ -29641,7 +40026,9 @@
"properties": {
"results": {
"type": "array",
- "items": { "$ref": "#/components/schemas/BulkInviteRowResultDto" }
+ "items": {
+ "$ref": "#/components/schemas/BulkInviteRowResultDto"
+ }
},
"invited": {
"type": "number",
@@ -29657,8 +40044,12 @@
"RecommendationThresholdDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "hackathonId": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "hackathonId": {
+ "type": "string"
+ },
"trackId": {
"type": "string",
"nullable": true,
@@ -29688,6 +40079,44 @@
},
"required": ["topPercent"]
},
+ "RecommendationComputeDiagnosticsDto": {
+ "type": "object",
+ "properties": {
+ "shortlistedSubmissions": {
+ "type": "number",
+ "description": "Submissions currently SHORTLISTED."
+ },
+ "scoredSubmissions": {
+ "type": "number",
+ "description": "Shortlisted submissions with at least one counted score (active judge or promoted AI scorecard; advisory AI_ASSIST excluded). These are the only submissions a threshold can rank."
+ },
+ "overallThresholdConfigured": {
+ "type": "boolean",
+ "description": "Whether an overall (all-submissions) cut is set."
+ },
+ "trackThresholdsConfigured": {
+ "type": "number",
+ "description": "Number of per-track cuts configured."
+ },
+ "reasons": {
+ "description": "Human-readable reasons explaining the outcome (e.g. why nothing was flagged). Empty when the compute produced recommendations with nothing outstanding.",
+ "example": [
+ "No recommendation thresholds are configured. Set a top-X% cut (overall or per track), then recompute."
+ ],
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "required": [
+ "shortlistedSubmissions",
+ "scoredSubmissions",
+ "overallThresholdConfigured",
+ "trackThresholdsConfigured",
+ "reasons"
+ ]
+ },
"RecommendationComputeResultDto": {
"type": "object",
"properties": {
@@ -29697,12 +40126,27 @@
},
"tracks": {
"description": "Per-track recommended counts.",
- "example": [{ "trackId": "trk_1", "recommended": 3 }],
+ "example": [
+ {
+ "trackId": "trk_1",
+ "recommended": 3
+ }
+ ],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
+ },
+ "diagnostics": {
+ "description": "Why the compute produced what it did, so an empty result is never silent.",
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/RecommendationComputeDiagnosticsDto"
+ }
+ ]
}
},
- "required": ["overallRecommended", "tracks"]
+ "required": ["overallRecommended", "tracks", "diagnostics"]
},
"AcceptJudgeInvitationDto": {
"type": "object",
@@ -29762,15 +40206,30 @@
"maxLength": 200,
"example": "Build the future of Web3"
},
- "country": { "type": "string", "example": "Nigeria" },
- "state": { "type": "string", "example": "Lagos" },
- "city": { "type": "string", "example": "Ikeja" },
- "venueName": { "type": "string", "example": "Eko Convention Center" },
+ "country": {
+ "type": "string",
+ "example": "Nigeria"
+ },
+ "state": {
+ "type": "string",
+ "example": "Lagos"
+ },
+ "city": {
+ "type": "string",
+ "example": "Ikeja"
+ },
+ "venueName": {
+ "type": "string",
+ "example": "Eko Convention Center"
+ },
"venueAddress": {
"type": "string",
"example": "Plot 1415 Adetokunbo Ademola St"
},
- "slug": { "type": "string", "example": "web3-innovation-hackathon" }
+ "slug": {
+ "type": "string",
+ "example": "web3-innovation-hackathon"
+ }
},
"required": [
"name",
@@ -29784,13 +40243,22 @@
"PublishedSponsorPartnerDto": {
"type": "object",
"properties": {
- "id": { "type": "string", "example": "sp-1" },
- "name": { "type": "string", "example": "Stellar Foundation" },
+ "id": {
+ "type": "string",
+ "example": "sp-1"
+ },
+ "name": {
+ "type": "string",
+ "example": "Stellar Foundation"
+ },
"logo": {
"type": "string",
"example": "https://example.com/logo.png"
},
- "link": { "type": "string", "example": "https://stellar.org" }
+ "link": {
+ "type": "string",
+ "example": "https://stellar.org"
+ }
},
"required": ["id"]
},
@@ -29801,12 +40269,20 @@
"type": "string",
"example": "organizer@boundless.dev"
},
- "telegram": { "type": "string", "example": "@boundless" },
- "discord": { "type": "string", "example": "boundless-hackathon" },
+ "telegram": {
+ "type": "string",
+ "example": "@boundless"
+ },
+ "discord": {
+ "type": "string",
+ "example": "boundless-hackathon"
+ },
"socialLinks": {
"example": ["https://x.com/boundless"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"sponsorsPartners": {
"type": "array",
@@ -29831,7 +40307,10 @@
"PublishedPhaseDto": {
"type": "object",
"properties": {
- "name": { "type": "string", "example": "Building Phase" },
+ "name": {
+ "type": "string",
+ "example": "Building Phase"
+ },
"startDate": {
"type": "string",
"example": "2026-04-01T00:00:00.000Z"
@@ -29858,7 +40337,10 @@
"type": "string",
"example": "2026-04-15T00:00:00.000Z"
},
- "timezone": { "type": "string", "example": "Africa/Lagos" },
+ "timezone": {
+ "type": "string",
+ "example": "Africa/Lagos"
+ },
"registrationDeadline": {
"type": "string",
"example": "2026-04-02T00:00:00.000Z",
@@ -29871,7 +40353,9 @@
},
"phases": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PublishedPhaseDto" }
+ "items": {
+ "$ref": "#/components/schemas/PublishedPhaseDto"
+ }
}
}
},
@@ -29900,19 +40384,48 @@
"example": 200,
"description": "Optional cap on total participants. null = unlimited. Can be updated after publishing."
},
- "require_github": { "type": "boolean", "example": true },
- "require_demo_video": { "type": "boolean", "example": false },
- "require_other_links": { "type": "boolean", "example": true },
- "detailsTab": { "type": "boolean" },
- "participantsTab": { "type": "boolean" },
- "resourcesTab": { "type": "boolean" },
- "submissionTab": { "type": "boolean" },
- "announcementsTab": { "type": "boolean" },
- "discussionTab": { "type": "boolean" },
- "winnersTab": { "type": "boolean" },
- "sponsorsTab": { "type": "boolean" },
- "joinATeamTab": { "type": "boolean" },
- "rulesTab": { "type": "boolean" }
+ "require_github": {
+ "type": "boolean",
+ "example": true
+ },
+ "require_demo_video": {
+ "type": "boolean",
+ "example": false
+ },
+ "require_other_links": {
+ "type": "boolean",
+ "example": true
+ },
+ "detailsTab": {
+ "type": "boolean"
+ },
+ "participantsTab": {
+ "type": "boolean"
+ },
+ "resourcesTab": {
+ "type": "boolean"
+ },
+ "submissionTab": {
+ "type": "boolean"
+ },
+ "announcementsTab": {
+ "type": "boolean"
+ },
+ "discussionTab": {
+ "type": "boolean"
+ },
+ "winnersTab": {
+ "type": "boolean"
+ },
+ "sponsorsTab": {
+ "type": "boolean"
+ },
+ "joinATeamTab": {
+ "type": "boolean"
+ },
+ "rulesTab": {
+ "type": "boolean"
+ }
},
"required": ["participantType"]
},
@@ -29930,11 +40443,26 @@
"PublishedPrizeTierDto": {
"type": "object",
"properties": {
- "id": { "type": "string", "example": "tier-1" },
- "place": { "type": "string", "example": "1st Place" },
- "prizeAmount": { "type": "string", "example": "5000" },
- "currency": { "type": "string", "example": "USDC" },
- "description": { "type": "string", "example": "Top overall project" },
+ "id": {
+ "type": "string",
+ "example": "tier-1"
+ },
+ "place": {
+ "type": "string",
+ "example": "1st Place"
+ },
+ "prizeAmount": {
+ "type": "string",
+ "example": "5000"
+ },
+ "currency": {
+ "type": "string",
+ "example": "USDC"
+ },
+ "description": {
+ "type": "string",
+ "example": "Top overall project"
+ },
"rank": {
"type": "number",
"minimum": 1,
@@ -29947,7 +40475,10 @@
"maximum": 100,
"example": 70
},
- "kind": { "type": "string", "enum": ["OVERALL", "TRACK"] },
+ "kind": {
+ "type": "string",
+ "enum": ["OVERALL", "TRACK"]
+ },
"trackId": {
"type": "string",
"description": "Required when kind=TRACK. References a HackathonTrack id."
@@ -29960,13 +40491,26 @@
"properties": {
"prizeTiers": {
"type": "array",
- "items": { "$ref": "#/components/schemas/PublishedPrizeTierDto" }
+ "items": {
+ "$ref": "#/components/schemas/PublishedPrizeTierDto"
+ }
+ },
+ "prizes": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PrizeWriteDto"
+ }
},
"winnerOverrides": {
"type": "object",
- "example": { "sub-1": 1, "sub-2": 2 },
+ "example": {
+ "sub-1": 1,
+ "sub-2": 2
+ },
"description": "Manual winner assignments override (submissionId -> rank)",
- "additionalProperties": { "type": "number" }
+ "additionalProperties": {
+ "type": "number"
+ }
},
"prizeStructure": {
"type": "string",
@@ -29976,9 +40520,11 @@
"type": "number",
"minimum": 1,
"maximum": 20
+ },
+ "allowWinnerStacking": {
+ "type": "boolean"
}
- },
- "required": ["prizeTiers"]
+ }
},
"UpdatePublishedHackathonFinancialDto": {
"type": "object",
@@ -29992,9 +40538,18 @@
"AdvancedSettingsFormDataDto": {
"type": "object",
"properties": {
- "isPublic": { "type": "boolean", "example": true },
- "allowLateRegistration": { "type": "boolean", "example": false },
- "requireApproval": { "type": "boolean", "example": true },
+ "isPublic": {
+ "type": "boolean",
+ "example": true
+ },
+ "allowLateRegistration": {
+ "type": "boolean",
+ "example": false
+ },
+ "requireApproval": {
+ "type": "boolean",
+ "example": true
+ },
"maxParticipants": {
"type": "number",
"minimum": 1,
@@ -30005,12 +40560,18 @@
"type": "string",
"example": "hackathons.boundless.dev"
},
- "enableDiscord": { "type": "boolean", "example": true },
+ "enableDiscord": {
+ "type": "boolean",
+ "example": true
+ },
"discordInviteLink": {
"type": "string",
"example": "https://discord.gg/boundless"
},
- "enableTelegram": { "type": "boolean", "example": true },
+ "enableTelegram": {
+ "type": "boolean",
+ "example": true
+ },
"telegramInviteLink": {
"type": "string",
"example": "https://t.me/boundless"
@@ -30033,16 +40594,39 @@
},
"required": ["advancedSettings"]
},
+ "SetHackathonAccessDto": {
+ "type": "object",
+ "properties": {
+ "visibility": {
+ "type": "string",
+ "enum": ["PUBLIC", "PRIVATE"]
+ },
+ "password": {
+ "type": "string",
+ "description": "Access password. Required when first making a hackathon private; ignored (cleared) when visibility is PUBLIC."
+ }
+ },
+ "required": ["visibility"]
+ },
"InvitePartnerDto": {
"type": "object",
"properties": {
- "partnerEmail": { "type": "string", "example": "sponsor@partner.io" },
- "partnerName": { "type": "string", "example": "Acme Corp" },
+ "partnerEmail": {
+ "type": "string",
+ "example": "sponsor@partner.io"
+ },
+ "partnerName": {
+ "type": "string",
+ "example": "Acme Corp"
+ },
"partnerLogo": {
"type": "string",
"example": "https://cdn.example.com/logo.png"
},
- "partnerLink": { "type": "string", "example": "https://acme.io" },
+ "partnerLink": {
+ "type": "string",
+ "example": "https://acme.io"
+ },
"pledgedAmount": {
"type": "number",
"example": 1000,
@@ -30085,7 +40669,9 @@
"targets": {
"description": "One or more tiers to allocate this contribution into",
"type": "array",
- "items": { "$ref": "#/components/schemas/AllocationTargetDto" }
+ "items": {
+ "$ref": "#/components/schemas/AllocationTargetDto"
+ }
}
},
"required": ["targets"]
@@ -30163,15 +40749,34 @@
"TrackResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "hackathonId": { "type": "string" },
- "slug": { "type": "string" },
- "name": { "type": "string" },
- "description": { "type": "string" },
- "type": { "type": "string" },
- "eligibility": { "type": "string", "enum": ["OPT_IN", "OPEN"] },
- "displayOrder": { "type": "number" },
- "isArchived": { "type": "boolean" },
+ "id": {
+ "type": "string"
+ },
+ "hackathonId": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "eligibility": {
+ "type": "string",
+ "enum": ["OPT_IN", "OPEN"]
+ },
+ "displayOrder": {
+ "type": "number"
+ },
+ "isArchived": {
+ "type": "boolean"
+ },
"entryCount": {
"type": "number",
"description": "Count of submissions that have opted into this track. Useful for organizer dashboards."
@@ -30182,14 +40787,24 @@
},
"customQuestions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackCustomQuestionDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackCustomQuestionDto"
+ }
},
"requiredArtifacts": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackRequiredArtifactDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackRequiredArtifactDto"
+ }
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
},
- "createdAt": { "format": "date-time", "type": "string" },
- "updatedAt": { "format": "date-time", "type": "string" }
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
},
"required": [
"id",
@@ -30207,11 +40822,23 @@
"CustomQuestionResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "hackathonId": { "type": "string" },
- "scope": { "type": "string", "enum": ["REGISTRATION", "SUBMISSION"] },
- "label": { "type": "string" },
- "helpText": { "type": "string", "nullable": true },
+ "id": {
+ "type": "string"
+ },
+ "hackathonId": {
+ "type": "string"
+ },
+ "scope": {
+ "type": "string",
+ "enum": ["REGISTRATION", "SUBMISSION"]
+ },
+ "label": {
+ "type": "string"
+ },
+ "helpText": {
+ "type": "string",
+ "nullable": true
+ },
"type": {
"type": "string",
"enum": [
@@ -30223,14 +40850,23 @@
"BOOLEAN"
]
},
- "required": { "type": "boolean" },
+ "required": {
+ "type": "boolean"
+ },
"options": {
"nullable": true,
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
+ },
+ "maxLength": {
+ "type": "number",
+ "nullable": true
},
- "maxLength": { "type": "number", "nullable": true },
- "displayOrder": { "type": "number" }
+ "displayOrder": {
+ "type": "number"
+ }
},
"required": [
"id",
@@ -30294,11 +40930,15 @@
},
"customQuestions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackCustomQuestionDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackCustomQuestionDto"
+ }
},
"requiredArtifacts": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackRequiredArtifactDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackRequiredArtifactDto"
+ }
}
},
"required": ["name"]
@@ -30306,12 +40946,25 @@
"UpdateTrackDto": {
"type": "object",
"properties": {
- "name": { "type": "string" },
- "slug": { "type": "string" },
- "description": { "type": "string" },
- "type": { "type": "string" },
- "eligibility": { "type": "string", "enum": ["OPT_IN", "OPEN"] },
- "displayOrder": { "type": "number" },
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "eligibility": {
+ "type": "string",
+ "enum": ["OPT_IN", "OPEN"]
+ },
+ "displayOrder": {
+ "type": "number"
+ },
"isArchived": {
"type": "boolean",
"description": "Soft-archive instead of delete when entries already exist. Cannot be unset via this endpoint; recreate the track if needed."
@@ -30322,18 +40975,25 @@
},
"customQuestions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackCustomQuestionDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackCustomQuestionDto"
+ }
},
"requiredArtifacts": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TrackRequiredArtifactDto" }
+ "items": {
+ "$ref": "#/components/schemas/TrackRequiredArtifactDto"
+ }
}
}
},
"CustomQuestionWriteDto": {
"type": "object",
"properties": {
- "scope": { "type": "string", "enum": ["REGISTRATION", "SUBMISSION"] },
+ "scope": {
+ "type": "string",
+ "enum": ["REGISTRATION", "SUBMISSION"]
+ },
"label": {
"type": "string",
"description": "Question shown to the participant."
@@ -30361,7 +41021,9 @@
"options": {
"description": "Choices for SINGLE_SELECT / MULTI_SELECT.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"maxLength": {
"type": "number",
@@ -30379,7 +41041,9 @@
"properties": {
"questions": {
"type": "array",
- "items": { "$ref": "#/components/schemas/CustomQuestionWriteDto" }
+ "items": {
+ "$ref": "#/components/schemas/CustomQuestionWriteDto"
+ }
}
},
"required": ["questions"]
@@ -30499,7 +41163,7 @@
"properties": {
"id": {
"type": "string",
- "description": "Internal cuid for the EscrowOp row. Use this for follow-up calls.",
+ "description": "Internal uuid for the EscrowOp row. Use this for follow-up calls.",
"example": "cmpwiox7u0000yy4404ojbk9t"
},
"opId": {
@@ -30748,7 +41412,10 @@
},
"required": ["applicantAddress", "amount"]
},
- "CreateOrganizationDto": { "type": "object", "properties": {} },
+ "CreateOrganizationDto": {
+ "type": "object",
+ "properties": {}
+ },
"OrganizationProfileStatsDto": {
"type": "object",
"properties": {
@@ -30811,34 +41478,73 @@
"stats": {
"description": "Key stats for the organization profile",
"allOf": [
- { "$ref": "#/components/schemas/OrganizationProfileStatsDto" }
+ {
+ "$ref": "#/components/schemas/OrganizationProfileStatsDto"
+ }
]
}
},
"required": ["id", "name", "slug", "logoUrl", "description", "stats"]
},
- "UpdateOrganizationDto": { "type": "object", "properties": {} },
- "UpdateMemberRoleDto": { "type": "object", "properties": {} },
- "InviteMemberDto": { "type": "object", "properties": {} },
+ "UpdateOrganizationDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "UpdateMemberRoleDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "InviteMemberDto": {
+ "type": "object",
+ "properties": {}
+ },
"TreasuryWalletResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "organizationId": { "type": "string" },
- "kind": { "type": "string", "enum": ["MANAGED", "CONNECTED"] },
- "publicKey": { "type": "string" },
- "label": { "type": "string" },
- "isDefault": { "type": "boolean" },
+ "id": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "string",
+ "enum": ["MANAGED", "CONNECTED"]
+ },
+ "publicKey": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "isDefault": {
+ "type": "boolean"
+ },
"status": {
"type": "string",
"enum": ["ACTIVE", "ARCHIVED", "NEEDS_REVIEW"]
},
- "isMultisig": { "type": "boolean" },
- "multisigThreshold": { "type": "number", "nullable": true },
- "connectionMethod": { "type": "string", "nullable": true },
- "lastVerifiedAt": { "type": "string", "nullable": true },
- "createdAt": { "type": "string" },
- "updatedAt": { "type": "string" }
+ "isMultisig": {
+ "type": "boolean"
+ },
+ "multisigThreshold": {
+ "type": "number",
+ "nullable": true
+ },
+ "connectionMethod": {
+ "type": "string",
+ "nullable": true
+ },
+ "lastVerifiedAt": {
+ "type": "string",
+ "nullable": true
+ },
+ "createdAt": {
+ "type": "string"
+ },
+ "updatedAt": {
+ "type": "string"
+ }
},
"required": [
"id",
@@ -30897,7 +41603,10 @@
"UpdateTreasuryWalletDto": {
"type": "object",
"properties": {
- "label": { "type": "string", "description": "New display label" },
+ "label": {
+ "type": "string",
+ "description": "New display label"
+ },
"isDefault": {
"type": "boolean",
"description": "Make this the organization default"
@@ -30907,22 +41616,42 @@
"WalletBalanceResponseDto": {
"type": "object",
"properties": {
- "publicKey": { "type": "string" },
- "usdc": { "type": "string", "description": "USDC balance" },
- "xlm": { "type": "string", "description": "XLM balance (fee float)" }
+ "publicKey": {
+ "type": "string"
+ },
+ "usdc": {
+ "type": "string",
+ "description": "USDC balance"
+ },
+ "xlm": {
+ "type": "string",
+ "description": "XLM balance (fee float)"
+ }
},
"required": ["publicKey", "usdc", "xlm"]
},
"TreasuryPolicyRuleDto": {
"type": "object",
"properties": {
- "min_usdc": { "type": "number", "example": 0 },
- "max_usdc": { "type": "object", "example": 1000, "nullable": true },
- "required_approvals": { "type": "number", "example": 1 },
+ "min_usdc": {
+ "type": "number",
+ "example": 0
+ },
+ "max_usdc": {
+ "type": "object",
+ "example": 1000,
+ "nullable": true
+ },
+ "required_approvals": {
+ "type": "number",
+ "example": 1
+ },
"approver_roles": {
"example": ["owner", "admin"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["min_usdc", "required_approvals", "approver_roles"]
@@ -30930,17 +41659,27 @@
"TreasuryPolicyResponseDto": {
"type": "object",
"properties": {
- "organizationId": { "type": "string" },
- "defaultWalletId": { "type": "string", "nullable": true },
+ "organizationId": {
+ "type": "string"
+ },
+ "defaultWalletId": {
+ "type": "string",
+ "nullable": true
+ },
"rules": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TreasuryPolicyRuleDto" }
+ "items": {
+ "$ref": "#/components/schemas/TreasuryPolicyRuleDto"
+ }
},
"isDefault": {
"type": "boolean",
"description": "True when no policy is saved yet (defaults returned)"
},
- "updatedAt": { "type": "string", "nullable": true }
+ "updatedAt": {
+ "type": "string",
+ "nullable": true
+ }
},
"required": [
"organizationId",
@@ -30955,7 +41694,9 @@
"properties": {
"rules": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TreasuryPolicyRuleDto" }
+ "items": {
+ "$ref": "#/components/schemas/TreasuryPolicyRuleDto"
+ }
},
"defaultWalletId": {
"type": "string",
@@ -30989,29 +41730,70 @@
"type": "string",
"enum": ["hackathon", "bounty", "grant"]
},
- "referenceId": { "type": "string" }
+ "referenceId": {
+ "type": "string"
+ }
},
"required": ["sourceWalletId", "destination", "amount", "purpose"]
},
"SpendRequestResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "organizationId": { "type": "string" },
- "sourceWalletId": { "type": "string" },
- "destination": { "type": "string" },
- "amount": { "type": "string" },
- "currency": { "type": "string" },
- "purpose": { "type": "string" },
- "referenceType": { "type": "string", "nullable": true },
- "referenceId": { "type": "string", "nullable": true },
- "initiatorUserId": { "type": "string" },
- "requiredApprovals": { "type": "number" },
- "approvals": { "type": "array", "items": { "type": "object" } },
- "status": { "type": "string" },
- "onChainTxHash": { "type": "string", "nullable": true },
- "createdAt": { "type": "string" },
- "approvedAt": { "type": "string", "nullable": true }
+ "id": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "sourceWalletId": {
+ "type": "string"
+ },
+ "destination": {
+ "type": "string"
+ },
+ "amount": {
+ "type": "string"
+ },
+ "currency": {
+ "type": "string"
+ },
+ "purpose": {
+ "type": "string"
+ },
+ "referenceType": {
+ "type": "string",
+ "nullable": true
+ },
+ "referenceId": {
+ "type": "string",
+ "nullable": true
+ },
+ "initiatorUserId": {
+ "type": "string"
+ },
+ "requiredApprovals": {
+ "type": "number"
+ },
+ "approvals": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "status": {
+ "type": "string"
+ },
+ "onChainTxHash": {
+ "type": "string",
+ "nullable": true
+ },
+ "createdAt": {
+ "type": "string"
+ },
+ "approvedAt": {
+ "type": "string",
+ "nullable": true
+ }
},
"required": [
"id",
@@ -31032,6 +41814,45 @@
"approvedAt"
]
},
+ "SendTreasuryFundsDto": {
+ "type": "object",
+ "properties": {
+ "sourceWalletId": {
+ "type": "string",
+ "description": "Wallet to send from"
+ },
+ "destination": {
+ "type": "string",
+ "description": "Recipient Stellar address (starts with G)",
+ "example": "GA..."
+ },
+ "amount": {
+ "type": "string",
+ "description": "Amount in USDC",
+ "example": "250.00"
+ },
+ "note": {
+ "type": "string",
+ "description": "What this payment is for (shown in your activity log)",
+ "example": "Contributor payout"
+ }
+ },
+ "required": ["sourceWalletId", "destination", "amount"]
+ },
+ "SendDestinationReadinessDto": {
+ "type": "object",
+ "properties": {
+ "exists": {
+ "type": "boolean",
+ "description": "Whether the recipient account exists on-chain"
+ },
+ "hasUsdcTrustline": {
+ "type": "boolean",
+ "description": "Whether the recipient has a USDC trustline (so it can receive USDC)"
+ }
+ },
+ "required": ["exists", "hasUsdcTrustline"]
+ },
"SpendDecisionDto": {
"type": "object",
"properties": {
@@ -31048,7 +41869,9 @@
"type": "string",
"description": "Unsigned transaction XDR to sign in-browser"
},
- "request": { "$ref": "#/components/schemas/SpendRequestResponseDto" }
+ "request": {
+ "$ref": "#/components/schemas/SpendRequestResponseDto"
+ }
},
"required": ["unsignedXdr", "request"]
},
@@ -31062,27 +41885,71 @@
},
"required": ["signedXdr"]
},
+ "TreasuryActorDto": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string",
+ "nullable": true
+ },
+ "image": {
+ "type": "string",
+ "nullable": true
+ }
+ },
+ "required": ["id", "name", "image"]
+ },
"TreasuryAuditEntryDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "action": { "type": "string" },
- "actorUserId": { "type": "string", "nullable": true },
- "actorKind": { "type": "string" },
- "walletId": { "type": "string", "nullable": true },
- "spendRequestId": { "type": "string", "nullable": true },
+ "id": {
+ "type": "string"
+ },
+ "action": {
+ "type": "string"
+ },
+ "actorUserId": {
+ "type": "string",
+ "nullable": true
+ },
+ "actorKind": {
+ "type": "string"
+ },
+ "actor": {
+ "nullable": true,
+ "description": "Resolved profile of the actor (name + avatar), if a user.",
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/TreasuryActorDto"
+ }
+ ]
+ },
+ "walletId": {
+ "type": "string",
+ "nullable": true
+ },
+ "spendRequestId": {
+ "type": "string",
+ "nullable": true
+ },
"details": {
"type": "object",
"additionalProperties": true,
"nullable": true
},
- "createdAt": { "type": "string" }
+ "createdAt": {
+ "type": "string"
+ }
},
"required": [
"id",
"action",
"actorUserId",
"actorKind",
+ "actor",
"walletId",
"spendRequestId",
"details",
@@ -31094,14 +41961,165 @@
"properties": {
"data": {
"type": "array",
- "items": { "$ref": "#/components/schemas/TreasuryAuditEntryDto" }
+ "items": {
+ "$ref": "#/components/schemas/TreasuryAuditEntryDto"
+ }
+ },
+ "total": {
+ "type": "number"
+ },
+ "page": {
+ "type": "number"
+ },
+ "limit": {
+ "type": "number"
+ }
+ },
+ "required": ["data", "total", "page", "limit"]
+ },
+ "ReceiptResponseDto": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "receiptNumber": {
+ "type": "string",
+ "example": "RCPT-100001"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string",
+ "example": "TREASURY_SEND"
+ },
+ "typeLabel": {
+ "type": "string",
+ "example": "Funds sent"
+ },
+ "status": {
+ "type": "string",
+ "example": "ISSUED"
+ },
+ "direction": {
+ "type": "string",
+ "example": "OUTGOING"
+ },
+ "amount": {
+ "type": "string",
+ "example": "250.00"
+ },
+ "currency": {
+ "type": "string",
+ "example": "USDC"
+ },
+ "fromLabel": {
+ "type": "object",
+ "nullable": true
+ },
+ "fromAddress": {
+ "type": "object",
+ "nullable": true
+ },
+ "toLabel": {
+ "type": "object",
+ "nullable": true
+ },
+ "toAddress": {
+ "type": "object",
+ "nullable": true
+ },
+ "description": {
+ "type": "object",
+ "nullable": true
+ },
+ "onChainTxHash": {
+ "type": "object",
+ "nullable": true
+ },
+ "explorerUrl": {
+ "type": "object",
+ "nullable": true
+ },
+ "network": {
+ "type": "object",
+ "nullable": true
+ },
+ "issuedByUserId": {
+ "type": "object",
+ "nullable": true
+ },
+ "issuedAt": {
+ "type": "string"
+ },
+ "voidedAt": {
+ "type": "object",
+ "nullable": true
+ }
+ },
+ "required": [
+ "id",
+ "receiptNumber",
+ "organizationId",
+ "type",
+ "typeLabel",
+ "status",
+ "direction",
+ "amount",
+ "currency",
+ "fromLabel",
+ "fromAddress",
+ "toLabel",
+ "toAddress",
+ "description",
+ "onChainTxHash",
+ "explorerUrl",
+ "network",
+ "issuedByUserId",
+ "issuedAt",
+ "voidedAt"
+ ]
+ },
+ "ReceiptListResponseDto": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ReceiptResponseDto"
+ }
+ },
+ "total": {
+ "type": "number"
+ },
+ "page": {
+ "type": "number"
},
- "total": { "type": "number" },
- "page": { "type": "number" },
- "limit": { "type": "number" }
+ "limit": {
+ "type": "number"
+ }
},
"required": ["data", "total", "page", "limit"]
},
+ "SendReceiptDto": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "description": "Where to email the receipt. Defaults to your account email."
+ }
+ }
+ },
+ "VoidReceiptDto": {
+ "type": "object",
+ "properties": {
+ "reason": {
+ "type": "string",
+ "description": "Why the receipt is being voided"
+ }
+ }
+ },
"CreateVoteDto": {
"type": "object",
"properties": {
@@ -31171,13 +42189,17 @@
"description": "Post tags",
"example": ["smart-contracts", "soroban", "tutorial"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"categories": {
"description": "Post categories",
"example": ["tutorials"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"isFeatured": {
"type": "boolean",
@@ -31210,7 +42232,9 @@
"description": "SEO keywords",
"example": ["stellar", "blockchain", "smart contracts"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"scheduledFor": {
"type": "string",
@@ -31226,7 +42250,10 @@
},
"required": ["title", "content"]
},
- "UpdateBlogPostDto": { "type": "object", "properties": {} },
+ "UpdateBlogPostDto": {
+ "type": "object",
+ "properties": {}
+ },
"MetricDataDto": {
"type": "object",
"properties": {
@@ -31299,9 +42326,15 @@
"OverviewMetricsDto": {
"type": "object",
"properties": {
- "totalUsers": { "$ref": "#/components/schemas/MetricDataDto" },
- "organizations": { "$ref": "#/components/schemas/MetricDataDto" },
- "projects": { "$ref": "#/components/schemas/MetricDataDto" },
+ "totalUsers": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ },
+ "organizations": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ },
+ "projects": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ },
"hackathons": {
"$ref": "#/components/schemas/HackathonMetricDataDto"
}
@@ -31313,7 +42346,9 @@
"properties": {
"data": {
"type": "array",
- "items": { "$ref": "#/components/schemas/ChartDataPointDto" }
+ "items": {
+ "$ref": "#/components/schemas/ChartDataPointDto"
+ }
},
"timeRange": {
"type": "string",
@@ -31327,8 +42362,12 @@
"AdminOverviewResponseDto": {
"type": "object",
"properties": {
- "metrics": { "$ref": "#/components/schemas/OverviewMetricsDto" },
- "chart": { "$ref": "#/components/schemas/OverviewChartDataDto" },
+ "metrics": {
+ "$ref": "#/components/schemas/OverviewMetricsDto"
+ },
+ "chart": {
+ "$ref": "#/components/schemas/OverviewChartDataDto"
+ },
"lastUpdated": {
"type": "string",
"description": "Last updated timestamp",
@@ -31359,7 +42398,9 @@
"description": "Optional structured reasons",
"example": ["incomplete_description", "missing_team_info"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["message"]
@@ -31533,39 +42574,75 @@
},
"required": ["reason"]
},
- "RejectManualProjectDto": { "type": "object", "properties": {} },
- "RequestManualProjectChangesDto": { "type": "object", "properties": {} },
- "RejectProjectEditDto": { "type": "object", "properties": {} },
+ "RejectManualProjectDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "RequestManualProjectChangesDto": {
+ "type": "object",
+ "properties": {}
+ },
+ "RejectProjectEditDto": {
+ "type": "object",
+ "properties": {}
+ },
"AdminWalletStatsDto": {
"type": "object",
"properties": {
- "totalWallets": { "$ref": "#/components/schemas/MetricDataDto" },
- "activatedWallets": { "$ref": "#/components/schemas/MetricDataDto" },
- "inactiveWallets": { "$ref": "#/components/schemas/MetricDataDto" }
+ "totalWallets": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ },
+ "activatedWallets": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ },
+ "inactiveWallets": {
+ "$ref": "#/components/schemas/MetricDataDto"
+ }
},
"required": ["totalWallets", "activatedWallets", "inactiveWallets"]
},
"AdminWalletUserDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "email": { "type": "string" },
- "username": { "type": "string" },
- "image": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ }
},
"required": ["id", "name", "email"]
},
"AdminWalletListItemDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "publicKey": { "type": "string" },
- "isActivated": { "type": "boolean" },
- "createdAt": { "format": "date-time", "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "publicKey": {
+ "type": "string"
+ },
+ "isActivated": {
+ "type": "boolean"
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"users": {
"type": "array",
- "items": { "$ref": "#/components/schemas/AdminWalletUserDto" }
+ "items": {
+ "$ref": "#/components/schemas/AdminWalletUserDto"
+ }
}
},
"required": ["id", "publicKey", "isActivated", "createdAt", "users"]
@@ -31575,39 +42652,70 @@
"properties": {
"wallets": {
"type": "array",
- "items": { "$ref": "#/components/schemas/AdminWalletListItemDto" }
+ "items": {
+ "$ref": "#/components/schemas/AdminWalletListItemDto"
+ }
+ },
+ "total": {
+ "type": "number"
},
- "total": { "type": "number" },
- "page": { "type": "number" },
- "limit": { "type": "number" },
- "totalPages": { "type": "number" }
+ "page": {
+ "type": "number"
+ },
+ "limit": {
+ "type": "number"
+ },
+ "totalPages": {
+ "type": "number"
+ }
},
"required": ["wallets", "total", "page", "limit", "totalPages"]
},
"AdminWalletBalanceDto": {
"type": "object",
"properties": {
- "balance": { "type": "string" },
- "assetCode": { "type": "string" },
- "assetIssuer": { "type": "string" },
- "assetType": { "type": "string" }
+ "balance": {
+ "type": "string"
+ },
+ "assetCode": {
+ "type": "string"
+ },
+ "assetIssuer": {
+ "type": "string"
+ },
+ "assetType": {
+ "type": "string"
+ }
},
"required": ["balance", "assetCode", "assetType"]
},
"AdminWalletDetailsDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "publicKey": { "type": "string" },
- "isActivated": { "type": "boolean" },
- "createdAt": { "format": "date-time", "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "publicKey": {
+ "type": "string"
+ },
+ "isActivated": {
+ "type": "boolean"
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"balances": {
"type": "array",
- "items": { "$ref": "#/components/schemas/AdminWalletBalanceDto" }
+ "items": {
+ "$ref": "#/components/schemas/AdminWalletBalanceDto"
+ }
},
"users": {
"type": "array",
- "items": { "$ref": "#/components/schemas/AdminWalletUserDto" }
+ "items": {
+ "$ref": "#/components/schemas/AdminWalletUserDto"
+ }
}
},
"required": [
@@ -31622,8 +42730,14 @@
"ReviewWindowDto": {
"type": "object",
"properties": {
- "minBusinessDays": { "type": "number", "example": 1 },
- "maxBusinessDays": { "type": "number", "example": 3 },
+ "minBusinessDays": {
+ "type": "number",
+ "example": 1
+ },
+ "maxBusinessDays": {
+ "type": "number",
+ "example": 3
+ },
"estimatedCompletionAt": {
"type": "string",
"description": "ISO timestamp by which the review is expected to complete."
@@ -31684,16 +42798,27 @@
},
"reviewWindow": {
"description": "Estimated review window. Present only when state === \"in_review\".",
- "allOf": [{ "$ref": "#/components/schemas/ReviewWindowDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ReviewWindowDto"
+ }
+ ]
},
"decline": {
"description": "Decline details. Present only when state === \"declined\".",
- "allOf": [{ "$ref": "#/components/schemas/DeclineDetailsDto" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DeclineDetailsDto"
+ }
+ ]
}
},
"required": ["state", "canStartNew", "message"]
},
- "CreateDiditSessionDto": { "type": "object", "properties": {} },
+ "CreateDiditSessionDto": {
+ "type": "object",
+ "properties": {}
+ },
"PricingPreviewResponseDto": {
"type": "object",
"properties": {
@@ -31726,7 +42851,261 @@
"reason"
]
},
- "Function": { "type": "object", "properties": {} },
+ "Function": {
+ "type": "object",
+ "properties": {}
+ },
+ "BountyScopeSectionDto": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string",
+ "description": "Bounty title",
+ "maxLength": 200
+ },
+ "description": {
+ "type": "string",
+ "description": "Bounty description",
+ "maxLength": 5000
+ },
+ "githubIssueUrl": {
+ "type": "string",
+ "format": "uri",
+ "nullable": true
+ },
+ "githubIssueNumber": {
+ "type": "number",
+ "nullable": true
+ },
+ "projectId": {
+ "type": "string",
+ "nullable": true
+ },
+ "bountyWindowId": {
+ "type": "string",
+ "nullable": true
+ }
+ },
+ "required": ["title", "description"]
+ },
+ "BountyModeSectionDto": {
+ "type": "object",
+ "properties": {
+ "claimType": {
+ "type": "string",
+ "enum": ["SINGLE_CLAIM", "COMPETITION"]
+ },
+ "entryType": {
+ "type": "string",
+ "enum": ["OPEN", "APPLICATION_LIGHT", "APPLICATION_FULL"]
+ }
+ },
+ "required": ["claimType", "entryType"]
+ },
+ "BountySubmissionSectionDto": {
+ "type": "object",
+ "properties": {
+ "submissionDeadline": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "applicationWindowCloseAt": {
+ "type": "string",
+ "format": "date-time",
+ "nullable": true
+ },
+ "maxApplicants": {
+ "type": "number",
+ "nullable": true,
+ "minimum": 1
+ },
+ "shortlistSize": {
+ "type": "number",
+ "nullable": true,
+ "minimum": 1
+ },
+ "reputationMinimum": {
+ "type": "number",
+ "nullable": true,
+ "minimum": 0
+ },
+ "submissionVisibility": {
+ "type": "string",
+ "enum": ["ORGANIZER_ONLY", "HIDDEN_UNTIL_DEADLINE"]
+ },
+ "applicationCreditCost": {
+ "type": "number",
+ "nullable": true,
+ "minimum": 0,
+ "maximum": 100,
+ "description": "Credits required to apply (anti-spam). Supplied to the contract at publish via PublishBountyEscrowDto; not a Bounty column."
+ }
+ },
+ "required": ["submissionDeadline"]
+ },
+ "BountyPrizeTierInputDto": {
+ "type": "object",
+ "properties": {
+ "position": {
+ "type": "number",
+ "description": "1 = 1st place; unique within a bounty",
+ "minimum": 1
+ },
+ "amount": {
+ "type": "string",
+ "description": "Tier amount as a positive decimal string"
+ },
+ "passMark": {
+ "type": "number",
+ "nullable": true,
+ "minimum": 0,
+ "maximum": 100
+ }
+ },
+ "required": ["position", "amount"]
+ },
+ "BountyRewardSectionDto": {
+ "type": "object",
+ "properties": {
+ "rewardCurrency": {
+ "type": "string",
+ "description": "Token / currency code the prize is denominated in"
+ },
+ "prizeTiers": {
+ "description": "1 tier for single claim; 1-3 tiers for a competition (multiple winners).",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BountyPrizeTierInputDto"
+ }
+ }
+ },
+ "required": ["rewardCurrency", "prizeTiers"]
+ },
+ "BountyDraftDataDto": {
+ "type": "object",
+ "properties": {
+ "scope": {
+ "$ref": "#/components/schemas/BountyScopeSectionDto"
+ },
+ "mode": {
+ "$ref": "#/components/schemas/BountyModeSectionDto"
+ },
+ "submission": {
+ "$ref": "#/components/schemas/BountySubmissionSectionDto"
+ },
+ "reward": {
+ "$ref": "#/components/schemas/BountyRewardSectionDto"
+ }
+ }
+ },
+ "BountyDraftPrizeTierDto": {
+ "type": "object",
+ "properties": {
+ "position": {
+ "type": "number"
+ },
+ "amount": {
+ "type": "string",
+ "description": "Tier amount as a decimal string"
+ },
+ "passMark": {
+ "type": "number",
+ "nullable": true
+ }
+ },
+ "required": ["position", "amount"]
+ },
+ "BountyDraftResponseDto": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "description": "Bounty lifecycle state (lowercase).",
+ "example": "draft"
+ },
+ "currentStep": {
+ "type": "number",
+ "description": "First incomplete step (1-based)"
+ },
+ "completedSteps": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "modeLabel": {
+ "type": "string",
+ "nullable": true,
+ "description": "Plain mode label derived from (entryType, claimType, winner count), e.g. \"Open competition (multiple winners)\"."
+ },
+ "data": {
+ "$ref": "#/components/schemas/BountyDraftDataDto"
+ },
+ "prizeTiers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BountyDraftPrizeTierDto"
+ }
+ },
+ "isValidForPublish": {
+ "type": "boolean"
+ },
+ "validationErrors": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "description": "Per-section validation messages, keyed by step"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "required": [
+ "id",
+ "status",
+ "currentStep",
+ "completedSteps",
+ "data",
+ "prizeTiers",
+ "isValidForPublish",
+ "validationErrors",
+ "createdAt",
+ "updatedAt"
+ ]
+ },
+ "UpdateBountyDraftDto": {
+ "type": "object",
+ "properties": {
+ "scope": {
+ "$ref": "#/components/schemas/BountyScopeSectionDto"
+ },
+ "mode": {
+ "$ref": "#/components/schemas/BountyModeSectionDto"
+ },
+ "submission": {
+ "$ref": "#/components/schemas/BountySubmissionSectionDto"
+ },
+ "reward": {
+ "$ref": "#/components/schemas/BountyRewardSectionDto"
+ },
+ "autoSave": {
+ "type": "boolean",
+ "description": "Hint that this is an autosave (no completion side effects)."
+ }
+ }
+ },
"BountyWinnerDistributionEntryDto": {
"type": "object",
"properties": {
@@ -31805,7 +43184,10 @@
"BountyEscrowOpResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string", "description": "Internal EscrowOp cuid." },
+ "id": {
+ "type": "string",
+ "description": "Internal EscrowOp uuid."
+ },
"opId": {
"type": "string",
"description": "Hex-encoded 32-byte contract op_id."
@@ -31814,12 +43196,18 @@
"type": "string",
"description": "Contract operation kind."
},
- "status": { "type": "string", "description": "EscrowOp status." },
+ "status": {
+ "type": "string",
+ "description": "EscrowOp status."
+ },
"entityKind": {
"type": "string",
"description": "EntityKind (BOUNTY for this surface)."
},
- "entityId": { "type": "string", "description": "Bounty id." },
+ "entityId": {
+ "type": "string",
+ "description": "Bounty id."
+ },
"unsignedXdr": {
"type": "string",
"nullable": true,
@@ -31840,8 +43228,14 @@
"nullable": true,
"description": "On-chain or platform-side error code when the op transitions to FAILED."
},
- "createdAt": { "format": "date-time", "type": "string" },
- "updatedAt": { "format": "date-time", "type": "string" }
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
},
"required": [
"id",
@@ -31912,7 +43306,9 @@
"selections": {
"description": "Winners to declare. Each entry must reference an applicant with an active submission. Positions must be unique within the array.",
"type": "array",
- "items": { "$ref": "#/components/schemas/BountyWinnerSelectionDto" }
+ "items": {
+ "$ref": "#/components/schemas/BountyWinnerSelectionDto"
+ }
},
"fundingMode": {
"type": "string",
@@ -32040,28 +43436,30 @@
},
"proposalShort": {
"type": "string",
- "description": "Light proposal text (LIGHT vetting): 100 to 300 words. Required for LIGHT mode."
+ "description": "Light proposal text (light application): 100 to 300 words. Required for APPLICATION_LIGHT mode."
},
"proposalFull": {
"type": "string",
- "description": "Full proposal text (HEAVY vetting): 500 to 2000 words. Required for HEAVY mode."
+ "description": "Full proposal text (full application): 500 to 2000 words. Required for APPLICATION_FULL mode."
},
"portfolioLinks": {
- "description": "Portfolio links. LIGHT: up to 3. HEAVY: up to 6.",
+ "description": "Portfolio links. APPLICATION_LIGHT: up to 3. APPLICATION_FULL: up to 6.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"estimatedDays": {
"type": "number",
- "description": "Estimated days to complete (LIGHT). Required for LIGHT mode."
+ "description": "Estimated days to complete (APPLICATION_LIGHT). Required for APPLICATION_LIGHT mode."
},
"qualifications": {
"type": "string",
- "description": "Qualifications text (HEAVY). Required for HEAVY mode."
+ "description": "Qualifications text (APPLICATION_FULL). Required for APPLICATION_FULL mode."
},
"videoIntroUrl": {
"type": "string",
- "description": "Optional video intro URL (HEAVY)."
+ "description": "Optional video intro URL (APPLICATION_FULL)."
}
},
"required": ["applicantAddress"]
@@ -32077,13 +43475,24 @@
"type": "string",
"description": "Full proposal text."
},
- "portfolioLinks": { "type": "array", "items": { "type": "string" } },
- "estimatedDays": { "type": "number" },
- "qualifications": { "type": "string" },
- "videoIntroUrl": { "type": "string" }
+ "portfolioLinks": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "estimatedDays": {
+ "type": "number"
+ },
+ "qualifications": {
+ "type": "string"
+ },
+ "videoIntroUrl": {
+ "type": "string"
+ }
}
},
- "SelectForPickDto": {
+ "SelectForSingleClaimDto": {
"type": "object",
"properties": {
"applicationId": {
@@ -32099,7 +43508,9 @@
"applicationIds": {
"description": "Application ids to include in the shortlist.",
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["applicationIds"]
@@ -32113,7 +43524,7 @@
}
}
},
- "JoinShowdownDto": {
+ "JoinCompetitionDto": {
"type": "object",
"properties": {
"applicantAddress": {
@@ -32127,7 +43538,9 @@
"BountyPrizeTierPublicDto": {
"type": "object",
"properties": {
- "position": { "type": "number" },
+ "position": {
+ "type": "number"
+ },
"amount": {
"type": "string",
"description": "Tier amount in token-native units."
@@ -32143,31 +43556,56 @@
"BountyOrganizationPublicDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "slug": { "type": "string", "nullable": true },
- "logo": { "type": "string", "nullable": true }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string",
+ "nullable": true
+ },
+ "logo": {
+ "type": "string",
+ "nullable": true
+ }
},
"required": ["id", "name"]
},
"BountyPublicDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "title": { "type": "string" },
- "description": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
"status": {
"type": "string",
"description": "Pillar lifecycle state (lowercase)."
},
- "type": { "type": "string" },
- "rewardAmount": { "type": "number" },
- "rewardCurrency": { "type": "string" },
- "vettingLevel": {
+ "type": {
+ "type": "string"
+ },
+ "rewardAmount": {
+ "type": "number"
+ },
+ "rewardCurrency": {
+ "type": "string"
+ },
+ "entryType": {
+ "type": "string",
+ "enum": ["OPEN", "APPLICATION_LIGHT", "APPLICATION_FULL"]
+ },
+ "claimType": {
"type": "string",
- "enum": ["NONE", "LIGHT", "HEAVY"]
+ "enum": ["SINGLE_CLAIM", "COMPETITION"]
},
- "selectionMode": { "type": "string", "enum": ["PICK", "SHOWDOWN"] },
"submissionVisibility": {
"type": "string",
"enum": ["ORGANIZER_ONLY", "HIDDEN_UNTIL_DEADLINE"]
@@ -32177,12 +43615,23 @@
"format": "date-time",
"nullable": true
},
- "maxApplicants": { "type": "number", "nullable": true },
- "shortlistSize": { "type": "number", "nullable": true },
- "reputationMinimum": { "type": "number", "nullable": true },
+ "maxApplicants": {
+ "type": "number",
+ "nullable": true
+ },
+ "shortlistSize": {
+ "type": "number",
+ "nullable": true
+ },
+ "reputationMinimum": {
+ "type": "number",
+ "nullable": true
+ },
"prizeTiers": {
"type": "array",
- "items": { "$ref": "#/components/schemas/BountyPrizeTierPublicDto" }
+ "items": {
+ "$ref": "#/components/schemas/BountyPrizeTierPublicDto"
+ }
},
"organization": {
"$ref": "#/components/schemas/BountyOrganizationPublicDto"
@@ -32192,8 +43641,14 @@
"nullable": true,
"description": "On-chain event id once published; null while in draft."
},
- "escrowTxHash": { "type": "string", "nullable": true },
- "createdAt": { "type": "string", "format": "date-time" }
+ "escrowTxHash": {
+ "type": "string",
+ "nullable": true
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ }
},
"required": [
"id",
@@ -32214,11 +43669,19 @@
"properties": {
"bounties": {
"type": "array",
- "items": { "$ref": "#/components/schemas/BountyPublicDto" }
+ "items": {
+ "$ref": "#/components/schemas/BountyPublicDto"
+ }
+ },
+ "total": {
+ "type": "number"
},
- "total": { "type": "number" },
- "page": { "type": "number" },
- "limit": { "type": "number" }
+ "page": {
+ "type": "number"
+ },
+ "limit": {
+ "type": "number"
+ }
},
"required": ["bounties", "total", "page", "limit"]
},
@@ -32292,18 +43755,48 @@
"GrantEscrowOpResponseDto": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "opId": { "type": "string" },
- "kind": { "type": "string" },
- "status": { "type": "string" },
- "entityKind": { "type": "string" },
- "entityId": { "type": "string" },
- "unsignedXdr": { "type": "string", "nullable": true },
- "signerHint": { "type": "string", "nullable": true },
- "txHash": { "type": "string", "nullable": true },
- "errorCode": { "type": "string", "nullable": true },
- "createdAt": { "format": "date-time", "type": "string" },
- "updatedAt": { "format": "date-time", "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "opId": {
+ "type": "string"
+ },
+ "kind": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "entityKind": {
+ "type": "string"
+ },
+ "entityId": {
+ "type": "string"
+ },
+ "unsignedXdr": {
+ "type": "string",
+ "nullable": true
+ },
+ "signerHint": {
+ "type": "string",
+ "nullable": true
+ },
+ "txHash": {
+ "type": "string",
+ "nullable": true
+ },
+ "errorCode": {
+ "type": "string",
+ "nullable": true
+ },
+ "createdAt": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "updatedAt": {
+ "format": "date-time",
+ "type": "string"
+ }
},
"required": [
"id",
@@ -32350,17 +43843,25 @@
"maximum": 100,
"example": 20
},
- "reputationBump": { "type": "number", "minimum": 0, "example": 50 }
+ "reputationBump": {
+ "type": "number",
+ "minimum": 0,
+ "example": 50
+ }
},
"required": ["grantApplicationId", "position"]
},
"SelectGrantWinnersDto": {
"type": "object",
"properties": {
- "ownerAddress": { "type": "string" },
+ "ownerAddress": {
+ "type": "string"
+ },
"selections": {
"type": "array",
- "items": { "$ref": "#/components/schemas/GrantWinnerSelectionDto" }
+ "items": {
+ "$ref": "#/components/schemas/GrantWinnerSelectionDto"
+ }
},
"fundingMode": {
"type": "string",
@@ -32373,7 +43874,9 @@
"ClaimGrantMilestoneDto": {
"type": "object",
"properties": {
- "ownerAddress": { "type": "string" },
+ "ownerAddress": {
+ "type": "string"
+ },
"grantMilestoneId": {
"type": "string",
"description": "GrantMilestone.id to claim payment for."
@@ -32388,7 +43891,11 @@
},
"GrantSubmitSignedXdrDto": {
"type": "object",
- "properties": { "signedXdr": { "type": "string" } },
+ "properties": {
+ "signedXdr": {
+ "type": "string"
+ }
+ },
"required": ["signedXdr"]
},
"ContributeGrantDto": {
@@ -32501,7 +44008,9 @@
"properties": {
"items": {
"type": "array",
- "items": { "$ref": "#/components/schemas/GrantPublicListItemDto" }
+ "items": {
+ "$ref": "#/components/schemas/GrantPublicListItemDto"
+ }
},
"total": {
"type": "number",
@@ -32532,7 +44041,11 @@
"type": {
"description": "The pillar this opportunity belongs to.",
"example": "BOUNTY",
- "allOf": [{ "$ref": "#/components/schemas/OpportunityType" }]
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/OpportunityType"
+ }
+ ]
},
"id": {
"type": "string",
@@ -32623,7 +44136,9 @@
"description": "Pillar-defined tags. Empty array for pillars without a tag field; never null.",
"example": ["stellar", "defi"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
},
"detailUrl": {
"type": "string",
@@ -32664,7 +44179,9 @@
"items": {
"description": "Cards in the current page, post-merge.",
"type": "array",
- "items": { "$ref": "#/components/schemas/OpportunityListItemDto" }
+ "items": {
+ "$ref": "#/components/schemas/OpportunityListItemDto"
+ }
},
"nextCursor": {
"type": "string",
@@ -32702,7 +44219,9 @@
"description": "Topic tags for subscription preferences",
"example": ["updates", "hackathons"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["email"]
@@ -32730,7 +44249,9 @@
"description": "Topic tags to subscribe to. Valid: bounties, hackathons, grants, updates",
"example": ["updates", "hackathons"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["email", "tags"]
@@ -32757,7 +44278,9 @@
"description": "Target subscriber tags — only subscribers with matching tags receive the campaign",
"example": ["hackathons", "updates"],
"type": "array",
- "items": { "type": "string" }
+ "items": {
+ "type": "string"
+ }
}
},
"required": ["subject", "content"]
@@ -32765,15 +44288,23 @@
"User": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "email": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
"emailVerified": {
"type": "boolean",
"default": false,
"readOnly": true
},
- "image": { "type": "string" },
+ "image": {
+ "type": "string"
+ },
"createdAt": {
"type": "string",
"format": "date-time",
@@ -32784,17 +44315,34 @@
"format": "date-time",
"default": "Generated at runtime"
},
- "username": { "type": "string" },
- "displayUsername": { "type": "string" },
+ "username": {
+ "type": "string"
+ },
+ "displayUsername": {
+ "type": "string"
+ },
"twoFactorEnabled": {
"type": "boolean",
"default": false,
"readOnly": true
},
- "lastLoginMethod": { "type": "string", "readOnly": true },
- "role": { "type": "string", "readOnly": true },
- "banned": { "type": "boolean", "default": false, "readOnly": true },
- "banReason": { "type": "string", "readOnly": true },
+ "lastLoginMethod": {
+ "type": "string",
+ "readOnly": true
+ },
+ "role": {
+ "type": "string",
+ "readOnly": true
+ },
+ "banned": {
+ "type": "boolean",
+ "default": false,
+ "readOnly": true
+ },
+ "banReason": {
+ "type": "string",
+ "readOnly": true
+ },
"banExpires": {
"type": "string",
"format": "date-time",
@@ -32806,43 +44354,90 @@
"Session": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "expiresAt": { "type": "string", "format": "date-time" },
- "token": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "token": {
+ "type": "string"
+ },
"createdAt": {
"type": "string",
"format": "date-time",
"default": "Generated at runtime"
},
- "updatedAt": { "type": "string", "format": "date-time" },
- "ipAddress": { "type": "string" },
- "userAgent": { "type": "string" },
- "userId": { "type": "string" },
- "activeOrganizationId": { "type": "string" },
- "impersonatedBy": { "type": "string" }
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "ipAddress": {
+ "type": "string"
+ },
+ "userAgent": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "activeOrganizationId": {
+ "type": "string"
+ },
+ "impersonatedBy": {
+ "type": "string"
+ }
},
"required": ["expiresAt", "token", "createdAt", "updatedAt", "userId"]
},
"Account": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "accountId": { "type": "string" },
- "providerId": { "type": "string" },
- "userId": { "type": "string" },
- "accessToken": { "type": "string" },
- "refreshToken": { "type": "string" },
- "idToken": { "type": "string" },
- "accessTokenExpiresAt": { "type": "string", "format": "date-time" },
- "refreshTokenExpiresAt": { "type": "string", "format": "date-time" },
- "scope": { "type": "string" },
- "password": { "type": "string" },
+ "id": {
+ "type": "string"
+ },
+ "accountId": {
+ "type": "string"
+ },
+ "providerId": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "accessToken": {
+ "type": "string"
+ },
+ "refreshToken": {
+ "type": "string"
+ },
+ "idToken": {
+ "type": "string"
+ },
+ "accessTokenExpiresAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "refreshTokenExpiresAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "scope": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ },
"createdAt": {
"type": "string",
"format": "date-time",
"default": "Generated at runtime"
},
- "updatedAt": { "type": "string", "format": "date-time" }
+ "updatedAt": {
+ "type": "string",
+ "format": "date-time"
+ }
},
"required": [
"accountId",
@@ -32855,10 +44450,19 @@
"Verification": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "identifier": { "type": "string" },
- "value": { "type": "string" },
- "expiresAt": { "type": "string", "format": "date-time" },
+ "id": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ },
+ "expiresAt": {
+ "type": "string",
+ "format": "date-time"
+ },
"createdAt": {
"type": "string",
"format": "date-time",
@@ -32881,51 +44485,100 @@
"TwoFactor": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "secret": { "type": "string" },
- "backupCodes": { "type": "string" },
- "userId": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "secret": {
+ "type": "string"
+ },
+ "backupCodes": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ }
},
"required": ["secret", "backupCodes", "userId"]
},
"Organization": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "slug": { "type": "string" },
- "logo": { "type": "string" },
- "createdAt": { "type": "string", "format": "date-time" },
- "metadata": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "slug": {
+ "type": "string"
+ },
+ "logo": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "metadata": {
+ "type": "string"
+ }
},
"required": ["name", "slug", "createdAt"]
},
"Member": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "organizationId": { "type": "string" },
- "userId": { "type": "string" },
- "role": { "type": "string", "default": "member" },
- "createdAt": { "type": "string", "format": "date-time" }
+ "id": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string",
+ "default": "member"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ }
},
"required": ["organizationId", "userId", "role", "createdAt"]
},
"Invitation": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "organizationId": { "type": "string" },
- "email": { "type": "string" },
- "role": { "type": "string" },
- "status": { "type": "string", "default": "pending" },
- "expiresAt": { "type": "string", "format": "date-time" },
+ "id": {
+ "type": "string"
+ },
+ "organizationId": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string",
+ "default": "pending"
+ },
+ "expiresAt": {
+ "type": "string",
+ "format": "date-time"
+ },
"createdAt": {
"type": "string",
"format": "date-time",
"default": "Generated at runtime"
},
- "inviterId": { "type": "string" }
+ "inviterId": {
+ "type": "string"
+ }
},
"required": [
"organizationId",
@@ -32939,17 +44592,40 @@
"Passkey": {
"type": "object",
"properties": {
- "id": { "type": "string" },
- "name": { "type": "string" },
- "publicKey": { "type": "string" },
- "userId": { "type": "string" },
- "credentialID": { "type": "string" },
- "counter": { "type": "number" },
- "deviceType": { "type": "string" },
- "backedUp": { "type": "boolean" },
- "transports": { "type": "string" },
- "createdAt": { "type": "string", "format": "date-time" },
- "aaguid": { "type": "string" }
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "publicKey": {
+ "type": "string"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "credentialID": {
+ "type": "string"
+ },
+ "counter": {
+ "type": "number"
+ },
+ "deviceType": {
+ "type": "string"
+ },
+ "backedUp": {
+ "type": "boolean"
+ },
+ "transports": {
+ "type": "string"
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "aaguid": {
+ "type": "string"
+ }
},
"required": [
"publicKey",
diff --git a/package-lock.json b/package-lock.json
index 69892e81f..05f2db177 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -230,12 +230,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
- "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/helper-validator-identifier": "^7.29.7",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -244,9 +244,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
- "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -254,21 +254,21 @@
}
},
"node_modules/@babel/core": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
- "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-compilation-targets": "^7.28.6",
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helpers": "^7.28.6",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
"@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -295,14 +295,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.29.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
- "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
+ "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -312,14 +312,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
- "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.28.6",
- "@babel/helper-validator-option": "^7.27.1",
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -339,9 +339,9 @@
}
},
"node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -349,29 +349,29 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
- "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
- "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.28.6",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.6"
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -381,9 +381,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -391,18 +391,18 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -410,27 +410,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
- "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
- "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.29.0"
+ "@babel/types": "^7.29.7"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -449,33 +449,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
- "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/parser": "^7.28.6",
- "@babel/types": "^7.28.6"
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
- "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
+ "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.29.0",
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7",
"debug": "^4.3.1"
},
"engines": {
@@ -483,14 +483,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.29.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
- "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -736,9 +736,9 @@
"license": "Apache-2.0"
},
"node_modules/@coinbase/cdp-sdk": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/@coinbase/cdp-sdk/-/cdp-sdk-1.51.0.tgz",
- "integrity": "sha512-XK8+OXDER1jirYpuiOct4ij65ODQ31LsmyRrZi/J7zF4GB89qxWZ0KPfAdsqJMP7VvE4no+Q++MKkQtAJUBoyg==",
+ "version": "1.51.2",
+ "resolved": "https://registry.npmjs.org/@coinbase/cdp-sdk/-/cdp-sdk-1.51.2.tgz",
+ "integrity": "sha512-o4IEwXbyAjfhPQWoFBuqnV1JQGLk4NlUVMzH/ur4voPSjYZvlYFVuOoE/eEcsoPFN28xaWTBvqebwncQL8h8fQ==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -11711,12 +11711,15 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.19",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
- "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
+ "version": "2.10.38",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz",
+ "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==",
"license": "Apache-2.0",
"bin": {
- "baseline-browser-mapping": "dist/cli.js"
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/bcp-47-match": {
@@ -12126,9 +12129,9 @@
"peer": true
},
"node_modules/browserslist": {
- "version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "version": "4.28.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz",
+ "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==",
"dev": true,
"funding": [
{
@@ -12146,11 +12149,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
+ "baseline-browser-mapping": "^2.10.38",
+ "caniuse-lite": "^1.0.30001799",
+ "electron-to-chromium": "^1.5.376",
+ "node-releases": "^2.0.48",
+ "update-browserslist-db": "^1.2.3"
},
"bin": {
"browserslist": "cli.js"
@@ -12324,9 +12327,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001770",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz",
- "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==",
+ "version": "1.0.30001799",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz",
+ "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==",
"funding": [
{
"type": "opencollective",
@@ -13798,9 +13801,9 @@
}
},
"node_modules/dompurify": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.2.tgz",
- "integrity": "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==",
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz",
+ "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
@@ -13837,9 +13840,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.286",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
- "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
+ "version": "1.5.378",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.378.tgz",
+ "integrity": "sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==",
"dev": true,
"license": "ISC"
},
@@ -13914,18 +13917,39 @@
"license": "MIT"
},
"node_modules/engine.io-client": {
- "version": "6.6.5",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.5.tgz",
- "integrity": "sha512-QCwxUDULPlXv8F6tqMMKx5dNkTe6OaBYRMPYeXKBlyOoKvAmE0ac6pW7fFhSscJ/5SI7666/U/B+MElbsrJlIg==",
+ "version": "6.6.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.6.tgz",
+ "integrity": "sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==",
"license": "MIT",
"dependencies": {
"@socket.io/component-emitter": "~3.1.0",
"debug": "~4.4.1",
"engine.io-parser": "~5.2.1",
- "ws": "~8.20.1",
+ "ws": "~8.21.0",
"xmlhttprequest-ssl": "~2.1.1"
}
},
+ "node_modules/engine.io-client/node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
"node_modules/engine.io-parser": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
@@ -14903,16 +14927,16 @@
}
},
"node_modules/form-data": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
+ "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.12"
+ "hasown": "^2.0.4",
+ "mime-types": "^2.1.35"
},
"engines": {
"node": ">= 6"
@@ -15402,9 +15426,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -17167,9 +17191,19 @@
}
},
"node_modules/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.1.tgz",
+ "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/markdown-it"
+ }
+ ],
"license": "MIT",
"dependencies": {
"uc.micro": "^2.0.0"
@@ -17403,14 +17437,24 @@
}
},
"node_modules/markdown-it": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz",
- "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz",
+ "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/markdown-it"
+ }
+ ],
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
- "linkify-it": "^5.0.0",
+ "linkify-it": "^5.0.1",
"mdurl": "^2.0.0",
"punycode.js": "^2.3.1",
"uc.micro": "^2.1.0"
@@ -19082,11 +19126,14 @@
"license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "version": "2.0.49",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.49.tgz",
+ "integrity": "sha512-f06bl1D+8ZDkn2oOQQKAh5/otFWqVnM1Q5oerA8Pex7UfT66Tx4IPHIqVVFKqFT3FUtaDstdgkM7yT7JWhqxfw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/nofilter": {
"version": "3.1.0",
@@ -23655,9 +23702,9 @@
}
},
"node_modules/viem": {
- "version": "2.52.2",
- "resolved": "https://registry.npmjs.org/viem/-/viem-2.52.2.tgz",
- "integrity": "sha512-HSU12p5aD/kAPZfrlbCUqdiP4P/c6hQ9AhfTS51VbLUQIjkWd1d5EjrCx/SCxZ0zhZVRn4Iv5X5WDqXPG8Ubew==",
+ "version": "2.53.1",
+ "resolved": "https://registry.npmjs.org/viem/-/viem-2.53.1.tgz",
+ "integrity": "sha512-FhfJ/SW73CVosiyVLmIMVgKDRKYV1AGCLzZoHYvmNayyVff63Qi1ocPCk59LqC/cNw244RbBJjHnmxqXkE7NpA==",
"funding": [
{
"type": "github",