API Access
Authorization: Bearer <api_key>
https://app.eduflow.com/api/graphql
General requests to the API endpoint will return JSON.
The response will be wrapped in "data"
and match the shape of the original query.
curl(1) example:
EDUFLOW_API_KEY=<api_key> \
curl \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer ${EDUFLOW_API_KEY}" \
-X POST \
-d '{"query": "{institution {name}}"}' \
https://app.eduflow.com/api/graphql
wget(1) example:
EDUFLOW_API_KEY=<api_key> \
wget -qO- \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer ${EDUFLOW_API_KEY}" \
-X POST \
--post-data '{"query": "{institution {name}}"}' \
https://app.eduflow.com/api/graphql
#!/bin/env node
if (!process.env.EDUFLOW_API_KEY) {
console.error(`Enter your EDUFLOW_API_KEY:
env EDUFLOW_API_KEY=<api_key> node index.js`);
return;
}
const http =
process.env.EDUFLOW_API_PROTOCOL === "http"
? require("http")
: require("https");
const query = JSON.stringify({
query: `{
institution {
name
}
}`,
});
const options = {
hostname: process.env.EDUFLOW_API_HOSTNAME || "app.eduflow.com",
path: "/api/graphql",
port: process.env.EDUFLOW_API_PORT || 443,
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": query.length,
Authorization: "Bearer " + process.env.EDUFLOW_API_KEY,
"User-Agent": "Node",
},
};
const req = http.request(options, (res) => {
let data = "";
res.on("data", (d) => {
data += d;
});
res.on("end", () => {
console.log(JSON.parse(data).data);
});
});
req.on("error", (error) => {
console.error(error);
});
req.write(query);
req.end();
#!/bin/env python
import json
import os
import sys
import urllib.request
api_key = os.getenv("EDUFLOW_API_KEY")
if api_key is None:
sys.exit(
"""Enter your EDUFLOW_API_KEY:
env EDUFLOW_API_KEY=<api_key> python app.py"""
)
query = """{
institution {
name
}
}"""
raw_data = {
"query": query,
"variables": {},
}
data = json.dumps(raw_data).encode("utf-8")
options = {
"data": data,
"headers": {
"Content-Type": "application/json",
"Content-Length": len(data),
"Authorization": f"Bearer {api_key}",
"User-Agent": "Node",
},
}
hostname = os.getenv("EDUFLOW_API_HOSTNAME", "app.eduflow.com")
protocol = os.getenv("EDUFLOW_API_PROTOCOL", "https")
port = os.getenv("EDUFLOW_API_PORT", 443)
url = f"{protocol}://{hostname}:{port}/api/graphql"
request = urllib.request.Request(url, **options)
try:
response = urllib.request.urlopen(request)
print(response.read().decode())
except urllib.error.HTTPError as e:
print(e.read().decode())
Response:
{"data":{"institution":{"name":"Test institution"}}}
Session-based / GraphiQL
Institution administrators that are logged into Eduflow can access the API endpoint and query through the graphql interface.
When logged in, go directly to https://app.eduflow.com/api/graphql
If you access via browser, the GraphQL endpoint will show GraphiQL
To open GraphiQL's sidebar, mouseover an object in the query and click an object inside a tooltip, or clicking "Doc":
GraphiQL works with both session-based (logged into app.eduflow.com) and by passing authorization headers.