MENU navbar-image

Introduction

Documentation for the HackGreenville API. This API provides access to data stored in the HackGreenville database, such as events, organizations and more.

This documentation aims to provide all the information you need to work with our API.

Authenticating requests

This API is not authenticated.

Endpoints

Events API v0

This API provides access to event data stored in the HackGreenville database.

Please see the Event API docs for more information about the event API.

Example request:
curl --request GET \
    --get "https://hackgreenville.com/api/v0/events?start_date=2026-01-01&end_date=2100-12-31" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://hackgreenville.com/api/v0/events"
);

const params = {
    "start_date": "2026-01-01",
    "end_date": "2100-12-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://hackgreenville.com/api/v0/events'
params = {
  'start_date': '2026-01-01',
  'end_date': '2100-12-31',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


[
    {
        "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
    }
]
 

Request      

GET api/v0/events

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

start_date   string  optional    

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

end_date   string  optional    

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

tags   integer  optional    

Filter events by organization tag ID.

Organizations API v0

This API provides access to organization data stored in the HackGreenville database.

Please see the Organization API docs for more information about the organization API.

Example request:
curl --request GET \
    --get "https://hackgreenville.com/api/v0/orgs" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://hackgreenville.com/api/v0/orgs"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://hackgreenville.com/api/v0/orgs'
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers)
response.json()

Example response (200):


[
    {
        "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
    }
]
 

Request      

GET api/v0/orgs

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

tags   integer  optional    

Filter organizations by organization tag ID.

Events API v1

This API provides access to event data stored in the HackGreenville database.

Example request:
curl --request GET \
    --get "https://hackgreenville.com/api/v1/events?per_page=50&page=1&start_date=2026-01-01&end_date=2100-12-31&tags[]=16&sort_by=event_name&sort_direction=asc" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://hackgreenville.com/api/v1/events"
);

const params = {
    "per_page": "50",
    "page": "1",
    "start_date": "2026-01-01",
    "end_date": "2100-12-31",
    "tags[0]": "16",
    "sort_by": "event_name",
    "sort_direction": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://hackgreenville.com/api/v1/events'
params = {
  'per_page': '50',
  'page': '1',
  'start_date': '2026-01-01',
  'end_date': '2100-12-31',
  'tags[0]': '16',
  'sort_by': 'event_name',
  'sort_direction': 'asc',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "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"
        }
    ]
}
 

Request      

GET api/v1/events

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of items to show per page. Must be at least 1. Must not be greater than 100. Example: 50

page   integer  optional    

The current page of items to display. Must be at least 1. Example: 1

start_date   string  optional    

The start date for events filtering (inclusive). Future event data may be limited. Please see the Event API docs 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

end_date   string  optional    

The end date for events filtering (inclusive). Future event data may be limited. Please see the Event API docs 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

tags   integer[]  optional    

The id of an existing record in the tags table.

name   string  optional    

Filter events by event name (the "event_name" property). Must not be greater than 255 characters.

org_name   string  optional    

The name of the organization associated with the event (the "group_name" property). Must not be greater than 255 characters.

service   string  optional    

The service that imported the event (meetup_graphql, eventbrite, etc.). Must not be greater than 255 characters.

min_rsvp   integer  optional    

Must be at least 0.

max_rsvp   integer  optional    

Must be at least 0.

venue_city   string  optional    

Must not be greater than 255 characters.

venue_state   string  optional    

Must be 2 characters.

is_paid   string  optional    

Filter events that require payment (null means we currently cannot determine if event is paid).

Must be one of:
  • null
  • true
  • false
sort_by   string  optional    

Example: event_name

Must be one of:
  • active_at
  • event_name
  • group_name
  • rsvp_count
  • created_at
sort_direction   string  optional    

Example: asc

Must be one of:
  • asc
  • desc

Organizations API v1

This API provides access to organization data stored in the HackGreenville database.

Example request:
curl --request GET \
    --get "https://hackgreenville.com/api/v1/organizations?per_page=50&page=1&established_from=&established_to=&sort_by=title&sort_direction=asc" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://hackgreenville.com/api/v1/organizations"
);

const params = {
    "per_page": "50",
    "page": "1",
    "established_from": "",
    "established_to": "",
    "sort_by": "title",
    "sort_direction": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
import requests
import json

url = 'https://hackgreenville.com/api/v1/organizations'
params = {
  'per_page': '50',
  'page': '1',
  'established_from': '',
  'established_to': '',
  'sort_by': 'title',
  'sort_direction': 'asc',
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()

Example response (200):


{
    "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"
        }
    ]
}
 

Request      

GET api/v1/organizations

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of items to show per page. Must be at least 1. Must not be greater than 100. Example: 50

page   integer  optional    

The current page of items to display. Must be at least 1. Example: 1

tags   integer[]  optional    

Filter organizations by tag ID. The id of an existing record in the tags table.

title   string  optional    

Must not be greater than 255 characters.

city   string  optional    

Must not be greater than 255 characters.

focus_area   string  optional    

The organization category (Entrpreneurship, Security, etc.). Must not be greater than 255 characters.

organization_type   string  optional    

The organization type (Meetup Groups, Code Schools, etc.). Must not be greater than 255 characters.

status   string  optional    

The organization status (active, inactive, etc.). Must not be greater than 255 characters.

established_from   integer  optional    

The year the organization was established. Must be at least 1900. Must not be greater than current year.

established_to   integer  optional    

The year the organization was dissolved. Must be at least 1900. Must not be greater than current year.

sort_by   string  optional    

Example: title

Must be one of:
  • title
  • city
  • established_at
  • updated_at
  • created_at
sort_direction   string  optional    

Example: asc

Must be one of:
  • asc
  • desc