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.

Example request:
curl --request GET \
    --get "https://hackgreenville.com/api/v0/events?start_date=2025-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": "2025-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': '2025-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": "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
    }
]
 

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: 2025-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.

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

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=2025-01-01&end_date=2100-12-31&tags[]=17&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": "2025-01-01",
    "end_date": "2100-12-31",
    "tags[0]": "17",
    "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': '2025-01-01',
  'end_date': '2100-12-31',
  'tags[0]': '17',
  '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": "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"
        }
    ]
}
 

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). 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

end_date   string  optional  

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

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.

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
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.

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&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",
    "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',
  '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": "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"
        }
    ]
}
 

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 2025.

established_to   integer  optional  

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

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