406Content negotiation
Ask for JSON, XML or YAML with the Accept header.
Full Stack Developer · Hyderabad, IN
Spring Boot and Node.js services, Angular web apps and Flutter mobile apps — documented the way I build them. Every endpoint below answers in JSON, XML or YAML, and shows the request in cURL, JavaScript or Java.
Accept: application/jsonbase url: https://sdilipkumar.in/v1GET/v1/me
The public developer resource, availability and related links.
curl -i "https://sdilipkumar.in/v1/me" -H "Accept: application/json"
fetch("/v1/me", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/me")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"name": "Dilip Kumar S",
"role": "Full Stack Developer",
"location": "Hyderabad, IN",
"remote": true
}<?xml version="1.0" encoding="UTF-8"?> <profile> <name>Dilip Kumar S</name> <role>Full Stack Developer</role> <remote>true</remote> </profile>
name: Dilip Kumar S role: Full Stack Developer location: "Hyderabad, IN" remote: true
GET/v1/skills
Backend, frontend, mobile, data and cloud capabilities.
categoryquerystringFilter by backend, frontend, mobile, data or cloud.curl -i "https://sdilipkumar.in/v1/skills" -H "Accept: application/json"
fetch("/v1/skills", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/skills")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"data": [
{ "category": "backend", "items": ["Java", "Spring Boot", "Node.js"] },
{ "category": "frontend", "items": ["Angular", "TypeScript"] }
]
}<?xml version="1.0" encoding="UTF-8"?> <skills> <data><category>backend</category></data> <data><category>frontend</category></data> </skills>
data:
- category: backend
items:
- Java
- Spring Boot
- Node.js
- category: frontend
items:
- AngularGET/v1/experience
Published roles and the product domains where I contributed.
curl -i "https://sdilipkumar.in/v1/experience" -H "Accept: application/json"
fetch("/v1/experience", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/experience")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"data": [
{ "role": "Full Stack Developer", "domains": ["enterprise", "healthcare"] },
{ "role": "Software Developer", "domains": ["edtech"] }
],
"total": 2
}<?xml version="1.0" encoding="UTF-8"?> <experience> <data><role>Full Stack Developer</role></data> <total>2</total> </experience>
data:
- role: Full Stack Developer
domains:
- enterprise
- healthcare
total: 2GET/v1/projects
Published work described by role and domain, with standard pagination.
page, limitqueryintegerChoose a page and up to 50 records.curl -i "https://sdilipkumar.in/v1/projects" -H "Accept: application/json"
fetch("/v1/projects", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/projects")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"data": [
{ "id": "proj_01", "domain": "healthcare", "role": "Backend Developer" },
{ "id": "proj_02", "domain": "enterprise", "role": "Full Stack Developer" }
],
"total": 5
}<?xml version="1.0" encoding="UTF-8"?> <projects> <data><id>proj_01</id><domain>healthcare</domain></data> <total>5</total> </projects>
data:
- id: proj_01
domain: healthcare
role: Backend Developer
total: 5GET/v1/projects/{id}
One published project with its stack, modules and public links.
id*pathstringThe stable project resource id.curl -i "https://sdilipkumar.in/v1/projects/{id}" -H "Accept: application/json"fetch("/v1/projects/{id}", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/projects/{id}")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"id": "proj_05",
"type": "personal",
"modules": ["app", "admin", "shared"],
"links": { "live": "[LIVE URL]", "source": "[REPO URL]" }
}<?xml version="1.0" encoding="UTF-8"?> <project> <id>proj_05</id> <type>personal</type> <modules>app</modules> </project>
id: proj_05 type: personal modules: - app - admin - shared
GET/v1/education
Degrees and fields returned as a compact resource.
curl -i "https://sdilipkumar.in/v1/education" -H "Accept: application/json"
fetch("/v1/education", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/education")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"degrees": [
{ "degree": "B.Tech", "field": "EEE", "year": 2020 },
{ "degree": "Diploma", "field": "EEE", "year": 2017 }
]
}<?xml version="1.0" encoding="UTF-8"?> <education> <degrees><degree>B.Tech</degree><year>2020</year></degrees> </education>
degrees:
- degree: B.Tech
field: EEE
year: 2020
- degree: Diploma
field: EEE
year: 2017POST/v1/hire
A protected, validated and idempotent way to start a conversation.
Idempotency-Key*headerUUIDMakes retries safe for 24 hours.curl -i "https://sdilipkumar.in/v1/hire" -H "Accept: application/json"
fetch("/v1/hire", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/hire")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"status": "received",
"replyWithin": "[24 hours]"
}<?xml version="1.0" encoding="UTF-8"?> <hireResponse> <status>received</status> <replyWithin>[24 hours]</replyWithin> </hireResponse>
status: received replyWithin: "[24 hours]"
GET/v1/skills/cobol
Errors use the same negotiated format and RFC 7807 fields.
curl -i "https://sdilipkumar.in/v1/skills/cobol" -H "Accept: application/json"
fetch("/v1/skills/cobol", {
headers: { Accept: "application/json" }
})client.get().uri("/v1/skills/cobol")
.accept(MediaType.parseMediaType("application/json"))
.retrieve().body(String.class);Content-Type: application/json; charset=utf-8 Cache-Control: public, max-age=60 ETag: W/"resource-hash" X-RateLimit-Limit: 60 X-RateLimit-Remaining: 59
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "That skill category is not available."
}<?xml version="1.0" encoding="UTF-8"?> <problem> <title>Not Found</title> <status>404</status> </problem>
type: "about:blank" title: Not Found status: 404 detail: That skill category is not available.
GUIDE
406Ask for JSON, XML or YAML with the Accept header.
/v1Stable paths make integrations predictable.
LinkMove through collections with Link and X-Total-Count.
_linksEach resource points to useful related resources.
304Send an ETag back with If-None-Match.
429Limits keep the public API responsive.
AllowDiscover supported methods before sending a request.
UUIDSafely retry hire requests with one key.
RFC 7807Errors stay structured in every format.
REFERENCE
OKThe resource is ready.CreatedYour request was received.Not ModifiedYour cached copy is still current.Bad RequestOne query value needs attention.Not FoundThat skill isn’t on the list yet. Ask — I learn fast.Not AcceptableChoose JSON, XML or YAML.ConflictThat retry key belongs to another body.Unsupported Media TypeSend JSON, XML or YAML.Unprocessable EntityThe fields need a quick correction.Too Many RequestsPause briefly, then try again.