Drive Profile README from your own code
Everything the web app does goes through one public surface. Base URL:
https://api.skillsafe.ai/v1/app-api
Every request carries Authorization: Bearer <token> and Content-Type: application/json.
Every response is a JSON envelope: {"ok":true,"data":{…}} on success and
{"ok":false,"error":{"code":"…","message":"…"}} on failure. Read error.code, not only the HTTP status.
The model writes prose only. Every badge, link and stats-card URL in the web app is built in the browser from the form, and the reply is checked against what was typed; code calling the API should treat the reply the same way and build its own links.
Errors
| Code | Meaning | What to do |
|---|---|---|
UNAUTHORIZED | Missing, expired or wrong-app token. | Mint a guest token or sign in again. |
INSUFFICIENT_CREDITS | Balance below min_credits. | Top up. /estimate is free and tells you the hold. |
VALIDATION_ERROR | The input object failed validation. | Check error.details. The body is the input object itself — never wrap it in {"input": …}. |
RATE_LIMITED | Too many requests. | Back off and retry. |
JOB_FAILED | The run started and did not complete. | Retry with the same Idempotency-Key. |
The task field comes first
One prompt serves two turns, chosen by task:
"write"— the first version from the form."revise"— a rewrite of an earlier reply following a note. Addspreviousandrevise_note.
Input
One flat object of strings. task is required; everything else may be empty. Objects travel as JSON text.
| Field | Type | Meaning |
|---|---|---|
task | string, required | "write" or "revise". |
name, handle, tagline, location | string | Name, GitHub username, headline in their words, where they are based. |
about | string | A few sentences in their words (1,500 characters). |
now, learning, ask_me, fun_fact | string | One line each (300). |
stack | string | Technologies as typed, comma-separated. |
projects | string | One per line: name - what it does | link (3,000; long lists keep the first and last lines). |
links | string | Service names only, e.g. LinkedIn, Email (you@example.com), Website (yoursite.dev). Never URLs. |
tone | string | friendly, professional, playful or minimal. |
emoji | string | on or off. |
notes | string | Anything else, e.g. "open to work" (800). |
prescan | string (JSON) | The web app's free parse: {"stack":[],"stack_groups":[{"label","items"}],"projects":[{"name","has_link","desc"}],"link_services":[],"stats_cards":[],"warnings":[]}. stack and projects are the canonical names the reply must reuse. |
previous | string (JSON) | Revise only: the earlier reply object. |
revise_note | string | Revise only: what to change (400). |
retry_note | string | Sent only on the one automatic reformat retry. |
Output
The output (output.output) is one JSON object: task, status (ok · need_more · off_topic), message, tagline, intro,
about[] (bullets), stack_groups[] of {label, items[]}, projects[] of {name, blurb},
extra[] of {heading, body}, fun_fact, closing and suggestions[].
The prose carries no links, images or badges — assemble those yourself. For need_more and off_topic only message is filled. The model may wrap the object in a code fence; strip it before parsing.
1. Get a token
A guest token is enough for /me and /estimate. Running is metered and needs a personal token from signing in. The tokens page shows yours and copies it. Replace YOUR_TOKEN below with it.
2. Check the session and the balance
/me returns subject_type, subject_id and credits. Signed in means subject_type === "user".
curl -s "https://api.skillsafe.ai/v1/app-api/me" \ -H "Authorization: Bearer YOUR_TOKEN"
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
r = requests.get(f"{BASE}/me", headers=H, timeout=30).json()
print(r["data"]["subject_type"], r["data"]["credits"])
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
const r = await (await fetch(`${BASE}/me`, { headers: H })).json();
console.log(r.data.subject_type, r.data.credits);
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
func main() {
req, _ := http.NewRequest("GET", base+"/me", nil)
req.Header.Set("Authorization", "Bearer "+token)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
_ = bytes.NewReader
}
var token = "YOUR_TOKEN";
var base = "https://api.skillsafe.ai/v1/app-api";
var http = java.net.http.HttpClient.newHttpClient();
var req = java.net.http.HttpRequest.newBuilder(java.net.URI.create(base + "/me"))
.header("Authorization", "Bearer " + token).GET().build();
System.out.println(http.send(req, java.net.http.HttpResponse.BodyHandlers.ofString()).body());
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
uri = URI("#{BASE}/me")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{TOKEN}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["data"]
<?php
$token = "YOUR_TOKEN";
$base = "https://api.skillsafe.ai/v1/app-api";
$ch = curl_init("$base/me");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"]]);
print_r(json_decode(curl_exec($ch), true)["data"]);
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
Console.WriteLine(await http.GetStringAsync($"{baseUrl}/me"));
3. Price it before you run it
/estimate is free and starts no job. hold_credits is a reservation priced against the longest possible reply, not the price. A first version (task: "write"):
curl -s -X POST "https://api.skillsafe.ai/v1/app-api/estimate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'\''m finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I'\''ve run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'\''m looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}'
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
body = {
"task": "write",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"
}
r = requests.post(f"{BASE}/estimate", headers={**H}, json=body, timeout=120).json()
print(r["data"]["hold_credits"], r["data"]["model_alias"])
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
const body = {
"task": "write",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"
};
const r = await (await fetch(`${BASE}/estimate`, { method: "POST", headers: { ...H }, body: JSON.stringify(body) })).json();
console.log(r.data.hold_credits, r.data.model_alias);
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
func main() {
payload := []byte(`{"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I've run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'm looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}`)
req, _ := http.NewRequest("POST", base+"/estimate", bytes.NewReader(payload))
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
var token = "YOUR_TOKEN";
var base = "https://api.skillsafe.ai/v1/app-api";
var http = java.net.http.HttpClient.newHttpClient();
var body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}";
var req = java.net.http.HttpRequest.newBuilder(java.net.URI.create(base + "/estimate"))
.header("Authorization", "Bearer " + token).header("Content-Type", "application/json")
.POST(java.net.http.HttpRequest.BodyPublishers.ofString(body)).build();
System.out.println(http.send(req, java.net.http.HttpResponse.BodyHandlers.ofString()).body());
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
uri = URI("#{BASE}/estimate")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer #{TOKEN}"
req["Content-Type"] = "application/json"
req.body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["data"]
<?php
$token = "YOUR_TOKEN";
$base = "https://api.skillsafe.ai/v1/app-api";
$body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}";
$ch = curl_init("$base/estimate");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", "Content-Type: application/json"],
]);
print_r(json_decode(curl_exec($ch), true)["data"]);
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var body = new StringContent("{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}", Encoding.UTF8, "application/json");
var res = await http.PostAsync($"{baseUrl}/estimate", body);
Console.WriteLine(await res.Content.ReadAsStringAsync());
A revise round (task: "revise") carries the earlier reply and the note:
curl -s -X POST "https://api.skillsafe.ai/v1/app-api/estimate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"task": "revise", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'\''m finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I'\''ve run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'\''m looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}", "previous": "{\"task\":\"write\",\"status\":\"ok\",\"message\":\"\",\"tagline\":\"MSc student in data science, into forecasting and messy real-world data\",\"intro\":\"I'\''m finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'\''m working on a dissertation on forecasting bus delays from open transit data. I'\''m also picking up Rust, slowly, and sharpening my SQL along the way. I'\''m looking for a data internship from June.\",\"about\":[\"\ud83d\udd2d Currently working on a dissertation forecasting bus delays from open transit data\",\"\ud83c\udf31 Learning Rust (slowly) and better SQL\",\"\ud83d\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\",\"\ud83d\udccd Based in Leeds, UK\",\"\ud83d\udcbc Open to a data internship from June\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"blurb\":\"Forecasts bus delays in Leeds using open GTFS feeds.\"},{\"name\":\"tidy-council\",\"blurb\":\"Cleans and joins UK council spending CSVs.\"},{\"name\":\"parkrun-stats\",\"blurb\":\"A notebook that charts my parkrun times by course.\"}],\"extra\":[],\"fun_fact\":\"I'\''ve run a parkrun in 31 different parks.\",\"closing\":\"Always happy to talk pandas, time series, or a messy dataset - say hi!\",\"suggestions\":[\"Add a line on why you built tidy-council or who it'\''s for - right now it just says what it cleans.\",\"Say whether you'\''re looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\",\"Consider adding a repo link for parkrun-stats, like your other two projects have.\"]}", "revise_note": "Shorter, and make the internship the first thing people see"}'
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
body = {
"task": "revise",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}",
"previous": "{\"task\":\"write\",\"status\":\"ok\",\"message\":\"\",\"tagline\":\"MSc student in data science, into forecasting and messy real-world data\",\"intro\":\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\",\"about\":[\"\ud83d\udd2d Currently working on a dissertation forecasting bus delays from open transit data\",\"\ud83c\udf31 Learning Rust (slowly) and better SQL\",\"\ud83d\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\",\"\ud83d\udccd Based in Leeds, UK\",\"\ud83d\udcbc Open to a data internship from June\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"blurb\":\"Forecasts bus delays in Leeds using open GTFS feeds.\"},{\"name\":\"tidy-council\",\"blurb\":\"Cleans and joins UK council spending CSVs.\"},{\"name\":\"parkrun-stats\",\"blurb\":\"A notebook that charts my parkrun times by course.\"}],\"extra\":[],\"fun_fact\":\"I've run a parkrun in 31 different parks.\",\"closing\":\"Always happy to talk pandas, time series, or a messy dataset - say hi!\",\"suggestions\":[\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\",\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\",\"Consider adding a repo link for parkrun-stats, like your other two projects have.\"]}",
"revise_note": "Shorter, and make the internship the first thing people see"
}
r = requests.post(f"{BASE}/estimate", headers={**H}, json=body, timeout=120).json()
print(r["data"]["hold_credits"])
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
const body = {
"task": "revise",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}",
"previous": "{\"task\":\"write\",\"status\":\"ok\",\"message\":\"\",\"tagline\":\"MSc student in data science, into forecasting and messy real-world data\",\"intro\":\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\",\"about\":[\"\ud83d\udd2d Currently working on a dissertation forecasting bus delays from open transit data\",\"\ud83c\udf31 Learning Rust (slowly) and better SQL\",\"\ud83d\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\",\"\ud83d\udccd Based in Leeds, UK\",\"\ud83d\udcbc Open to a data internship from June\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"blurb\":\"Forecasts bus delays in Leeds using open GTFS feeds.\"},{\"name\":\"tidy-council\",\"blurb\":\"Cleans and joins UK council spending CSVs.\"},{\"name\":\"parkrun-stats\",\"blurb\":\"A notebook that charts my parkrun times by course.\"}],\"extra\":[],\"fun_fact\":\"I've run a parkrun in 31 different parks.\",\"closing\":\"Always happy to talk pandas, time series, or a messy dataset - say hi!\",\"suggestions\":[\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\",\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\",\"Consider adding a repo link for parkrun-stats, like your other two projects have.\"]}",
"revise_note": "Shorter, and make the internship the first thing people see"
};
const r = await (await fetch(`${BASE}/estimate`, { method: "POST", headers: { ...H }, body: JSON.stringify(body) })).json();
console.log(r.data.hold_credits);
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
func main() {
payload := []byte(`{"task": "revise", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I've run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'm looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}", "previous": "{\"task\":\"write\",\"status\":\"ok\",\"message\":\"\",\"tagline\":\"MSc student in data science, into forecasting and messy real-world data\",\"intro\":\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\",\"about\":[\"\ud83d\udd2d Currently working on a dissertation forecasting bus delays from open transit data\",\"\ud83c\udf31 Learning Rust (slowly) and better SQL\",\"\ud83d\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\",\"\ud83d\udccd Based in Leeds, UK\",\"\ud83d\udcbc Open to a data internship from June\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"blurb\":\"Forecasts bus delays in Leeds using open GTFS feeds.\"},{\"name\":\"tidy-council\",\"blurb\":\"Cleans and joins UK council spending CSVs.\"},{\"name\":\"parkrun-stats\",\"blurb\":\"A notebook that charts my parkrun times by course.\"}],\"extra\":[],\"fun_fact\":\"I've run a parkrun in 31 different parks.\",\"closing\":\"Always happy to talk pandas, time series, or a messy dataset - say hi!\",\"suggestions\":[\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\",\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\",\"Consider adding a repo link for parkrun-stats, like your other two projects have.\"]}", "revise_note": "Shorter, and make the internship the first thing people see"}`)
req, _ := http.NewRequest("POST", base+"/estimate", bytes.NewReader(payload))
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
var token = "YOUR_TOKEN";
var base = "https://api.skillsafe.ai/v1/app-api";
var http = java.net.http.HttpClient.newHttpClient();
var body = "{\"task\": \"revise\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\", \"previous\": \"{\\\"task\\\":\\\"write\\\",\\\"status\\\":\\\"ok\\\",\\\"message\\\":\\\"\\\",\\\"tagline\\\":\\\"MSc student in data science, into forecasting and messy real-world data\\\",\\\"intro\\\":\\\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\\\",\\\"about\\\":[\\\"\\ud83d\\udd2d Currently working on a dissertation forecasting bus delays from open transit data\\\",\\\"\\ud83c\\udf31 Learning Rust (slowly) and better SQL\\\",\\\"\\ud83d\\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\\\",\\\"\\ud83d\\udccd Based in Leeds, UK\\\",\\\"\\ud83d\\udcbc Open to a data internship from June\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"blurb\\\":\\\"Forecasts bus delays in Leeds using open GTFS feeds.\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"blurb\\\":\\\"Cleans and joins UK council spending CSVs.\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"blurb\\\":\\\"A notebook that charts my parkrun times by course.\\\"}],\\\"extra\\\":[],\\\"fun_fact\\\":\\\"I've run a parkrun in 31 different parks.\\\",\\\"closing\\\":\\\"Always happy to talk pandas, time series, or a messy dataset - say hi!\\\",\\\"suggestions\\\":[\\\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\\\",\\\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\\\",\\\"Consider adding a repo link for parkrun-stats, like your other two projects have.\\\"]}\", \"revise_note\": \"Shorter, and make the internship the first thing people see\"}";
var req = java.net.http.HttpRequest.newBuilder(java.net.URI.create(base + "/estimate"))
.header("Authorization", "Bearer " + token).header("Content-Type", "application/json")
.POST(java.net.http.HttpRequest.BodyPublishers.ofString(body)).build();
System.out.println(http.send(req, java.net.http.HttpResponse.BodyHandlers.ofString()).body());
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
uri = URI("#{BASE}/estimate")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer #{TOKEN}"
req["Content-Type"] = "application/json"
req.body = "{\"task\": \"revise\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\", \"previous\": \"{\\\"task\\\":\\\"write\\\",\\\"status\\\":\\\"ok\\\",\\\"message\\\":\\\"\\\",\\\"tagline\\\":\\\"MSc student in data science, into forecasting and messy real-world data\\\",\\\"intro\\\":\\\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\\\",\\\"about\\\":[\\\"\\ud83d\\udd2d Currently working on a dissertation forecasting bus delays from open transit data\\\",\\\"\\ud83c\\udf31 Learning Rust (slowly) and better SQL\\\",\\\"\\ud83d\\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\\\",\\\"\\ud83d\\udccd Based in Leeds, UK\\\",\\\"\\ud83d\\udcbc Open to a data internship from June\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"blurb\\\":\\\"Forecasts bus delays in Leeds using open GTFS feeds.\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"blurb\\\":\\\"Cleans and joins UK council spending CSVs.\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"blurb\\\":\\\"A notebook that charts my parkrun times by course.\\\"}],\\\"extra\\\":[],\\\"fun_fact\\\":\\\"I've run a parkrun in 31 different parks.\\\",\\\"closing\\\":\\\"Always happy to talk pandas, time series, or a messy dataset - say hi!\\\",\\\"suggestions\\\":[\\\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\\\",\\\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\\\",\\\"Consider adding a repo link for parkrun-stats, like your other two projects have.\\\"]}\", \"revise_note\": \"Shorter, and make the internship the first thing people see\"}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["data"]
<?php
$token = "YOUR_TOKEN";
$base = "https://api.skillsafe.ai/v1/app-api";
$body = "{\"task\": \"revise\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\", \"previous\": \"{\\\"task\\\":\\\"write\\\",\\\"status\\\":\\\"ok\\\",\\\"message\\\":\\\"\\\",\\\"tagline\\\":\\\"MSc student in data science, into forecasting and messy real-world data\\\",\\\"intro\\\":\\\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\\\",\\\"about\\\":[\\\"\\ud83d\\udd2d Currently working on a dissertation forecasting bus delays from open transit data\\\",\\\"\\ud83c\\udf31 Learning Rust (slowly) and better SQL\\\",\\\"\\ud83d\\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\\\",\\\"\\ud83d\\udccd Based in Leeds, UK\\\",\\\"\\ud83d\\udcbc Open to a data internship from June\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"blurb\\\":\\\"Forecasts bus delays in Leeds using open GTFS feeds.\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"blurb\\\":\\\"Cleans and joins UK council spending CSVs.\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"blurb\\\":\\\"A notebook that charts my parkrun times by course.\\\"}],\\\"extra\\\":[],\\\"fun_fact\\\":\\\"I've run a parkrun in 31 different parks.\\\",\\\"closing\\\":\\\"Always happy to talk pandas, time series, or a messy dataset - say hi!\\\",\\\"suggestions\\\":[\\\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\\\",\\\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\\\",\\\"Consider adding a repo link for parkrun-stats, like your other two projects have.\\\"]}\", \"revise_note\": \"Shorter, and make the internship the first thing people see\"}";
$ch = curl_init("$base/estimate");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", "Content-Type: application/json"],
]);
print_r(json_decode(curl_exec($ch), true)["data"]);
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var body = new StringContent("{\"task\": \"revise\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\", \"previous\": \"{\\\"task\\\":\\\"write\\\",\\\"status\\\":\\\"ok\\\",\\\"message\\\":\\\"\\\",\\\"tagline\\\":\\\"MSc student in data science, into forecasting and messy real-world data\\\",\\\"intro\\\":\\\"I'm finishing an MSc in data science, where I like turning messy public datasets into forecasts people can actually use. Right now I'm working on a dissertation on forecasting bus delays from open transit data. I'm also picking up Rust, slowly, and sharpening my SQL along the way. I'm looking for a data internship from June.\\\",\\\"about\\\":[\\\"\\ud83d\\udd2d Currently working on a dissertation forecasting bus delays from open transit data\\\",\\\"\\ud83c\\udf31 Learning Rust (slowly) and better SQL\\\",\\\"\\ud83d\\udcac Ask me about pandas, time series, or making sense of an undocumented CSV\\\",\\\"\\ud83d\\udccd Based in Leeds, UK\\\",\\\"\\ud83d\\udcbc Open to a data internship from June\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"blurb\\\":\\\"Forecasts bus delays in Leeds using open GTFS feeds.\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"blurb\\\":\\\"Cleans and joins UK council spending CSVs.\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"blurb\\\":\\\"A notebook that charts my parkrun times by course.\\\"}],\\\"extra\\\":[],\\\"fun_fact\\\":\\\"I've run a parkrun in 31 different parks.\\\",\\\"closing\\\":\\\"Always happy to talk pandas, time series, or a messy dataset - say hi!\\\",\\\"suggestions\\\":[\\\"Add a line on why you built tidy-council or who it's for - right now it just says what it cleans.\\\",\\\"Say whether you're looking for the internship remote, in Leeds, or either - it helps people reach out with the right opportunities.\\\",\\\"Consider adding a repo link for parkrun-stats, like your other two projects have.\\\"]}\", \"revise_note\": \"Shorter, and make the internship the first thing people see\"}", Encoding.UTF8, "application/json");
var res = await http.PostAsync($"{baseUrl}/estimate", body);
Console.WriteLine(await res.Content.ReadAsStringAsync());
4. Run and poll
/run returns a job. Always send an Idempotency-Key — the same key is the same run, so a retry cannot bill twice. The web app derives it from the task and a hash of the input, plus an attempt number for its one automatic reformat retry.
curl -s -X POST "https://api.skillsafe.ai/v1/app-api/run" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: profile-readme:write:k3x9q1-2f0:a1" \
-d '{"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'\''m finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I'\''ve run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'\''m looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}'
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
body = {
"task": "write",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"
}
r = requests.post(f"{BASE}/run", headers={**H, "Idempotency-Key": "profile-readme:write:k3x9q1-2f0:a1"}, json=body, timeout=120).json()
job_id = r["data"]["job_id"]
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
const body = {
"task": "write",
"name": "Priya Raman",
"handle": "priya-raman",
"tagline": "MSc student in data science, into forecasting and messy real-world data",
"location": "Leeds, UK",
"about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.",
"now": "a dissertation on forecasting bus delays from open transit data",
"learning": "Rust, slowly, and better SQL",
"ask_me": "pandas, time series, making sense of a CSV nobody documented",
"fun_fact": "I've run a parkrun in 31 different parks",
"stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker",
"projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course",
"notes": "I'm looking for a data internship from June.",
"links": "LinkedIn, Email, Website (priyaraman.dev)",
"tone": "friendly",
"emoji": "on",
"prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"
};
const r = await (await fetch(`${BASE}/run`, { method: "POST", headers: { ...H, "Idempotency-Key": "profile-readme:write:k3x9q1-2f0:a1" }, body: JSON.stringify(body) })).json();
const jobId = r.data.job_id;
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
func main() {
payload := []byte(`{"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I've run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'm looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}`)
req, _ := http.NewRequest("POST", base+"/run", bytes.NewReader(payload))
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "profile-readme:write:k3x9q1-2f0:a1")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
var token = "YOUR_TOKEN";
var base = "https://api.skillsafe.ai/v1/app-api";
var http = java.net.http.HttpClient.newHttpClient();
var body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}";
var req = java.net.http.HttpRequest.newBuilder(java.net.URI.create(base + "/run"))
.header("Authorization", "Bearer " + token).header("Content-Type", "application/json")
.header("Idempotency-Key", "profile-readme:write:k3x9q1-2f0:a1")
.POST(java.net.http.HttpRequest.BodyPublishers.ofString(body)).build();
System.out.println(http.send(req, java.net.http.HttpResponse.BodyHandlers.ofString()).body());
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
uri = URI("#{BASE}/run")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer #{TOKEN}"
req["Content-Type"] = "application/json"
req["Idempotency-Key"] = "profile-readme:write:k3x9q1-2f0:a1"
req.body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
puts JSON.parse(res.body)["data"]
<?php
$token = "YOUR_TOKEN";
$base = "https://api.skillsafe.ai/v1/app-api";
$body = "{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}";
$ch = curl_init("$base/run");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token", "Content-Type: application/json", "Idempotency-Key: profile-readme:write:k3x9q1-2f0:a1"],
]);
print_r(json_decode(curl_exec($ch), true)["data"]);
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var body = new StringContent("{\"task\": \"write\", \"name\": \"Priya Raman\", \"handle\": \"priya-raman\", \"tagline\": \"MSc student in data science, into forecasting and messy real-world data\", \"location\": \"Leeds, UK\", \"about\": \"I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.\", \"now\": \"a dissertation on forecasting bus delays from open transit data\", \"learning\": \"Rust, slowly, and better SQL\", \"ask_me\": \"pandas, time series, making sense of a CSV nobody documented\", \"fun_fact\": \"I've run a parkrun in 31 different parks\", \"stack\": \"Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker\", \"projects\": \"busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\\nparkrun-stats: a notebook that charts my parkrun times by course\", \"notes\": \"I'm looking for a data internship from June.\", \"links\": \"LinkedIn, Email, Website (priyaraman.dev)\", \"tone\": \"friendly\", \"emoji\": \"on\", \"prescan\": \"{\\\"stack\\\":[\\\"Python\\\",\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"SQL\\\",\\\"PostgreSQL\\\",\\\"Jupyter\\\",\\\"Plotly\\\",\\\"Git\\\",\\\"Docker\\\"],\\\"stack_groups\\\":[{\\\"label\\\":\\\"Languages\\\",\\\"items\\\":[\\\"Python\\\",\\\"SQL\\\"]},{\\\"label\\\":\\\"Data & ML\\\",\\\"items\\\":[\\\"pandas\\\",\\\"NumPy\\\",\\\"scikit-learn\\\",\\\"PyTorch\\\",\\\"Jupyter\\\",\\\"Plotly\\\"]},{\\\"label\\\":\\\"Databases\\\",\\\"items\\\":[\\\"PostgreSQL\\\"]},{\\\"label\\\":\\\"Cloud & DevOps\\\",\\\"items\\\":[\\\"Docker\\\"]},{\\\"label\\\":\\\"Tools\\\",\\\"items\\\":[\\\"Git\\\"]}],\\\"projects\\\":[{\\\"name\\\":\\\"busdelay\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"forecasts bus delays in Leeds from open GTFS feeds -\\\"},{\\\"name\\\":\\\"tidy-council\\\",\\\"has_link\\\":true,\\\"desc\\\":\\\"cleans and joins UK council spending CSVs\\\"},{\\\"name\\\":\\\"parkrun-stats\\\",\\\"has_link\\\":false,\\\"desc\\\":\\\"a notebook that charts my parkrun times by course\\\"}],\\\"link_services\\\":[\\\"LinkedIn\\\",\\\"Email\\\",\\\"Website\\\"],\\\"stats_cards\\\":[\\\"stats\\\",\\\"langs\\\"],\\\"warnings\\\":[]}\"}", Encoding.UTF8, "application/json");
http.DefaultRequestHeaders.Add("Idempotency-Key", "profile-readme:write:k3x9q1-2f0:a1");
var res = await http.PostAsync($"{baseUrl}/run", body);
Console.WriteLine(await res.Content.ReadAsStringAsync());
curl -s "https://api.skillsafe.ai/v1/app-api/jobs/JOB_ID" \ -H "Authorization: Bearer YOUR_TOKEN" # repeat until data.status is "succeeded" or "failed"; # the reply is the JSON string at data.output.output
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
import json, time
job_id = "JOB_ID"
while True:
job = requests.get(f"{BASE}/jobs/{job_id}", headers=H, timeout=30).json()["data"]
if job["status"] in ("succeeded", "failed"):
break
time.sleep(1)
readme = json.loads(job["output"]["output"])
print(readme["status"], readme["tagline"])
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
let job;
for (;;) {
job = (await (await fetch(`${BASE}/jobs/JOB_ID`, { headers: H })).json()).data;
if (job.status === "succeeded" || job.status === "failed") break;
await new Promise((r) => setTimeout(r, 1000));
}
const prose = JSON.parse(job.output.output);
console.log(prose.status, prose.tagline);
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
// GET base+"/jobs/JOB_ID" every second until data.status is
// "succeeded" or "failed", then json.Unmarshal data.output.output.
func main() { fmt.Println("poll", base+"/jobs/JOB_ID"); _ = bytes.NewReader; _ = json.Marshal; _ = http.Get }
var token = "YOUR_TOKEN"; var base = "https://api.skillsafe.ai/v1/app-api"; var http = java.net.http.HttpClient.newHttpClient(); // GET base + "/jobs/JOB_ID" every second until data.status is // "succeeded" or "failed"; the reply is the JSON string at data.output.output.
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
loop do
uri = URI("#{BASE}/jobs/JOB_ID")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{TOKEN}"
job = JSON.parse(Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }.body)["data"]
if %w[succeeded failed].include?(job["status"])
puts JSON.parse(job["output"]["output"])["tagline"]
break
end
sleep 1
end
<?php
$token = "YOUR_TOKEN";
$base = "https://api.skillsafe.ai/v1/app-api";
do {
$ch = curl_init("$base/jobs/JOB_ID");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer $token"]]);
$job = json_decode(curl_exec($ch), true)["data"];
if (!in_array($job["status"], ["succeeded", "failed"])) sleep(1);
} while (!in_array($job["status"], ["succeeded", "failed"]));
print_r(json_decode($job["output"]["output"], true)["tagline"]);
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
// GET {baseUrl}/jobs/JOB_ID every second until data.status is
// "succeeded" or "failed"; the reply is the JSON string at data.output.output.
5. Stream it
/run-stream answers with server-sent events and ends with a done frame carrying the whole output, charged_credits and truncated. If truncated is true the balance ran low mid-answer: keep the fields that arrived whole and top up for the rest.
curl -sN -X POST "https://api.skillsafe.ai/v1/app-api/run-stream" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "Idempotency-Key: profile-readme:write:k3x9q1-2f0:a1" \
-d '{"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'\''m finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I'\''ve run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'\''m looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}'
# event: job data: {"job_id": ...}
# event: delta data: {"text": "..."} (may be absent: a browser often gets only
# event: tick heartbeats and the whole answer in the final frame)
# event: done data: {"output": {"output": "<the JSON reply>"}, "charged_credits": ..., "truncated": false}
import requests
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
import json
body = {"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I've run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'm looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}
with requests.post(f"{BASE}/run-stream", json=body, stream=True, timeout=300,
headers={**H, "Accept": "text/event-stream", "Idempotency-Key": "profile-readme:write:k3x9q1-2f0:a1"}) as r:
event, done = None, None
for line in r.iter_lines(decode_unicode=True):
if line.startswith("event:"): event = line[6:].strip()
elif line.startswith("data:") and event == "done": done = json.loads(line[5:])
prose = json.loads(done["output"]["output"])
print(prose["tagline"], done.get("charged_credits"), done.get("truncated"))
const TOKEN = "YOUR_TOKEN";
const BASE = "https://api.skillsafe.ai/v1/app-api";
const H = { Authorization: `Bearer ${TOKEN}`, "Content-Type": "application/json" };
const res = await fetch(`${BASE}/run-stream`, { method: "POST",
headers: { ...H, Accept: "text/event-stream", "Idempotency-Key": "profile-readme:write:k3x9q1-2f0:a1" },
body: JSON.stringify({"task": "write", "name": "Priya Raman", "handle": "priya-raman", "tagline": "MSc student in data science, into forecasting and messy real-world data", "location": "Leeds, UK", "about": "I'm finishing an MSc in data science. I like turning messy public datasets into forecasts people can actually use, and I write up what I learn as I go.", "now": "a dissertation on forecasting bus delays from open transit data", "learning": "Rust, slowly, and better SQL", "ask_me": "pandas, time series, making sense of a CSV nobody documented", "fun_fact": "I've run a parkrun in 31 different parks", "stack": "Python, pandas, NumPy, scikit-learn, PyTorch, SQL, PostgreSQL, Jupyter, Plotly, Git, Docker", "projects": "busdelay - forecasts bus delays in Leeds from open GTFS feeds | https://github.com/priya-raman/busdelay\npriya-raman/tidy-council - cleans and joins UK council spending CSVs\nparkrun-stats: a notebook that charts my parkrun times by course", "notes": "I'm looking for a data internship from June.", "links": "LinkedIn, Email, Website (priyaraman.dev)", "tone": "friendly", "emoji": "on", "prescan": "{\"stack\":[\"Python\",\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"SQL\",\"PostgreSQL\",\"Jupyter\",\"Plotly\",\"Git\",\"Docker\"],\"stack_groups\":[{\"label\":\"Languages\",\"items\":[\"Python\",\"SQL\"]},{\"label\":\"Data & ML\",\"items\":[\"pandas\",\"NumPy\",\"scikit-learn\",\"PyTorch\",\"Jupyter\",\"Plotly\"]},{\"label\":\"Databases\",\"items\":[\"PostgreSQL\"]},{\"label\":\"Cloud & DevOps\",\"items\":[\"Docker\"]},{\"label\":\"Tools\",\"items\":[\"Git\"]}],\"projects\":[{\"name\":\"busdelay\",\"has_link\":true,\"desc\":\"forecasts bus delays in Leeds from open GTFS feeds -\"},{\"name\":\"tidy-council\",\"has_link\":true,\"desc\":\"cleans and joins UK council spending CSVs\"},{\"name\":\"parkrun-stats\",\"has_link\":false,\"desc\":\"a notebook that charts my parkrun times by course\"}],\"link_services\":[\"LinkedIn\",\"Email\",\"Website\"],\"stats_cards\":[\"stats\",\"langs\"],\"warnings\":[]}"}) });
const text = await res.text(); // or read res.body incrementally
let done = null;
for (const frame of text.split("\n\n")) {
const ev = /^event: *(.*)$/m.exec(frame), data = /^data: *(.*)$/m.exec(frame);
if (ev && ev[1] === "done" && data) done = JSON.parse(data[1]);
}
const prose = JSON.parse(done.output.output);
console.log(prose.tagline, done.truncated);
package main
import ("bytes"; "encoding/json"; "fmt"; "net/http")
const base = "https://api.skillsafe.ai/v1/app-api"
const token = "YOUR_TOKEN"
// POST base+"/run-stream" with Accept: text/event-stream, read lines with
// bufio.Scanner, and json.Unmarshal the data line of the "done" event.
func main() { fmt.Println("see the cURL tab for the frame format"); _ = bytes.NewReader; _ = json.Marshal; _ = http.Get }
var token = "YOUR_TOKEN"; var base = "https://api.skillsafe.ai/v1/app-api"; var http = java.net.http.HttpClient.newHttpClient(); // POST base + "/run-stream" with Accept: text/event-stream, read the body // line by line (BodyHandlers.ofLines()), and parse the data line of the "done" event.
require "net/http"
require "json"
TOKEN = "YOUR_TOKEN"
BASE = "https://api.skillsafe.ai/v1/app-api"
# POST to "#{BASE}/run-stream" with Accept: text/event-stream; read the body,
# split frames on blank lines, and JSON.parse the data line of the "done" event.
<?php $token = "YOUR_TOKEN"; $base = "https://api.skillsafe.ai/v1/app-api"; // POST to "$base/run-stream" with Accept: text/event-stream; split the body on // blank lines and json_decode the data line of the "done" event.
using System.Net.Http.Headers;
using System.Text;
var token = "YOUR_TOKEN";
var baseUrl = "https://api.skillsafe.ai/v1/app-api";
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
// POST {baseUrl}/run-stream with Accept: text/event-stream; read the response
// stream line by line and parse the data line of the "done" event.