| openapi: 3.1.0 |
| info: |
| |
| title: Api |
| version: 0.1.0 |
| description: API specification for FB Group Publisher PRO |
| servers: |
| - url: /api |
| description: Base API path |
| tags: |
| - name: health |
| description: Health operations |
| - name: me |
| description: Current user |
| - name: subscription |
| description: PayPal subscription management |
| - name: paypal |
| description: PayPal webhook |
| - name: savedLists |
| description: Saved group lists |
| paths: |
| /healthz: |
| get: |
| operationId: healthCheck |
| tags: [health] |
| summary: Health check |
| responses: |
| "200": |
| description: Healthy |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/HealthStatus" |
|
|
| /me: |
| get: |
| operationId: getMe |
| tags: [me] |
| summary: Get current user with subscription state |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/MeResponse" |
| "401": |
| description: Unauthorized |
|
|
| /subscription/create: |
| post: |
| operationId: createSubscription |
| tags: [subscription] |
| summary: Create PayPal subscription, returns approval URL |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/CreateSubscriptionResponse" |
| "401": |
| description: Unauthorized |
|
|
| /subscription/activate: |
| post: |
| operationId: activateSubscription |
| tags: [subscription] |
| summary: Activate subscription after PayPal approval |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/ActivateSubscriptionBody" |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/SubscriptionState" |
|
|
| /subscription/cancel: |
| post: |
| operationId: cancelSubscription |
| tags: [subscription] |
| summary: Cancel current subscription |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/SubscriptionState" |
|
|
| /paypal/webhook: |
| post: |
| operationId: paypalWebhook |
| tags: [paypal] |
| summary: PayPal webhook receiver |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| type: object |
| additionalProperties: true |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/HealthStatus" |
|
|
| /saved-lists: |
| get: |
| operationId: listSavedLists |
| tags: [savedLists] |
| summary: List saved group lists |
| responses: |
| "200": |
| description: OK |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/ListSavedListsResponse" |
| "401": |
| description: Unauthorized |
| post: |
| operationId: createSavedList |
| tags: [savedLists] |
| summary: Save a group list |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/CreateSavedListBody" |
| responses: |
| "201": |
| description: Created |
| content: |
| application/json: |
| schema: |
| $ref: "#/components/schemas/SavedList" |
|
|
| /saved-lists/{id}: |
| delete: |
| operationId: deleteSavedList |
| tags: [savedLists] |
| summary: Delete a saved list |
| parameters: |
| - name: id |
| in: path |
| required: true |
| schema: |
| type: integer |
| responses: |
| "204": |
| description: Deleted |
|
|
| components: |
| schemas: |
| HealthStatus: |
| type: object |
| properties: |
| status: |
| type: string |
| required: |
| - status |
|
|
| SubscriptionState: |
| type: object |
| properties: |
| status: |
| type: string |
| enum: [none, trialing, active, cancelled, suspended, expired] |
| trialEnd: |
| type: [string, "null"] |
| format: date-time |
| currentPeriodEnd: |
| type: [string, "null"] |
| format: date-time |
| paypalSubscriptionId: |
| type: [string, "null"] |
| hasAccess: |
| type: boolean |
| required: |
| - status |
| - hasAccess |
|
|
| MeResponse: |
| type: object |
| properties: |
| userId: |
| type: string |
| email: |
| type: [string, "null"] |
| subscription: |
| $ref: "#/components/schemas/SubscriptionState" |
| required: |
| - userId |
| - subscription |
|
|
| CreateSubscriptionResponse: |
| type: object |
| properties: |
| subscriptionId: |
| type: string |
| approvalUrl: |
| type: string |
| required: |
| - subscriptionId |
| - approvalUrl |
|
|
| ActivateSubscriptionBody: |
| type: object |
| properties: |
| subscriptionId: |
| type: string |
| required: |
| - subscriptionId |
|
|
| SavedList: |
| type: object |
| properties: |
| id: |
| type: integer |
| name: |
| type: string |
| groupIds: |
| type: array |
| items: |
| type: string |
| createdAt: |
| type: string |
| format: date-time |
| required: |
| - id |
| - name |
| - groupIds |
| - createdAt |
|
|
| ListSavedListsResponse: |
| type: array |
| items: |
| $ref: "#/components/schemas/SavedList" |
|
|
| CreateSavedListBody: |
| type: object |
| properties: |
| name: |
| type: string |
| minLength: 1 |
| maxLength: 80 |
| groupIds: |
| type: array |
| items: |
| type: string |
| minItems: 1 |
| required: |
| - name |
| - groupIds |
|
|