This document provides a comprehensive reference for the GraphQL API operations available in the IBCOL GraphQL Micro API.
The API is built around the following main types:
Application: Team applications with associated students, advisors, and projectsAccessToken: Authentication tokensAdminEmail: Administrative access control- Custom scalar types:
Date,JSON
Most operations require authentication using an access token. The token should be included in the request headers:
{
"email": "user@example.com",
"token": "your-access-token"
}
Retrieves applications associated with the authenticated user's email.
query GetApplications($accessToken: TokenInput!) {
getApplications(accessToken: $accessToken) {
id
ref
teamName
studentRecords {
firstName
lastName
email
}
projectRecords {
name
projectCategoryKey
}
meta {
createdAt
updatedAt
}
}
}Variables:
{
"accessToken": {
"email": "user@example.com",
"token": "your-access-token"
}
}Retrieves all applications (admin access required).
query GetApplicationsAsAdmin {
getApplicationsAsAdmin {
id
ref
teamName
studentRecords {
firstName
lastName
email
}
projectRecords {
name
projectCategoryKey
}
meta {
createdAt
updatedAt
approvedAt
rejectedAt
}
}
}Creates a new team application.
mutation AddApplication($application: ApplicationInput!) {
addApplication(application: $application) {
id
ref
teamName
}
}Variables:
{
"application": {
"teamName": "Blockchain Innovators",
"studentRecords": [
{
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"phoneNumber": "+1234567890",
"educationRecords": [
{
"institutionName": "University of Blockchain",
"state": "California",
"city": "San Francisco",
"countryCode": "US",
"degree": "Bachelor",
"programme": "Computer Science",
"yearOfGraduation": "2023"
}
]
}
],
"projectRecords": [
{
"name": "Decentralized Identity Solution",
"projectCategoryKey": "IDENTITY",
"description": "A blockchain-based identity verification system"
}
]
}
}Updates an existing application.
mutation UpdateApplication($accessToken: TokenInput!, $application: ApplicationUpdateInput!) {
updateApplication(accessToken: $accessToken, application: $application) {
id
ref
teamName
}
}Variables:
{
"accessToken": {
"email": "user@example.com",
"token": "your-access-token"
},
"application": {
"ref": "ABC-1234567890",
"teamName": "Updated Team Name",
"studentRecords": [...],
"projectRecords": [...]
}
}Deletes an application by ID (admin access required).
mutation DeleteApplication($id: ID!) {
deleteApplicationById(id: $id) {
id
ref
}
}Variables:
{
"id": "application-id"
}input TokenInput {
email: String!
token: String!
}input ApplicationInput {
teamName: String!
studentRecords: [StudentRecordInput!]!
advisorRecords: [AdvisorRecordInput]
projectRecords: [ProjectRecordInput!]!
}input ApplicationUpdateInput {
ref: String!
teamName: String!
studentRecords: [StudentRecordInput!]!
advisorRecords: [AdvisorRecordInput]
projectRecords: [ProjectRecordInput!]!
}input StudentRecordInput {
firstName: String!
lastName: String!
phoneNumber: String
email: String!
educationRecords: [EducationRecordInput!]!
}input EducationRecordInput {
institutionName: String!
state: String!
city: String!
countryCode: String!
degree: String!
programme: String!
yearOfGraduation: String!
studentNumber: String
studentCardFrontFileId: String
studentCardBackFileId: String
transcriptFileId: String
}input AdvisorRecordInput {
firstName: String!
lastName: String!
phoneNumber: String
email: String!
associationRecords: [AssociationRecordInput!]!
}input AssociationRecordInput {
organisationName: String!
title: String!
sectorCode: String!
state: String!
city: String!
countryCode: String!
yearCommencement: String!
yearCessation: String
}input ProjectRecordInput {
ref: String
name: String!
projectCategoryKey: String!
description: String!
whitepaperFileId: String
presentationFileId: String
}type Application {
id: ID!
ref: String!
teamName: String!
studentRecords: [StudentRecord!]!
advisorRecords: [AdvisorRecord]
projectRecords: [ProjectRecord!]!
verificationKeys: [VerificationKey]!
meta: ApplicationMeta
}type StudentRecord {
firstName: String!
lastName: String!
phoneNumber: String
email: String!
educationRecords: [EducationRecord!]!
emailVerified: Boolean
phoneNumberVerified: Boolean
}type EducationRecord {
institutionName: String!
state: String!
city: String!
countryCode: String!
degree: String!
programme: String!
yearOfGraduation: String!
studentNumber: String
studentCardFrontFileId: String
studentCardBackFileId: String
transcriptFileId: String
isVerified: Boolean
}type AdvisorRecord {
firstName: String!
lastName: String!
phoneNumber: String
email: String!
associationRecords: [AssociationRecord!]!
}type AssociationRecord {
organisationName: String!
title: String!
sectorCode: String!
state: String!
city: String!
countryCode: String!
yearCommencement: String!
yearCessation: String
}type ProjectRecord {
ref: String!
name: String!
projectCategoryKey: String!
description: String!
whitepaperFileIds: [DropFile]
presentationFileIds: [DropFile]
}type DropFile {
receivedAt: Date
fileId: String!
}type ApplicationMeta {
createdAt: Date
updatedAt: Date
approvedAt: Date
rejectedAt: Date
deletedAt: Date
}type VerificationKey {
publicKey: String!
password: String!
}