openapi: 3.0.3 info: title: 'HackGreenville API Documentation' description: 'Documentation for the HackGreenville API. This API provides access to data stored in the HackGreenville database, such as events, organizations and more.' version: 1.0.0 servers: - url: '{{ config("app.url") }}' tags: - name: Endpoints description: '' paths: /api/v0/events: get: summary: 'Events API v0' operationId: eventsAPIV0 description: "This API provides access to event data stored in the HackGreenville database.\n\nPlease see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for more information about the event API." parameters: - in: query name: start_date description: 'The start date for events filtering (inclusive). Must be a valid date in the format Y-m-d. Must be a date before or equal to end_date.' example: '2026-01-01' required: false schema: type: string description: 'The start date for events filtering (inclusive). Must be a valid date in the format Y-m-d. Must be a date before or equal to end_date.' example: '2026-01-01' nullable: true - in: query name: end_date description: 'The end date for events filtering (inclusive). Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.' example: '2100-12-31' required: false schema: type: string description: 'The end date for events filtering (inclusive). Must be a valid date. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.' example: '2100-12-31' nullable: true - in: query name: tags description: 'Filter events by organization tag ID.' example: null required: false schema: type: integer description: 'Filter events by organization tag ID.' example: null nullable: true responses: 200: description: '' content: application/json: schema: type: array items: type: object properties: event_name: type: string example: 'Eius et animi quos velit et.' group_name: type: string example: 'Mrs. Justina Gaylord tech group!!!' group_url: type: string example: quis url: type: string example: 'https://kunde.net/est-quaerat-enim-accusantium-alias-magnam.html' time: type: string example: '2025-01-01T17:00:00.000000Z' tags: type: string example: '' status: type: string example: past rsvp_count: type: integer example: 28 description: type: string example: 'Aut ex quo iure eos explicabo accusamus. Et qui ipsa itaque autem mollitia.' uuid: type: string example: 3f5d74c8-7495-3f45-bd67-0e0ddb6401b8 data_as_of: type: string example: '2026-01-01T12:00:00.000000Z' service_id: type: string example: '3' service: type: string example: eventbrite venue: type: object properties: name: type: string example: 'placeat rerum ad in quo' address: type: string example: "39134 Heidenreich Shoal Apt. 942\nReubenland, WY 88137-3873" city: type: string example: Ladariushaven state: type: string example: MT zip: type: string example: 30525-7075 country: type: string example: EH lat: type: string example: '24.605096' lon: type: string example: '153.784749' created_at: type: string example: '2025-01-01T17:00:00.000000Z' is_paid: type: string example: null nullable: true example: - event_name: 'Eius et animi quos velit et.' group_name: 'Mrs. Justina Gaylord tech group!!!' group_url: quis url: 'https://kunde.net/est-quaerat-enim-accusantium-alias-magnam.html' time: '2025-01-01T17:00:00.000000Z' tags: '' status: past rsvp_count: 28 description: 'Aut ex quo iure eos explicabo accusamus. Et qui ipsa itaque autem mollitia.' uuid: 3f5d74c8-7495-3f45-bd67-0e0ddb6401b8 data_as_of: '2026-01-01T12:00:00.000000Z' service_id: '3' service: eventbrite venue: name: 'placeat rerum ad in quo' address: "39134 Heidenreich Shoal Apt. 942\nReubenland, WY 88137-3873" city: Ladariushaven state: MT zip: 30525-7075 country: EH lat: '24.605096' lon: '153.784749' created_at: '2025-01-01T17:00:00.000000Z' is_paid: null tags: - Endpoints security: [] /api/v0/orgs: get: summary: 'Organizations API v0' operationId: organizationsAPIV0 description: "This API provides access to organization data stored in the HackGreenville database.\n\nPlease see the [Organization API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/ORGS_API.md) for more information about the organization API." parameters: - in: query name: tags description: 'Filter organizations by organization tag ID.' example: null required: false schema: type: integer description: 'Filter organizations by organization tag ID.' example: null nullable: true responses: 200: description: '' content: application/json: schema: type: array items: type: object properties: title: type: string example: sunt path: type: string example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html' changed: type: string example: '2025-01-01T17:00:00.000000Z' field_city: type: string example: Lyricberg field_event_service: type: string example: null nullable: true field_events_api_key: type: string example: null nullable: true field_focus_area: type: string example: adipisci field_homepage: type: string example: fugiat field_event_calendar_homepage: type: string example: 'http://hauck.com/' field_primary_contact_person: type: string example: quidem field_org_status: type: string example: active field_organization_type: type: string example: nostrum field_year_established: type: integer example: 2025 field_org_tags: type: string example: '' uuid: type: integer example: 123 example: - title: sunt path: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html' changed: '2025-01-01T17:00:00.000000Z' field_city: Lyricberg field_event_service: null field_events_api_key: null field_focus_area: adipisci field_homepage: fugiat field_event_calendar_homepage: 'http://hauck.com/' field_primary_contact_person: quidem field_org_status: active field_organization_type: nostrum field_year_established: 2025 field_org_tags: '' uuid: 123 tags: - Endpoints security: [] /api/v1/events: get: summary: 'Events API v1' operationId: eventsAPIV1 description: "This API provides access to event data stored in the HackGreenville database.\n\n* Please see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for more information about the event API." parameters: - in: query name: per_page description: 'The number of items to show per page. Must be at least 1. Must not be greater than 100.' example: 50 required: false schema: type: integer description: 'The number of items to show per page. Must be at least 1. Must not be greater than 100.' example: 50 nullable: true - in: query name: page description: 'The current page of items to display. Must be at least 1.' example: 1 required: false schema: type: integer description: 'The current page of items to display. Must be at least 1.' example: 1 nullable: true - in: query name: start_date description: 'The start date for events filtering (inclusive). Future event data may be limited. Please see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for information about event data limitations. Must be a valid date in the format Y-m-d. Must be a date before or equal to end_date.' example: '2026-01-01' required: false schema: type: string description: 'The start date for events filtering (inclusive). Future event data may be limited. Please see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for information about event data limitations. Must be a valid date in the format Y-m-d. Must be a date before or equal to end_date.' example: '2026-01-01' nullable: true - in: query name: end_date description: 'The end date for events filtering (inclusive). Future event data may be limited. Please see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for information about event data limitations. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.' example: '2100-12-31' required: false schema: type: string description: 'The end date for events filtering (inclusive). Future event data may be limited. Please see the [Event API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/EVENTS_API.md) for information about event data limitations. Must be a valid date in the format Y-m-d. Must be a date after or equal to start_date.' example: '2100-12-31' nullable: true - in: query name: tags description: 'The id of an existing record in the tags table.' example: - 16 required: false schema: type: array description: 'The id of an existing record in the tags table.' example: - 16 items: type: integer - in: query name: name description: 'Filter events by event name (the "event_name" property). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'Filter events by event name (the "event_name" property). Must not be greater than 255 characters.' example: null nullable: true - in: query name: org_name description: 'The name of the organization associated with the event (the "group_name" property). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'The name of the organization associated with the event (the "group_name" property). Must not be greater than 255 characters.' example: null nullable: true - in: query name: service description: 'The service that imported the event (meetup_graphql, eventbrite, etc.). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'The service that imported the event (meetup_graphql, eventbrite, etc.). Must not be greater than 255 characters.' example: null nullable: true - in: query name: min_rsvp description: 'Must be at least 0.' example: null required: false schema: type: integer description: 'Must be at least 0.' example: null nullable: true - in: query name: max_rsvp description: 'Must be at least 0.' example: null required: false schema: type: integer description: 'Must be at least 0.' example: null nullable: true - in: query name: venue_city description: 'Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'Must not be greater than 255 characters.' example: null nullable: true - in: query name: venue_state description: 'Must be 2 characters.' example: null required: false schema: type: string description: 'Must be 2 characters.' example: null nullable: true - in: query name: is_paid description: 'Filter events that require payment (null means we currently cannot determine if event is paid).' example: null required: false schema: type: string description: 'Filter events that require payment (null means we currently cannot determine if event is paid).' example: null enum: - 'null' - 'true' - 'false' nullable: true - in: query name: sort_by description: '' example: event_name required: false schema: type: string description: '' example: event_name enum: - active_at - event_name - group_name - rsvp_count - created_at nullable: true - in: query name: sort_direction description: '' example: asc required: false schema: type: string description: '' example: asc enum: - asc - desc nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 3f5d74c8-7495-3f45-bd67-0e0ddb6401b8 name: 'Eius et animi quos velit et.' description: 'Aut ex quo iure eos explicabo accusamus. Et qui ipsa itaque autem mollitia.' url: 'https://kunde.net/est-quaerat-enim-accusantium-alias-magnam.html' starts_at: '2025-01-01T17:00:00.000000Z' ends_at: '2025-01-01T19:00:00.000000Z' rsvp_count: 28 status: past is_paid: null organization: id: 123 name: 'Mrs. Justina Gaylord tech group!!!' url: quis tags: [] venue: name: 'placeat rerum ad in quo' address: "39134 Heidenreich Shoal Apt. 942\nReubenland, WY 88137-3873" city: Ladariushaven state: code: MT name: MT zipcode: 30525-7075 country: EH location: latitude: '24.605096' longitude: '153.784749' service: name: eventbrite id: '3' created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' properties: data: type: array example: - id: 3f5d74c8-7495-3f45-bd67-0e0ddb6401b8 name: 'Eius et animi quos velit et.' description: 'Aut ex quo iure eos explicabo accusamus. Et qui ipsa itaque autem mollitia.' url: 'https://kunde.net/est-quaerat-enim-accusantium-alias-magnam.html' starts_at: '2025-01-01T17:00:00.000000Z' ends_at: '2025-01-01T19:00:00.000000Z' rsvp_count: 28 status: past is_paid: null organization: id: 123 name: 'Mrs. Justina Gaylord tech group!!!' url: quis tags: [] venue: name: 'placeat rerum ad in quo' address: "39134 Heidenreich Shoal Apt. 942\nReubenland, WY 88137-3873" city: Ladariushaven state: code: MT name: MT zipcode: 30525-7075 country: EH location: latitude: '24.605096' longitude: '153.784749' service: name: eventbrite id: '3' created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' items: type: object properties: id: type: string example: 3f5d74c8-7495-3f45-bd67-0e0ddb6401b8 name: type: string example: 'Eius et animi quos velit et.' description: type: string example: 'Aut ex quo iure eos explicabo accusamus. Et qui ipsa itaque autem mollitia.' url: type: string example: 'https://kunde.net/est-quaerat-enim-accusantium-alias-magnam.html' starts_at: type: string example: '2025-01-01T17:00:00.000000Z' ends_at: type: string example: '2025-01-01T19:00:00.000000Z' rsvp_count: type: integer example: 28 status: type: string example: past is_paid: type: string example: null nullable: true organization: type: object properties: id: type: integer example: 123 name: type: string example: 'Mrs. Justina Gaylord tech group!!!' url: type: string example: quis tags: type: array example: [] venue: type: object properties: name: type: string example: 'placeat rerum ad in quo' address: type: string example: "39134 Heidenreich Shoal Apt. 942\nReubenland, WY 88137-3873" city: type: string example: Ladariushaven state: type: object properties: code: type: string example: MT name: type: string example: MT zipcode: type: string example: 30525-7075 country: type: string example: EH location: type: object properties: latitude: type: string example: '24.605096' longitude: type: string example: '153.784749' service: type: object properties: name: type: string example: eventbrite id: type: string example: '3' created_at: type: string example: '2025-01-01T17:00:00.000000Z' updated_at: type: string example: '2025-01-01T17:00:00.000000Z' tags: - Endpoints security: [] /api/v1/organizations: get: summary: 'Organizations API v1' operationId: organizationsAPIV1 description: "This API provides access to organization data stored in the HackGreenville database.\n\n* Please see the [Organization API docs](https://github.com/hackgvl/hackgreenville-com/blob/develop/ORGS_API.md) for more information about the organization API." parameters: - in: query name: per_page description: 'The number of items to show per page. Must be at least 1. Must not be greater than 100.' example: 50 required: false schema: type: integer description: 'The number of items to show per page. Must be at least 1. Must not be greater than 100.' example: 50 nullable: true - in: query name: page description: 'The current page of items to display. Must be at least 1.' example: 1 required: false schema: type: integer description: 'The current page of items to display. Must be at least 1.' example: 1 nullable: true - in: query name: tags description: 'Filter organizations by tag ID. The id of an existing record in the tags table.' example: null required: false schema: type: array description: 'Filter organizations by tag ID. The id of an existing record in the tags table.' example: null items: type: integer - in: query name: title description: 'Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'Must not be greater than 255 characters.' example: null nullable: true - in: query name: city description: 'Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'Must not be greater than 255 characters.' example: null nullable: true - in: query name: focus_area description: 'The organization category (Entrpreneurship, Security, etc.). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'The organization category (Entrpreneurship, Security, etc.). Must not be greater than 255 characters.' example: null nullable: true - in: query name: organization_type description: 'The organization type (Meetup Groups, Code Schools, etc.). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'The organization type (Meetup Groups, Code Schools, etc.). Must not be greater than 255 characters.' example: null nullable: true - in: query name: status description: 'The organization status (active, inactive, etc.). Must not be greater than 255 characters.' example: null required: false schema: type: string description: 'The organization status (active, inactive, etc.). Must not be greater than 255 characters.' example: null nullable: true - in: query name: established_from description: 'The year the organization was established. Must be at least 1900. Must not be greater than current year.' example: null required: false schema: type: integer description: 'The year the organization was established. Must be at least 1900. Must not be greater than current year.' example: null nullable: true - in: query name: established_to description: 'The year the organization was dissolved. Must be at least 1900. Must not be greater than current year.' example: null required: false schema: type: integer description: 'The year the organization was dissolved. Must be at least 1900. Must not be greater than current year.' example: null nullable: true - in: query name: sort_by description: '' example: title required: false schema: type: string description: '' example: title enum: - title - city - established_at - updated_at - created_at nullable: true - in: query name: sort_direction description: '' example: asc required: false schema: type: string description: '' example: asc enum: - asc - desc nullable: true responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 123 title: sunt path: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html' city: Lyricberg service: null service_api_key: null focus_area: adipisci website_url: fugiat event_calendar_url: 'http://hauck.com/' primary_contact: quidem status: active organization_type: nostrum established_year: 2025 tags: [] created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' properties: data: type: array example: - id: 123 title: sunt path: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html' city: Lyricberg service: null service_api_key: null focus_area: adipisci website_url: fugiat event_calendar_url: 'http://hauck.com/' primary_contact: quidem status: active organization_type: nostrum established_year: 2025 tags: [] created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' items: type: object properties: id: type: integer example: 123 title: type: string example: sunt path: type: string example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html' city: type: string example: Lyricberg service: type: string example: null nullable: true service_api_key: type: string example: null nullable: true focus_area: type: string example: adipisci website_url: type: string example: fugiat event_calendar_url: type: string example: 'http://hauck.com/' primary_contact: type: string example: quidem status: type: string example: active organization_type: type: string example: nostrum established_year: type: integer example: 2025 tags: type: array example: [] created_at: type: string example: '2025-01-01T17:00:00.000000Z' updated_at: type: string example: '2025-01-01T17:00:00.000000Z' tags: - Endpoints security: []