Context4
Техническая документация

Схемы API: часть 2.

JSON Schema входных данных и ответов: EndUserRef — DataSourceConnectionList. Поля, обязательность и ограничения API.

Точные имена полей, required, enum, nullable и ограничения сохранены из OpenAPI. $ref разрешается относительно components.schemas полного документа. Все части: 1, 2, 3, 4.

EndUserRef

Data
{
  "type": "string",
  "pattern": "^[A-Za-z0-9][A-Za-z0-9 _.:@-]{0,255}$"
}
Data
{
  "type": "object",
  "properties": {
    "connection_id": {
      "type": "string",
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "connect_url": {
      "type": "string",
      "maxLength": 2048,
      "format": "uri"
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    }
  },
  "required": [
    "connection_id",
    "connect_url",
    "expires_at"
  ],
  "additionalProperties": false,
  "description": "Hosted authorization link; direct the end user to connect_url before it expires"
}

CreateConnectionRequest

Связанные схемы: EndUserRef.

Data
{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{1,78}$",
      "example": "bitrix24"
    },
    "user_id": {
      "$ref": "#/components/schemas/EndUserRef"
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "pattern": "^[\\p{L}\\p{N}][\\p{L}\\p{N}\\p{Pd} _.]+$"
    },
    "resume": {
      "type": "object",
      "properties": {
        "connection_id": {
          "type": "string",
          "format": "uuid",
          "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
        },
        "expected_version": {
          "type": "integer",
          "exclusiveMinimum": 0
        }
      },
      "required": [
        "connection_id",
        "expected_version"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "connector_id",
    "name"
  ],
  "additionalProperties": false,
  "description": "Initiates hosted OAuth authorization. Optional resume renews an unactivated connection in place; account identity must match and expected_version guards concurrent attempts."
}

AuthConfigListResponse

Связанные схемы: AuthConfig.

Data
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/AuthConfig"
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 400,
      "description": "Cursor for the next page; null when exhausted"
    }
  },
  "required": [
    "data",
    "next_cursor"
  ],
  "additionalProperties": false
}

AuthConfig

Data
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "connector_id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{1,78}$",
      "example": "bitrix24"
    },
    "mode": {
      "type": "string",
      "enum": [
        "managed",
        "custom"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "client_id_mask": {
      "type": "string",
      "maxLength": 24
    },
    "scopes": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256
      },
      "maxItems": 64
    },
    "status": {
      "type": "string",
      "enum": [
        "enabled",
        "disabled"
      ]
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    }
  },
  "required": [
    "id",
    "connector_id",
    "mode",
    "name",
    "client_id_mask",
    "scopes",
    "status",
    "version",
    "created_at",
    "updated_at"
  ],
  "additionalProperties": false
}

CreateAuthConfigRequest

Data
{
  "type": "object",
  "properties": {
    "connector_id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{1,78}$",
      "example": "bitrix24"
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "mode": {
      "type": "string",
      "enum": [
        "managed",
        "custom"
      ]
    },
    "client_id": {
      "type": "string",
      "minLength": 4,
      "maxLength": 512
    },
    "client_secret": {
      "type": "string",
      "minLength": 8,
      "maxLength": 4096
    },
    "scopes": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256
      },
      "maxItems": 64
    }
  },
  "required": [
    "connector_id",
    "name"
  ],
  "additionalProperties": false,
  "description": "Registers a named auth configuration; a custom mode requires the tenant's OAuth client, whose secret is delivered once to the engine boundary and never echoed"
}

UpdateAuthConfigRequest

Data
{
  "type": "object",
  "properties": {
    "expected_version": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "status": {
      "type": "string",
      "enum": [
        "enabled",
        "disabled"
      ]
    }
  },
  "required": [
    "expected_version"
  ],
  "additionalProperties": false
}

NetworkAttachment

Data
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "mode": {
      "type": "string",
      "enum": [
        "direct",
        "wireguard",
        "openvpn"
      ]
    },
    "destinations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "host": {
            "type": "string",
            "minLength": 1,
            "maxLength": 253,
            "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
          },
          "port": {
            "type": "integer",
            "minimum": 1,
            "maximum": 65535
          }
        },
        "required": [
          "host",
          "port"
        ],
        "additionalProperties": false
      }
    },
    "dns_servers": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "format": "ip"
          },
          {
            "type": "string",
            "format": "ip"
          }
        ]
      },
      "maxItems": 3
    },
    "connection_enabled": {
      "type": "boolean"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "provisioning",
        "active",
        "degraded",
        "draining",
        "ready_to_revoke",
        "revoked",
        "failed"
      ]
    },
    "status_reason": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120
    },
    "desired_generation": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "observed_generation": {
      "type": "integer",
      "minimum": 0
    },
    "active_lease_count": {
      "type": "integer",
      "minimum": 0
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "last_health_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    },
    "revoked_at": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    }
  },
  "required": [
    "id",
    "name",
    "mode",
    "destinations",
    "dns_servers",
    "connection_enabled",
    "status",
    "status_reason",
    "desired_generation",
    "observed_generation",
    "active_lease_count",
    "version",
    "last_health_at",
    "revoked_at",
    "created_at",
    "updated_at"
  ],
  "additionalProperties": false
}

NetworkAttachmentList

Связанные схемы: NetworkAttachment.

Data
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/NetworkAttachment"
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 400,
      "description": "Cursor for the next page; null when exhausted"
    }
  },
  "required": [
    "data",
    "next_cursor"
  ],
  "additionalProperties": false
}

CreateNetworkAttachmentRequest

Data
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "dns_servers": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "format": "ip"
              },
              {
                "type": "string",
                "format": "ip"
              }
            ]
          },
          "maxItems": 3
        },
        "name": {
          "type": "string",
          "minLength": 2,
          "maxLength": 120
        },
        "destinations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "host": {
                "type": "string",
                "minLength": 1,
                "maxLength": 253,
                "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535
              }
            },
            "required": [
              "host",
              "port"
            ],
            "additionalProperties": false
          },
          "minItems": 1,
          "maxItems": 64
        },
        "mode": {
          "type": "string",
          "enum": [
            "direct"
          ]
        }
      },
      "required": [
        "name",
        "destinations",
        "mode"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "dns_servers": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "format": "ip"
              },
              {
                "type": "string",
                "format": "ip"
              }
            ]
          },
          "maxItems": 3
        },
        "name": {
          "type": "string",
          "minLength": 2,
          "maxLength": 120
        },
        "destinations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "host": {
                "type": "string",
                "minLength": 1,
                "maxLength": 253,
                "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535
              }
            },
            "required": [
              "host",
              "port"
            ],
            "additionalProperties": false
          },
          "minItems": 1,
          "maxItems": 64
        },
        "mode": {
          "type": "string",
          "enum": [
            "wireguard"
          ]
        },
        "credential": {
          "type": "object",
          "properties": {
            "private_key": {
              "type": "string",
              "minLength": 32,
              "maxLength": 256
            },
            "peer_public_key": {
              "type": "string",
              "minLength": 32,
              "maxLength": 256
            },
            "preshared_key": {
              "type": "string",
              "minLength": 32,
              "maxLength": 256
            },
            "endpoint_host": {
              "type": "string",
              "minLength": 1,
              "maxLength": 253,
              "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
            },
            "endpoint_port": {
              "type": "integer",
              "minimum": 1,
              "maximum": 65535
            },
            "interface_addresses": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 3,
                "maxLength": 64
              },
              "minItems": 1,
              "maxItems": 8
            }
          },
          "required": [
            "private_key",
            "peer_public_key",
            "endpoint_host",
            "endpoint_port",
            "interface_addresses"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "name",
        "destinations",
        "mode",
        "credential"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "dns_servers": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "format": "ip"
              },
              {
                "type": "string",
                "format": "ip"
              }
            ]
          },
          "maxItems": 3
        },
        "name": {
          "type": "string",
          "minLength": 2,
          "maxLength": 120
        },
        "destinations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "host": {
                "type": "string",
                "minLength": 1,
                "maxLength": 253,
                "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535
              }
            },
            "required": [
              "host",
              "port"
            ],
            "additionalProperties": false
          },
          "minItems": 1,
          "maxItems": 64
        },
        "mode": {
          "type": "string",
          "enum": [
            "openvpn"
          ]
        },
        "credential": {
          "type": "object",
          "properties": {
            "options": {
              "type": "object",
              "properties": {
                "cipher": {
                  "type": "string",
                  "enum": [
                    "AES-256-GCM",
                    "AES-128-GCM",
                    "CHACHA20-POLY1305"
                  ]
                },
                "auth": {
                  "type": "string",
                  "enum": [
                    "none",
                    "SHA1",
                    "SHA256",
                    "SHA512"
                  ]
                },
                "tun_mtu": {
                  "type": "integer",
                  "minimum": 576,
                  "maximum": 9000
                },
                "ping": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 3600
                },
                "ping_restart": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 86400
                },
                "connect_retry": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 300
                },
                "reneg_sec": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 604800
                },
                "persist_tun": {
                  "type": "boolean"
                },
                "persist_key": {
                  "type": "boolean"
                },
                "mute_replay_warnings": {
                  "type": "boolean"
                },
                "verb": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 4
                }
              },
              "additionalProperties": false
            },
            "remote_host": {
              "type": "string",
              "minLength": 1,
              "maxLength": 253,
              "pattern": "^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$"
            },
            "remote_port": {
              "type": "integer",
              "minimum": 1,
              "maximum": 65535
            },
            "protocol": {
              "type": "string",
              "enum": [
                "udp",
                "tcp"
              ]
            },
            "ca_certificate": {
              "type": "string",
              "minLength": 64,
              "maxLength": 16384
            },
            "client_certificate": {
              "type": "string",
              "minLength": 64,
              "maxLength": 16384
            },
            "client_key": {
              "type": "string",
              "minLength": 64,
              "maxLength": 16384
            },
            "tls_auth_key": {
              "type": "string",
              "minLength": 64,
              "maxLength": 16384
            },
            "tls_auth_direction": {
              "type": "string",
              "enum": [
                "0",
                "1"
              ]
            },
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256,
              "pattern": "^[^\\0\\r\\n]+$"
            },
            "password": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096,
              "pattern": "^[^\\0\\r\\n]+$"
            }
          },
          "required": [
            "remote_host",
            "remote_port",
            "protocol",
            "ca_certificate",
            "client_certificate",
            "client_key"
          ],
          "additionalProperties": false,
          "not": {
            "required": [
              "options",
              "tls_auth_key"
            ],
            "properties": {
              "options": {
                "required": [
                  "auth"
                ],
                "properties": {
                  "auth": {
                    "enum": [
                      "none"
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "required": [
        "name",
        "destinations",
        "mode",
        "credential"
      ],
      "additionalProperties": false
    }
  ],
  "description": "Typed private-network configuration; arbitrary OpenVPN/WireGuard files, scripts, plugins, and routes are not accepted"
}

DiscoverPostgresDatabasesResponse

Data
{
  "type": "object",
  "properties": {
    "databases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "access": {
            "type": "string",
            "enum": [
              "verified",
              "candidate",
              "denied"
            ]
          },
          "connect_privilege": {
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "access",
          "connect_privilege"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "incomplete": {
      "type": "boolean"
    },
    "seed_database": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "error_code": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "network_unavailable",
        "authentication_failed",
        "login_trigger_failed",
        "tls_failed",
        "tls_configuration_unsupported",
        "seed_database_unavailable",
        "catalog_denied",
        "discovery_unavailable",
        null
      ]
    }
  },
  "required": [
    "databases",
    "incomplete",
    "seed_database",
    "error_code"
  ],
  "additionalProperties": false
}

DataSourceConnection

Связанные схемы: DataSourceAttentionReason.

Data
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "kind": {
      "type": "string",
      "enum": [
        "postgres",
        "mysql",
        "sqlserver",
        "mongodb",
        "topic"
      ]
    },
    "endpoint": {
      "type": "object",
      "properties": {
        "hosts": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 253
          },
          "minItems": 1,
          "maxItems": 20
        },
        "port": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1,
          "maximum": 65535
        },
        "resource": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "authentication": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        "tls_mode": {
          "type": "string",
          "enum": [
            "require",
            "verify_ca",
            "verify_full",
            "mutual_tls"
          ]
        },
        "custom_ca": {
          "type": "boolean"
        },
        "mutual_tls": {
          "type": "boolean"
        }
      },
      "required": [
        "hosts",
        "port",
        "resource",
        "authentication",
        "tls_mode",
        "custom_ca",
        "mutual_tls"
      ],
      "additionalProperties": false
    },
    "credential_version": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "network_attachment_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "active",
        "degraded",
        "revoked",
        "failed"
      ]
    },
    "status_reason": {
      "$ref": "#/components/schemas/DataSourceAttentionReason"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "example": "2026-07-16T12:00:00.000Z"
    }
  },
  "required": [
    "id",
    "name",
    "kind",
    "endpoint",
    "credential_version",
    "network_attachment_id",
    "status",
    "status_reason",
    "created_at",
    "updated_at"
  ],
  "additionalProperties": false
}

DataSourceAttentionReason

Data
{
  "type": [
    "string",
    "null"
  ],
  "enum": [
    "authentication_failed",
    "login_trigger_failed",
    "catalog_denied",
    "tls_failed",
    null
  ],
  "description": "Source-side condition a person must fix; set only while the connection is degraded"
}

AddDatabaseFromConnectionRequest

Data
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120
    },
    "database": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "name",
    "database"
  ],
  "additionalProperties": false
}

DiscoverPostgresDatabasesRequest

Data
{
  "type": "object",
  "properties": {
    "network_attachment_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "example": "9b2f6f2e-4b0a-4bd2-8b7e-3f8a1c2d4e5f"
    },
    "source": {
      "type": "object",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "postgres",
            "sqlserver"
          ]
        },
        "host": {
          "type": "string",
          "minLength": 1,
          "maxLength": 253
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535
        },
        "seed_database": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "authentication": {
          "type": "string",
          "enum": [
            "username_password"
          ]
        },
        "credential": {
          "type": "object",
          "properties": {
            "username": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            },
            "password": {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            }
          },
          "required": [
            "username",
            "password"
          ],
          "additionalProperties": false
        },
        "tls": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "require"
                  ]
                }
              },
              "required": [
                "mode"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "verify_ca",
                    "verify_full"
                  ]
                },
                "ca_certificate": {
                  "type": "string",
                  "minLength": 64,
                  "maxLength": 32768
                }
              },
              "required": [
                "mode",
                "ca_certificate"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "mutual_tls"
                  ]
                },
                "ca_certificate": {
                  "type": "string",
                  "minLength": 64,
                  "maxLength": 32768
                },
                "client_certificate": {
                  "type": "string",
                  "minLength": 64,
                  "maxLength": 32768
                },
                "client_key": {
                  "type": "string",
                  "minLength": 64,
                  "maxLength": 32768
                }
              },
              "required": [
                "mode",
                "ca_certificate",
                "client_certificate",
                "client_key"
              ],
              "additionalProperties": false
            }
          ]
        }
      },
      "required": [
        "kind",
        "host",
        "port",
        "authentication",
        "credential",
        "tls"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "source"
  ],
  "additionalProperties": false
}

DataSourceConnectionList

Связанные схемы: DataSourceConnection.

Data
{
  "type": "object",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/DataSourceConnection"
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "maxLength": 400,
      "description": "Cursor for the next page; null when exhausted"
    }
  },
  "required": [
    "data",
    "next_cursor"
  ],
  "additionalProperties": false
}