chore: sync submodule state (parent ref update)
Made-with: Cursor
This commit is contained in:
985
docs/api/messaging-api.yaml
Normal file
985
docs/api/messaging-api.yaml
Normal file
@@ -0,0 +1,985 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Messaging API
|
||||
version: 1.0.0
|
||||
description: |
|
||||
REST API for messaging services including SMS, email, and portal notifications.
|
||||
|
||||
Supports multiple providers:
|
||||
- SMS: Twilio
|
||||
- Email: SendGrid, AWS SES, SMTP
|
||||
- Portal: Internal notification system
|
||||
|
||||
Features:
|
||||
- Template-based messaging with variable substitution
|
||||
- Provider abstraction for multi-provider support
|
||||
- Delivery status tracking
|
||||
- Webhook support for delivery events
|
||||
|
||||
contact:
|
||||
name: DBIS API Support
|
||||
email: api-support@dbis.org
|
||||
license:
|
||||
name: MIT
|
||||
url: https://opensource.org/licenses/MIT
|
||||
|
||||
servers:
|
||||
- url: https://api.d-bis.org/api/v1/messaging
|
||||
description: Production server
|
||||
- url: https://sandbox.d-bis.org/api/v1/messaging
|
||||
description: Sandbox server
|
||||
- url: http://localhost:3000/api/v1/messaging
|
||||
description: Development server
|
||||
|
||||
security:
|
||||
- BearerAuth: []
|
||||
- OAuth2MTLS: []
|
||||
|
||||
tags:
|
||||
- name: SMS
|
||||
description: SMS messaging operations
|
||||
- name: Email
|
||||
description: Email messaging operations
|
||||
- name: Portal
|
||||
description: Portal notification operations
|
||||
- name: Templates
|
||||
description: Message template management
|
||||
- name: Providers
|
||||
description: Provider configuration and management
|
||||
- name: Webhooks
|
||||
description: Webhook management for delivery status
|
||||
- name: Health
|
||||
description: Health check endpoints
|
||||
|
||||
paths:
|
||||
/health:
|
||||
get:
|
||||
tags: [Health]
|
||||
summary: Health check
|
||||
description: Returns the health status of the Messaging API and provider connections
|
||||
operationId: getHealth
|
||||
security: []
|
||||
responses:
|
||||
'200':
|
||||
description: Service is healthy
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: "healthy"
|
||||
providers:
|
||||
type: object
|
||||
properties:
|
||||
sms:
|
||||
type: object
|
||||
properties:
|
||||
twilio:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: "connected"
|
||||
accountSid:
|
||||
type: string
|
||||
email:
|
||||
type: object
|
||||
properties:
|
||||
sendgrid:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
ses:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
/sms/send:
|
||||
post:
|
||||
tags: [SMS]
|
||||
summary: Send SMS message
|
||||
description: Sends an SMS message using the configured SMS provider (default: Twilio)
|
||||
operationId: sendSMS
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SendSMSRequest'
|
||||
examples:
|
||||
simple:
|
||||
value:
|
||||
recipient: "+1234567890"
|
||||
message: "Your verification code is 123456"
|
||||
provider: "twilio"
|
||||
template:
|
||||
value:
|
||||
recipient: "+1234567890"
|
||||
template: "verification_code"
|
||||
variables:
|
||||
code: "123456"
|
||||
expiresIn: "5 minutes"
|
||||
provider: "twilio"
|
||||
responses:
|
||||
'200':
|
||||
description: SMS sent successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MessageResponse'
|
||||
example:
|
||||
success: true
|
||||
data:
|
||||
messageId: "SM1234567890abcdef"
|
||||
recipient: "+1234567890"
|
||||
status: "queued"
|
||||
provider: "twilio"
|
||||
sentAt: "2024-01-01T00:00:00Z"
|
||||
timestamp: "2024-01-01T00:00:00Z"
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/sms/{messageId}/status:
|
||||
get:
|
||||
tags: [SMS]
|
||||
summary: Get SMS message status
|
||||
description: Returns the delivery status of an SMS message
|
||||
operationId: getSMSStatus
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/MessageId'
|
||||
responses:
|
||||
'200':
|
||||
description: Message status
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MessageStatusResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/email/send:
|
||||
post:
|
||||
tags: [Email]
|
||||
summary: Send email message
|
||||
description: Sends an email message using the configured email provider
|
||||
operationId: sendEmail
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/SendEmailRequest'
|
||||
examples:
|
||||
simple:
|
||||
value:
|
||||
recipient: "user@example.com"
|
||||
subject: "Welcome to DBIS"
|
||||
body: "Welcome to DBIS! Your account has been created."
|
||||
provider: "sendgrid"
|
||||
template:
|
||||
value:
|
||||
recipient: "user@example.com"
|
||||
template: "welcome_email"
|
||||
variables:
|
||||
name: "John Doe"
|
||||
accountId: "ACC-123456"
|
||||
provider: "sendgrid"
|
||||
responses:
|
||||
'200':
|
||||
description: Email sent successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MessageResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/email/{messageId}/status:
|
||||
get:
|
||||
tags: [Email]
|
||||
summary: Get email message status
|
||||
description: Returns the delivery status of an email message
|
||||
operationId: getEmailStatus
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/MessageId'
|
||||
responses:
|
||||
'200':
|
||||
description: Message status
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MessageStatusResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/portal/notifications:
|
||||
post:
|
||||
tags: [Portal]
|
||||
summary: Create portal notification
|
||||
description: Creates a portal notification for a user
|
||||
operationId: createPortalNotification
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreatePortalNotificationRequest'
|
||||
example:
|
||||
recipientId: "user-123"
|
||||
template: "account_approved"
|
||||
variables:
|
||||
accountType: "Tier 1"
|
||||
approvedAt: "2024-01-01T00:00:00Z"
|
||||
priority: "normal"
|
||||
responses:
|
||||
'201':
|
||||
description: Portal notification created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MessageResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/templates:
|
||||
get:
|
||||
tags: [Templates]
|
||||
summary: List message templates
|
||||
description: Returns a list of available message templates
|
||||
operationId: listTemplates
|
||||
parameters:
|
||||
- name: type
|
||||
in: query
|
||||
description: Filter by template type
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
enum: [sms, email, portal]
|
||||
- name: page
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 1
|
||||
default: 1
|
||||
- name: pageSize
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 1
|
||||
maximum: 100
|
||||
default: 20
|
||||
responses:
|
||||
'200':
|
||||
description: List of templates
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TemplateListResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
post:
|
||||
tags: [Templates]
|
||||
summary: Create message template
|
||||
description: Creates a new message template
|
||||
operationId: createTemplate
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateTemplateRequest'
|
||||
example:
|
||||
name: "verification_code"
|
||||
type: "sms"
|
||||
subject: "Verification Code"
|
||||
body: "Your verification code is {{code}}. It expires in {{expiresIn}}."
|
||||
responses:
|
||||
'201':
|
||||
description: Template created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TemplateResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'409':
|
||||
$ref: '#/components/responses/Conflict'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/templates/{templateId}:
|
||||
get:
|
||||
tags: [Templates]
|
||||
summary: Get message template
|
||||
description: Returns details of a message template
|
||||
operationId: getTemplate
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/TemplateId'
|
||||
responses:
|
||||
'200':
|
||||
description: Template details
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TemplateResponse'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
put:
|
||||
tags: [Templates]
|
||||
summary: Update message template
|
||||
description: Updates an existing message template
|
||||
operationId: updateTemplate
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/TemplateId'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateTemplateRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Template updated
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TemplateResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
delete:
|
||||
tags: [Templates]
|
||||
summary: Delete message template
|
||||
description: Deletes a message template
|
||||
operationId: deleteTemplate
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/TemplateId'
|
||||
responses:
|
||||
'204':
|
||||
description: Template deleted
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/providers:
|
||||
get:
|
||||
tags: [Providers]
|
||||
summary: List available providers
|
||||
description: Returns a list of available messaging providers and their status
|
||||
operationId: listProviders
|
||||
responses:
|
||||
'200':
|
||||
description: List of providers
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ProviderListResponse'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/webhooks:
|
||||
post:
|
||||
tags: [Webhooks]
|
||||
summary: Register webhook
|
||||
description: Registers a webhook URL for delivery status events
|
||||
operationId: registerWebhook
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/RegisterWebhookRequest'
|
||||
example:
|
||||
url: "https://api.example.com/webhooks/messaging"
|
||||
events:
|
||||
- "sms.delivered"
|
||||
- "sms.failed"
|
||||
- "email.delivered"
|
||||
- "email.bounced"
|
||||
secret: "webhook_secret_token"
|
||||
responses:
|
||||
'201':
|
||||
description: Webhook registered
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WebhookResponse'
|
||||
'400':
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
get:
|
||||
tags: [Webhooks]
|
||||
summary: List registered webhooks
|
||||
description: Returns a list of registered webhooks
|
||||
operationId: listWebhooks
|
||||
responses:
|
||||
'200':
|
||||
description: List of webhooks
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WebhookListResponse'
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
/webhooks/{webhookId}:
|
||||
delete:
|
||||
tags: [Webhooks]
|
||||
summary: Delete webhook
|
||||
description: Deletes a registered webhook
|
||||
operationId: deleteWebhook
|
||||
parameters:
|
||||
- name: webhookId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
'204':
|
||||
description: Webhook deleted
|
||||
'401':
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
'403':
|
||||
$ref: '#/components/responses/Forbidden'
|
||||
'404':
|
||||
$ref: '#/components/responses/NotFound'
|
||||
'500':
|
||||
$ref: '#/components/responses/InternalServerError'
|
||||
|
||||
components:
|
||||
securitySchemes:
|
||||
BearerAuth:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
description: JWT token for authentication
|
||||
OAuth2MTLS:
|
||||
type: oauth2
|
||||
flows:
|
||||
clientCredentials:
|
||||
tokenUrl: https://auth.d-bis.org/oauth2/token
|
||||
scopes:
|
||||
messaging:read: Read access to messaging
|
||||
messaging:write: Write access to messaging
|
||||
|
||||
parameters:
|
||||
MessageId:
|
||||
name: messageId
|
||||
in: path
|
||||
required: true
|
||||
description: Message ID
|
||||
schema:
|
||||
type: string
|
||||
example: "SM1234567890abcdef"
|
||||
|
||||
TemplateId:
|
||||
name: templateId
|
||||
in: path
|
||||
required: true
|
||||
description: Template ID or name
|
||||
schema:
|
||||
type: string
|
||||
example: "verification_code"
|
||||
|
||||
schemas:
|
||||
SendSMSRequest:
|
||||
type: object
|
||||
required:
|
||||
- recipient
|
||||
properties:
|
||||
recipient:
|
||||
type: string
|
||||
description: Phone number in E.164 format
|
||||
pattern: '^\+[1-9]\d{1,14}$'
|
||||
example: "+1234567890"
|
||||
message:
|
||||
type: string
|
||||
description: Message text (required if template not provided)
|
||||
maxLength: 1600
|
||||
example: "Your verification code is 123456"
|
||||
template:
|
||||
type: string
|
||||
description: Template name (required if message not provided)
|
||||
example: "verification_code"
|
||||
variables:
|
||||
type: object
|
||||
description: Template variables
|
||||
additionalProperties:
|
||||
type: string
|
||||
example:
|
||||
code: "123456"
|
||||
expiresIn: "5 minutes"
|
||||
provider:
|
||||
type: string
|
||||
description: SMS provider to use
|
||||
enum: [twilio, default]
|
||||
default: "default"
|
||||
example: "twilio"
|
||||
priority:
|
||||
type: string
|
||||
enum: [low, normal, high, urgent]
|
||||
default: "normal"
|
||||
|
||||
SendEmailRequest:
|
||||
type: object
|
||||
required:
|
||||
- recipient
|
||||
properties:
|
||||
recipient:
|
||||
type: string
|
||||
format: email
|
||||
example: "user@example.com"
|
||||
subject:
|
||||
type: string
|
||||
description: Email subject (required if template not provided)
|
||||
example: "Welcome to DBIS"
|
||||
body:
|
||||
type: string
|
||||
description: Email body HTML or text (required if template not provided)
|
||||
example: "<html><body><p>Welcome to DBIS!</p></body></html>"
|
||||
template:
|
||||
type: string
|
||||
description: Template name (required if subject/body not provided)
|
||||
example: "welcome_email"
|
||||
variables:
|
||||
type: object
|
||||
description: Template variables
|
||||
additionalProperties:
|
||||
type: string
|
||||
example:
|
||||
name: "John Doe"
|
||||
accountId: "ACC-123456"
|
||||
provider:
|
||||
type: string
|
||||
description: Email provider to use
|
||||
enum: [sendgrid, ses, smtp, default]
|
||||
default: "default"
|
||||
example: "sendgrid"
|
||||
priority:
|
||||
type: string
|
||||
enum: [low, normal, high, urgent]
|
||||
default: "normal"
|
||||
from:
|
||||
type: string
|
||||
description: Sender email address (optional, uses default if not provided)
|
||||
format: email
|
||||
replyTo:
|
||||
type: string
|
||||
description: Reply-to email address
|
||||
format: email
|
||||
|
||||
CreatePortalNotificationRequest:
|
||||
type: object
|
||||
required:
|
||||
- recipientId
|
||||
- template
|
||||
properties:
|
||||
recipientId:
|
||||
type: string
|
||||
description: User ID or account ID
|
||||
example: "user-123"
|
||||
template:
|
||||
type: string
|
||||
description: Template name
|
||||
example: "account_approved"
|
||||
variables:
|
||||
type: object
|
||||
description: Template variables
|
||||
additionalProperties:
|
||||
type: string
|
||||
example:
|
||||
accountType: "Tier 1"
|
||||
priority:
|
||||
type: string
|
||||
enum: [low, normal, high, urgent]
|
||||
default: "normal"
|
||||
|
||||
CreateTemplateRequest:
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
- type
|
||||
- body
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description: Template name (unique identifier)
|
||||
example: "verification_code"
|
||||
type:
|
||||
type: string
|
||||
enum: [sms, email, portal]
|
||||
example: "sms"
|
||||
subject:
|
||||
type: string
|
||||
description: Email subject (required for email type)
|
||||
example: "Verification Code"
|
||||
body:
|
||||
type: string
|
||||
description: Message body with {{variable}} placeholders
|
||||
example: "Your verification code is {{code}}. It expires in {{expiresIn}}."
|
||||
description:
|
||||
type: string
|
||||
description: Template description
|
||||
example: "SMS template for verification codes"
|
||||
|
||||
UpdateTemplateRequest:
|
||||
type: object
|
||||
properties:
|
||||
subject:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
|
||||
RegisterWebhookRequest:
|
||||
type: object
|
||||
required:
|
||||
- url
|
||||
- events
|
||||
properties:
|
||||
url:
|
||||
type: string
|
||||
format: uri
|
||||
description: Webhook URL
|
||||
example: "https://api.example.com/webhooks/messaging"
|
||||
events:
|
||||
type: array
|
||||
description: Events to subscribe to
|
||||
items:
|
||||
type: string
|
||||
enum: [sms.queued, sms.sent, sms.delivered, sms.failed, email.queued, email.sent, email.delivered, email.bounced, email.failed, portal.created]
|
||||
example: ["sms.delivered", "sms.failed"]
|
||||
secret:
|
||||
type: string
|
||||
description: Webhook secret for signature verification
|
||||
example: "webhook_secret_token"
|
||||
active:
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
MessageResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
messageId:
|
||||
type: string
|
||||
example: "SM1234567890abcdef"
|
||||
recipient:
|
||||
type: string
|
||||
recipientType:
|
||||
type: string
|
||||
enum: [email, sms, portal]
|
||||
status:
|
||||
type: string
|
||||
enum: [queued, sent, delivered, failed, bounced]
|
||||
provider:
|
||||
type: string
|
||||
sentAt:
|
||||
type: string
|
||||
format: date-time
|
||||
deliveredAt:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
MessageStatusResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
messageId:
|
||||
type: string
|
||||
recipient:
|
||||
type: string
|
||||
status:
|
||||
type: string
|
||||
enum: [queued, sent, delivered, failed, bounced]
|
||||
provider:
|
||||
type: string
|
||||
sentAt:
|
||||
type: string
|
||||
format: date-time
|
||||
deliveredAt:
|
||||
type: string
|
||||
format: date-time
|
||||
error:
|
||||
type: string
|
||||
description: Error message if status is failed
|
||||
|
||||
Template:
|
||||
type: object
|
||||
properties:
|
||||
templateId:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
type:
|
||||
type: string
|
||||
enum: [sms, email, portal]
|
||||
subject:
|
||||
type: string
|
||||
body:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
createdAt:
|
||||
type: string
|
||||
format: date-time
|
||||
updatedAt:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
TemplateResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/Template'
|
||||
|
||||
TemplateListResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
templates:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Template'
|
||||
pagination:
|
||||
$ref: '#/components/schemas/Pagination'
|
||||
|
||||
Provider:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
type:
|
||||
type: string
|
||||
enum: [sms, email]
|
||||
status:
|
||||
type: string
|
||||
enum: [connected, disconnected, error]
|
||||
configured:
|
||||
type: boolean
|
||||
|
||||
ProviderListResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
providers:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Provider'
|
||||
|
||||
Webhook:
|
||||
type: object
|
||||
properties:
|
||||
webhookId:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
events:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
active:
|
||||
type: boolean
|
||||
createdAt:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
WebhookResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
$ref: '#/components/schemas/Webhook'
|
||||
|
||||
WebhookListResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/BaseResponse'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
properties:
|
||||
webhooks:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Webhook'
|
||||
|
||||
BaseResponse:
|
||||
type: object
|
||||
properties:
|
||||
success:
|
||||
type: boolean
|
||||
example: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
Pagination:
|
||||
type: object
|
||||
properties:
|
||||
page:
|
||||
type: integer
|
||||
pageSize:
|
||||
type: integer
|
||||
total:
|
||||
type: integer
|
||||
totalPages:
|
||||
type: integer
|
||||
|
||||
ErrorResponse:
|
||||
type: object
|
||||
properties:
|
||||
success:
|
||||
type: boolean
|
||||
example: false
|
||||
error:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
example: "VALIDATION_ERROR"
|
||||
message:
|
||||
type: string
|
||||
example: "Invalid request parameters"
|
||||
details:
|
||||
type: object
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
|
||||
responses:
|
||||
BadRequest:
|
||||
description: Bad request - validation error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
Unauthorized:
|
||||
description: Unauthorized - missing or invalid authentication
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
Forbidden:
|
||||
description: Forbidden - insufficient permissions
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
NotFound:
|
||||
description: Resource not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
Conflict:
|
||||
description: Conflict - resource already exists
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
|
||||
InternalServerError:
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
Reference in New Issue
Block a user