openapi: '3.0.3'
info:
title: Backbone API
version: '1.0.0'
description: |
Auto-generated by backbone-cli.
This API provides 11 standard CRUD endpoints for each model.
servers:
- url: /
description: Development server
tags:
- name: IntegrationConnectors
description: IntegrationConnector management endpoints
- name: IntegrationEvents
description: IntegrationEvent management endpoints
paths:
/api/v1/integrations/integration_connectors:
get:
tags:
- IntegrationConnectors
summary: List IntegrationConnectors
description: Get a paginated list of IntegrationConnectors with optional filtering and sorting
operationId: listIntegrationConnectors
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnectorList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- IntegrationConnectors
summary: Create IntegrationConnector
description: Create a new IntegrationConnector
operationId: createIntegrationConnector
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateIntegrationConnectorRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/integrations/integration_connectors/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- IntegrationConnectors
summary: Get IntegrationConnector by ID
operationId: getIntegrationConnector
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- IntegrationConnectors
summary: Update IntegrationConnector (full)
operationId: updateIntegrationConnector
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateIntegrationConnectorRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- IntegrationConnectors
summary: Update IntegrationConnector (partial)
operationId: patchIntegrationConnector
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchIntegrationConnectorRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- IntegrationConnectors
summary: Delete IntegrationConnector (soft)
operationId: deleteIntegrationConnector
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/integrations/integration_connectors/bulk:
post:
tags:
- IntegrationConnectors
summary: Bulk create IntegrationConnectors
operationId: bulkCreateIntegrationConnectors
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateIntegrationConnectorRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IntegrationConnector'
put:
tags:
- IntegrationConnectors
summary: Bulk update IntegrationConnectors (full, atomic)
operationId: bulkUpdateIntegrationConnectors
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateIntegrationConnectorRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnectorBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- IntegrationConnectors
summary: Bulk partial-update IntegrationConnectors (atomic)
operationId: bulkPatchIntegrationConnectors
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnectorBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_connectors/upsert:
post:
tags:
- IntegrationConnectors
summary: Upsert IntegrationConnector
operationId: upsertIntegrationConnector
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateIntegrationConnectorRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
/api/v1/integrations/integration_connectors/trash:
get:
tags:
- IntegrationConnectors
summary: List deleted IntegrationConnectors
operationId: listDeletedIntegrationConnectors
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnectorList'
/api/v1/integrations/integration_connectors/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- IntegrationConnectors
summary: Restore deleted IntegrationConnector
operationId: restoreIntegrationConnector
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnector'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/integrations/integration_connectors/empty:
delete:
tags:
- IntegrationConnectors
summary: Empty trash for IntegrationConnectors
operationId: emptyTrashIntegrationConnectors
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/integrations/integration_connectors/delete/bulk:
post:
tags:
- IntegrationConnectors
summary: Bulk soft-delete IntegrationConnectors by ids (atomic)
operationId: bulkDeleteIntegrationConnectors
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_connectors/restore/bulk:
post:
tags:
- IntegrationConnectors
summary: Bulk restore IntegrationConnectors by ids (atomic)
operationId: bulkRestoreIntegrationConnectors
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationConnectorBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_connectors/restore/all:
post:
tags:
- IntegrationConnectors
summary: Restore all soft-deleted IntegrationConnectors
operationId: restoreAllIntegrationConnectors
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/integrations/integration_connectors/trash/bulk:
delete:
tags:
- IntegrationConnectors
summary: Bulk permanently-delete IntegrationConnectors from trash by ids (atomic)
operationId: bulkPermanentDeleteIntegrationConnectors
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_events:
get:
tags:
- IntegrationEvents
summary: List IntegrationEvents
description: Get a paginated list of IntegrationEvents with optional filtering and sorting
operationId: listIntegrationEvents
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/SortByParam'
- $ref: '#/components/parameters/SortOrderParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventList'
'401':
$ref: '#/components/responses/Unauthorized'
post:
tags:
- IntegrationEvents
summary: Create IntegrationEvent
description: Create a new IntegrationEvent
operationId: createIntegrationEvent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateIntegrationEventRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
/api/v1/integrations/integration_events/{id}:
parameters:
- $ref: '#/components/parameters/IdParam'
get:
tags:
- IntegrationEvents
summary: Get IntegrationEvent by ID
operationId: getIntegrationEvent
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- IntegrationEvents
summary: Update IntegrationEvent (full)
operationId: updateIntegrationEvent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateIntegrationEventRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- IntegrationEvents
summary: Update IntegrationEvent (partial)
operationId: patchIntegrationEvent
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PatchIntegrationEventRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- IntegrationEvents
summary: Delete IntegrationEvent (soft)
operationId: deleteIntegrationEvent
responses:
'204':
description: Deleted
'404':
$ref: '#/components/responses/NotFound'
/api/v1/integrations/integration_events/bulk:
post:
tags:
- IntegrationEvents
summary: Bulk create IntegrationEvents
operationId: bulkCreateIntegrationEvents
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CreateIntegrationEventRequest'
responses:
'201':
description: Created
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IntegrationEvent'
put:
tags:
- IntegrationEvents
summary: Bulk update IntegrationEvents (full, atomic)
operationId: bulkUpdateIntegrationEvents
requestBody:
required: true
content:
application/json:
schema:
type: array
items:
allOf:
- type: object
required: [id]
properties:
id:
type: string
- $ref: '#/components/schemas/UpdateIntegrationEventRequest'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
patch:
tags:
- IntegrationEvents
summary: Bulk partial-update IntegrationEvents (atomic)
operationId: bulkPatchIntegrationEvents
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
required: [ids, patch]
properties:
ids:
type: array
items: { type: string }
patch:
type: object
additionalProperties: true
- type: object
required: [items]
properties:
items:
type: array
items:
type: object
required: [id, patch]
properties:
id: { type: string }
patch: { type: object, additionalProperties: true }
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_events/upsert:
post:
tags:
- IntegrationEvents
summary: Upsert IntegrationEvent
operationId: upsertIntegrationEvent
parameters:
- name: key_field
in: query
schema:
type: string
- name: key_value
in: query
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateIntegrationEventRequest'
responses:
'200':
description: Upserted
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
/api/v1/integrations/integration_events/trash:
get:
tags:
- IntegrationEvents
summary: List deleted IntegrationEvents
operationId: listDeletedIntegrationEvents
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/PerPageParam'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventList'
/api/v1/integrations/integration_events/{id}/restore:
parameters:
- $ref: '#/components/parameters/IdParam'
post:
tags:
- IntegrationEvents
summary: Restore deleted IntegrationEvent
operationId: restoreIntegrationEvent
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEvent'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/integrations/integration_events/empty:
delete:
tags:
- IntegrationEvents
summary: Empty trash for IntegrationEvents
operationId: emptyTrashIntegrationEvents
responses:
'200':
description: Trash emptied
content:
application/json:
schema:
type: object
properties:
deleted_count:
type: integer
/api/v1/integrations/integration_events/delete/bulk:
post:
tags:
- IntegrationEvents
summary: Bulk soft-delete IntegrationEvents by ids (atomic)
operationId: bulkDeleteIntegrationEvents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Soft-deleted
content:
application/json:
schema:
type: object
properties:
soft_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_events/restore/bulk:
post:
tags:
- IntegrationEvents
summary: Bulk restore IntegrationEvents by ids (atomic)
operationId: bulkRestoreIntegrationEvents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Restored
content:
application/json:
schema:
$ref: '#/components/schemas/IntegrationEventBulkResult'
'400':
$ref: '#/components/responses/BadRequest'
/api/v1/integrations/integration_events/restore/all:
post:
tags:
- IntegrationEvents
summary: Restore all soft-deleted IntegrationEvents
operationId: restoreAllIntegrationEvents
responses:
'200':
description: Restored
content:
application/json:
schema:
type: object
properties:
restored: { type: integer }
/api/v1/integrations/integration_events/trash/bulk:
delete:
tags:
- IntegrationEvents
summary: Bulk permanently-delete IntegrationEvents from trash by ids (atomic)
operationId: bulkPermanentDeleteIntegrationEvents
requestBody:
$ref: '#/components/requestBodies/BatchIds'
responses:
'200':
description: Permanently deleted
content:
application/json:
schema:
type: object
properties:
permanently_deleted: { type: integer }
'400':
$ref: '#/components/responses/BadRequest'
components:
schemas:
IntegrationConnector:
type: object
required:
- id
- provider
- kind
- direction
- status
- metadata
properties:
id:
type: string
format: uuid
provider:
type: string
kind:
type: string
direction:
type: string
status:
type: string
metadata:
type: object
IntegrationConnectorBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/IntegrationConnector'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateIntegrationConnectorRequest:
type: object
required:
- provider
- kind
- direction
- status
- metadata
properties:
provider:
type: string
kind:
type: string
direction:
type: string
status:
type: string
metadata:
type: object
UpdateIntegrationConnectorRequest:
type: object
required:
- provider
- kind
- direction
- status
- metadata
properties:
provider:
type: string
kind:
type: string
direction:
type: string
status:
type: string
metadata:
type: object
PatchIntegrationConnectorRequest:
type: object
properties:
provider:
type: string
kind:
type: string
direction:
type: string
status:
type: string
metadata:
type: object
IntegrationConnectorList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/IntegrationConnector'
meta:
$ref: '#/components/schemas/PaginationMeta'
IntegrationEvent:
type: object
required:
- id
- connector_id
- event_type
- external_id
- business_key
- status
- payload
- metadata
properties:
id:
type: string
format: uuid
connector_id:
type: string
format: uuid
event_type:
type: string
external_id:
type: string
business_key:
type: string
status:
type: string
payload:
type: string
mapped_ref_type:
nullable: true
type: string
mapped_ref_id:
nullable: true
type: string
format: uuid
error_detail:
nullable: true
type: string
metadata:
type: object
IntegrationEventBulkResult:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/IntegrationEvent'
total: { type: integer }
failed: { type: integer }
errors:
type: array
items: { type: string }
CreateIntegrationEventRequest:
type: object
required:
- connector_id
- event_type
- external_id
- business_key
- status
- payload
- metadata
properties:
connector_id:
type: string
format: uuid
event_type:
type: string
external_id:
type: string
business_key:
type: string
status:
type: string
payload:
type: string
mapped_ref_type:
nullable: true
type: string
mapped_ref_id:
nullable: true
type: string
format: uuid
error_detail:
nullable: true
type: string
metadata:
type: object
UpdateIntegrationEventRequest:
type: object
required:
- connector_id
- event_type
- external_id
- business_key
- status
- payload
- metadata
properties:
connector_id:
type: string
format: uuid
event_type:
type: string
external_id:
type: string
business_key:
type: string
status:
type: string
payload:
type: string
mapped_ref_type:
nullable: true
type: string
mapped_ref_id:
nullable: true
type: string
format: uuid
error_detail:
nullable: true
type: string
metadata:
type: object
PatchIntegrationEventRequest:
type: object
properties:
connector_id:
type: string
format: uuid
event_type:
type: string
external_id:
type: string
business_key:
type: string
status:
type: string
payload:
type: string
mapped_ref_type:
nullable: true
type: string
mapped_ref_id:
nullable: true
type: string
format: uuid
error_detail:
nullable: true
type: string
metadata:
type: object
IntegrationEventList:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/IntegrationEvent'
meta:
$ref: '#/components/schemas/PaginationMeta'
PaginationMeta:
type: object
properties:
total:
type: integer
example: 100
page:
type: integer
example: 1
per_page:
type: integer
example: 20
total_pages:
type: integer
example: 5
Error:
type: object
required:
- code
- message
properties:
code:
type: string
example: VALIDATION_ERROR
message:
type: string
example: Invalid input data
details:
type: object
additionalProperties: true
parameters:
IdParam:
name: id
in: path
required: true
schema:
type: string
format: uuid
PageParam:
name: page
in: query
schema:
type: integer
minimum: 1
default: 1
PerPageParam:
name: per_page
in: query
schema:
type: integer
minimum: 1
maximum: 100
default: 20
SortByParam:
name: sort_by
in: query
schema:
type: string
SortOrderParam:
name: sort_order
in: query
schema:
type: string
enum: [asc, desc]
default: asc
responses:
BadRequest:
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
requestBodies:
BatchIds:
required: true
content:
application/json:
schema:
type: object
required: [ids]
properties:
ids:
type: array
items: { type: string }
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
security:
- bearerAuth: []