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.' 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: '2025-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: '2025-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 example: - event_name: 'Dolores dolorum amet iste laborum eius est dolor.' group_name: 'Nash Corwin tech group!!!' group_url: quasi url: 'http://www.huels.org/dignissimos-error-sit-labore-quos.html' time: '2025-01-01T17:00:00.000000Z' tags: '' status: past rsvp_count: 97 description: 'Consequatur debitis et id. Qui id totam temporibus quia ipsam.' uuid: 71edad68-e2ce-3042-9ff4-fd7f82df6cd1 data_as_of: '2025-01-01T12:00:00.000000Z' service_id: '9' service: eventbrite venue: name: 'est nostrum et voluptas consequatur' address: "5090 Agustin Plaza\nThielfort, VA 23923" city: Estellehaven state: VA zip: '37540' country: KP lat: '42.934149' lon: '61.623526' 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.' 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 example: - title: minus path: 'http://reichel.info/' changed: '2025-01-01T17:00:00.000000Z' field_city: 'Lake Robynland' field_event_service: null field_events_api_key: null field_focus_area: fugit field_homepage: dolores field_event_calendar_homepage: 'https://www.lakin.com/veniam-sed-fuga-aspernatur-natus-earum' field_primary_contact_person: facilis field_org_status: active field_organization_type: perferendis 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.' 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). Must be a valid date in the format Y-m-d. Must be a date before or equal to end_date.' example: '2025-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: '2025-01-01' nullable: true - in: query name: end_date description: 'The end date for events filtering (inclusive). 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 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: - 17 required: false schema: type: array description: 'The id of an existing record in the tags table.' example: - 17 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: 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 nullable: true enum: - 'null' - 'true' - 'false' - 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: sort_by description: '' example: event_name required: false schema: type: string description: '' example: event_name nullable: true enum: - active_at - event_name - group_name - rsvp_count - created_at - in: query name: sort_direction description: '' example: asc required: false schema: type: string description: '' example: asc nullable: true enum: - asc - desc responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 71edad68-e2ce-3042-9ff4-fd7f82df6cd1 name: 'Dolores dolorum amet iste laborum eius est dolor.' description: 'Consequatur debitis et id. Qui id totam temporibus quia ipsam.' url: 'http://www.huels.org/dignissimos-error-sit-labore-quos.html' starts_at: '2025-01-01T17:00:00.000000Z' ends_at: '2025-01-01T19:00:00.000000Z' rsvp_count: 97 status: past is_paid: null organization: id: 123 name: 'Nash Corwin tech group!!!' url: quasi tags: [] venue: name: 'est nostrum et voluptas consequatur' address: "5090 Agustin Plaza\nThielfort, VA 23923" city: Estellehaven state: code: VA name: VA zipcode: '37540' country: KP location: latitude: '42.934149' longitude: '61.623526' service: name: eventbrite id: '9' created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' properties: data: type: array example: - id: 71edad68-e2ce-3042-9ff4-fd7f82df6cd1 name: 'Dolores dolorum amet iste laborum eius est dolor.' description: 'Consequatur debitis et id. Qui id totam temporibus quia ipsam.' url: 'http://www.huels.org/dignissimos-error-sit-labore-quos.html' starts_at: '2025-01-01T17:00:00.000000Z' ends_at: '2025-01-01T19:00:00.000000Z' rsvp_count: 97 status: past is_paid: null organization: id: 123 name: 'Nash Corwin tech group!!!' url: quasi tags: [] venue: name: 'est nostrum et voluptas consequatur' address: "5090 Agustin Plaza\nThielfort, VA 23923" city: Estellehaven state: code: VA name: VA zipcode: '37540' country: KP location: latitude: '42.934149' longitude: '61.623526' service: name: eventbrite id: '9' created_at: '2025-01-01T17:00:00.000000Z' updated_at: '2025-01-01T17:00:00.000000Z' items: type: object properties: id: type: string example: 71edad68-e2ce-3042-9ff4-fd7f82df6cd1 name: type: string example: 'Dolores dolorum amet iste laborum eius est dolor.' description: type: string example: 'Consequatur debitis et id. Qui id totam temporibus quia ipsam.' url: type: string example: 'http://www.huels.org/dignissimos-error-sit-labore-quos.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: 97 status: type: string example: past is_paid: type: string example: null organization: type: object properties: id: type: integer example: 123 name: type: string example: 'Nash Corwin tech group!!!' url: type: string example: quasi tags: type: array example: [] venue: type: object properties: name: type: string example: 'est nostrum et voluptas consequatur' address: type: string example: "5090 Agustin Plaza\nThielfort, VA 23923" city: type: string example: Estellehaven state: type: object properties: code: type: string example: VA name: type: string example: VA zipcode: type: string example: '37540' country: type: string example: KP location: type: object properties: latitude: type: string example: '42.934149' longitude: type: string example: '61.623526' service: type: object properties: name: type: string example: eventbrite id: type: string example: '9' 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.' 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 2025.' example: null required: false schema: type: integer description: 'The year the organization was established. Must be at least 1900. Must not be greater than 2025.' 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 2025.' example: null required: false schema: type: integer description: 'The year the organization was dissolved. Must be at least 1900. Must not be greater than 2025.' example: null nullable: true - in: query name: sort_by description: '' example: title required: false schema: type: string description: '' example: title nullable: true enum: - title - city - established_at - updated_at - created_at - in: query name: sort_direction description: '' example: asc required: false schema: type: string description: '' example: asc nullable: true enum: - asc - desc responses: 200: description: '' content: application/json: schema: type: object example: data: - id: 123 title: minus path: 'http://reichel.info/' city: 'Lake Robynland' service: null service_api_key: null focus_area: fugit website_url: dolores event_calendar_url: 'https://www.lakin.com/veniam-sed-fuga-aspernatur-natus-earum' primary_contact: facilis status: active organization_type: perferendis 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: minus path: 'http://reichel.info/' city: 'Lake Robynland' service: null service_api_key: null focus_area: fugit website_url: dolores event_calendar_url: 'https://www.lakin.com/veniam-sed-fuga-aspernatur-natus-earum' primary_contact: facilis status: active organization_type: perferendis 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: minus path: type: string example: 'http://reichel.info/' city: type: string example: 'Lake Robynland' service: type: string example: null service_api_key: type: string example: null focus_area: type: string example: fugit website_url: type: string example: dolores event_calendar_url: type: string example: 'https://www.lakin.com/veniam-sed-fuga-aspernatur-natus-earum' primary_contact: type: string example: facilis status: type: string example: active organization_type: type: string example: perferendis 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: []