{
  "openapi": "3.1.1",
  "info": {
    "title": "EventStage Entegrasyon API'si",
    "description": "Bir organizasyonun kendi web sitesinin EventStage'deki verilerini okuması için. Her istek, portaldaki API erişimi sayfasından üretilen bir anahtar taşır: `Authorization: Bearer esk_…` ya da `X-Api-Key: esk_…`. Yalnızca okuma yapılır; yayınlanmış etkinlikler, program, onaylı konuşmacılar, sponsorlar ve görünür ekip döner.",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://event.solstage.com/"
    }
  ],
  "paths": {
    "/api/integration/v1/events": {
      "get": {
        "tags": [
          "IntegrationEvents"
        ],
        "summary": "The organization's visible events, one page at a time.",
        "parameters": [
          {
            "name": "timing",
            "in": "query",
            "description": "`upcoming` (the default: not yet started), `ongoing` (running right now),\n`past` (ended, newest first) or `all`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "1-based page number.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "Rows per page, at most 100.",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PagedResponseOfIntegrationEventSummaryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/events/{idOrSlug}": {
      "get": {
        "tags": [
          "IntegrationEvents"
        ],
        "summary": "One event in full: its details, its programme with speakers, every speaker on it and every sponsor of it.",
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "description": "The event's id, or its slug inside this organization.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationEventDetailResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/events/{idOrSlug}/sessions": {
      "get": {
        "tags": [
          "IntegrationEvents"
        ],
        "summary": "The event's programme: scheduled sessions in order, each with its speakers.",
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationSessionResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/events/{idOrSlug}/speakers": {
      "get": {
        "tags": [
          "IntegrationEvents"
        ],
        "summary": "Everyone speaking at the event, once each, in programme order.",
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationSpeakerResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/events/{idOrSlug}/sponsors": {
      "get": {
        "tags": [
          "IntegrationEvents"
        ],
        "summary": "The event's sponsors with their tiers, in the order the organizer arranged them.",
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationSponsorResponse"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/organization": {
      "get": {
        "tags": [
          "IntegrationOrganization"
        ],
        "summary": "The organization's public profile: name, description, logo, contact details and address.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationOrganizationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/team": {
      "get": {
        "tags": [
          "IntegrationOrganization"
        ],
        "summary": "The team as the organization chose to show it, in display order. Hidden members are left out.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationTeamMemberResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/speakers": {
      "get": {
        "tags": [
          "IntegrationOrganization"
        ],
        "summary": "Every speaker who has confirmed at least one session with the organization, by name. People\nwho were only invited are not announced (AD-19).",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationSpeakerResponse"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/integration/v1/sponsors": {
      "get": {
        "tags": [
          "IntegrationOrganization"
        ],
        "summary": "Every sponsor the organization keeps, by name. Tiers belong to events and are null here.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IntegrationSponsorResponse"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "IntegrationEventDetailResponse": {
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "cover",
          "logo",
          "timing",
          "start",
          "end",
          "venueName",
          "address",
          "city",
          "country",
          "latitude",
          "longitude",
          "isRegistrationOpen",
          "registrationStart",
          "registrationEnd",
          "capacity",
          "publicUrl",
          "sessions",
          "speakers",
          "sponsors"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "cover": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "logo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "timing": {
            "type": "string"
          },
          "start": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "end": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "venueName": {
            "type": [
              "null",
              "string"
            ]
          },
          "address": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "country": {
            "type": [
              "null",
              "string"
            ]
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "isRegistrationOpen": {
            "type": "boolean"
          },
          "registrationStart": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationInstant"
              }
            ]
          },
          "registrationEnd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationInstant"
              }
            ]
          },
          "capacity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "publicUrl": {
            "type": "string"
          },
          "sessions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationSessionResponse"
            }
          },
          "speakers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationSpeakerResponse"
            },
            "description": "The distinct speakers across the event's scheduled sessions. A speaker announced before the\nprogramme exists is not here yet, because speakers attach to sessions (§7)."
          },
          "sponsors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationSponsorResponse"
            }
          }
        },
        "description": "An event in full: the programme, everyone speaking at it and everyone sponsoring it, in one\ncall, because that is what an event page on a website needs."
      },
      "IntegrationEventSummaryResponse": {
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "cover",
          "logo",
          "timing",
          "start",
          "end",
          "venueName",
          "city",
          "country",
          "latitude",
          "longitude",
          "isRegistrationOpen",
          "sessionCount",
          "publicUrl"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "cover": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "logo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "timing": {
            "type": "string",
            "description": "`upcoming`, `ongoing` or `past`, decided by the clock at the time of the call.\n        Never stored (§8), so it is always current."
          },
          "start": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "end": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "venueName": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "country": {
            "type": [
              "null",
              "string"
            ]
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "isRegistrationOpen": {
            "type": "boolean"
          },
          "sessionCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "publicUrl": {
            "type": "string",
            "description": "The event's page on EventStage, where a visitor registers. Registration itself happens in the\nmobile app and is not something the integration API does."
          }
        },
        "description": "An event as a list on the organization's website shows it."
      },
      "IntegrationImage": {
        "required": [
          "fileId",
          "url"
        ],
        "type": "object",
        "properties": {
          "fileId": {
            "type": "string",
            "format": "uuid"
          },
          "url": {
            "type": "string",
            "description": "Absolute, on this host, and stable for as long as the image is: replacing an image produces a\nnew id and a new URL, so a page may cache it indefinitely (§25)."
          }
        },
        "description": "An image an external site can embed directly."
      },
      "IntegrationInstant": {
        "required": [
          "utc",
          "local",
          "timeZoneId"
        ],
        "type": "object",
        "properties": {
          "utc": {
            "type": "string",
            "description": "The instant, for anything that computes.",
            "format": "date-time"
          },
          "local": {
            "type": "string",
            "description": "The same instant on the venue's wall clock, with its offset, for anything that prints. A site\ncan render it with no time zone library at all.",
            "format": "date-time"
          },
          "timeZoneId": {
            "type": "string",
            "description": "The IANA zone Local was computed in."
          }
        },
        "description": "One moment as an organization's own website wants to print it (AD-18)."
      },
      "IntegrationOrganizationResponse": {
        "required": [
          "id",
          "name",
          "slug",
          "description",
          "logo",
          "cover",
          "website",
          "email",
          "phone",
          "address",
          "city",
          "country",
          "latitude",
          "longitude",
          "publicUrl"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "logo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "cover": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "website": {
            "type": [
              "null",
              "string"
            ]
          },
          "email": {
            "type": [
              "null",
              "string"
            ]
          },
          "phone": {
            "type": [
              "null",
              "string"
            ]
          },
          "address": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "country": {
            "type": [
              "null",
              "string"
            ]
          },
          "latitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "longitude": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "publicUrl": {
            "type": "string",
            "description": "The organization's page on EventStage, for a \"see all events\" link."
          }
        },
        "description": "The organization the API key belongs to, as its public profile."
      },
      "IntegrationSessionResponse": {
        "required": [
          "id",
          "name",
          "description",
          "room",
          "start",
          "end",
          "capacity",
          "speakers",
          "speakerNames"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "room": {
            "type": [
              "null",
              "string"
            ]
          },
          "start": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "end": {
            "$ref": "#/components/schemas/IntegrationInstant"
          },
          "capacity": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "speakers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationSpeakerResponse"
            },
            "description": "The confirmed speakers on this session, in billing order (AD-19)."
          },
          "speakerNames": {
            "type": [
              "null",
              "string"
            ],
            "description": "The same speakers as one comma-separated line, for a list that has no room for photos. Null\nwhen nobody is confirmed yet."
          }
        },
        "description": "One session of an event's programme."
      },
      "IntegrationSpeakerResponse": {
        "required": [
          "id",
          "name",
          "jobTitle",
          "company",
          "bio",
          "photo",
          "linkedInUrl",
          "gitHubUrl",
          "websiteUrl"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "jobTitle": {
            "type": [
              "null",
              "string"
            ]
          },
          "company": {
            "type": [
              "null",
              "string"
            ]
          },
          "bio": {
            "type": [
              "null",
              "string"
            ]
          },
          "photo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "linkedInUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "gitHubUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "websiteUrl": {
            "type": [
              "null",
              "string"
            ]
          }
        },
        "description": "A speaker profile, as the organization's programme and website show it."
      },
      "IntegrationSponsorResponse": {
        "required": [
          "id",
          "name",
          "description",
          "logo",
          "websiteUrl",
          "tier",
          "sortOrder",
          "isOrganizationSponsor"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "null",
              "string"
            ]
          },
          "logo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "websiteUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "tier": {
            "type": [
              "null",
              "string"
            ],
            "description": "The package on the event this list belongs to — \"Altın\", \"Gümüş\" — exactly as the organizer\ntyped it. Null in the organization-wide list, where there is no event to have a tier on."
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "description": "Position on the event; zero in the organization-wide list.",
            "format": "int32"
          },
          "isOrganizationSponsor": {
            "type": "boolean",
            "description": "Whether the company backs the organization as a whole, not only particular events — the\nsponsors a community lists on its home page (AD-19)."
          }
        },
        "description": "A sponsor, either from the organization's pool or on one event."
      },
      "IntegrationTeamMemberResponse": {
        "required": [
          "id",
          "fullName",
          "title",
          "bio",
          "photo",
          "linkedInUrl",
          "websiteUrl",
          "sortOrder"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "fullName": {
            "type": "string"
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "bio": {
            "type": [
              "null",
              "string"
            ]
          },
          "photo": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IntegrationImage"
              }
            ]
          },
          "linkedInUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "websiteUrl": {
            "type": [
              "null",
              "string"
            ]
          },
          "sortOrder": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        },
        "description": "A person on the organization's public team page (AD-18). Never a login."
      },
      "PagedResponseOfIntegrationEventSummaryResponse": {
        "required": [
          "items",
          "page",
          "pageSize",
          "totalCount"
        ],
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IntegrationEventSummaryResponse"
            }
          },
          "page": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "pageSize": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "totalCount": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean",
            "description": "Whether asking for the next page could return anything."
          }
        },
        "description": "One page of a list endpoint (§12)."
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "type": [
              "null",
              "string"
            ]
          },
          "title": {
            "type": [
              "null",
              "string"
            ]
          },
          "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "detail": {
            "type": [
              "null",
              "string"
            ]
          },
          "instance": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "http",
        "description": "Organizasyonun API anahtarı. X-Api-Key başlığıyla da gönderilebilir.",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "ApiKey": [ ]
    }
  ],
  "tags": [
    {
      "name": "IntegrationEvents"
    },
    {
      "name": "IntegrationOrganization"
    }
  ]
}