---
title: "Machine interfaces — James X Digital"
description: "Every machine-readable surface of jamesxdigital.com: markdown mirror, llms.txt index, RSS feed, sitemap, and the contact API's request and response contract."
url: "https://jamesxdigital.com/api/"
---

# API

Every machine-readable surface this site offers.

This is a portfolio site, not a product with a programmable API. What it does offer, it offers to machines on the same terms as to browsers: everything below works without credentials and returns real content.

## Markdown mirror

Every page has a markdown twin at `<path>index.md` — for example[`/index.md`](https://jamesxdigital.com/index.md) or[`/emojilibrary/index.md`](https://jamesxdigital.com/emojilibrary/index.md). Sending`Accept: text/markdown` on any GET also returns the markdown variant, so agents never have to parse HTML.

## Indexes

*   [`/llms.txt`](https://jamesxdigital.com/llms.txt) — what this site is, when an agent should use it, and links to every page.
*   [`/sitemap-index.xml`](https://jamesxdigital.com/sitemap-index.xml) — every public URL with last-modified dates.
*   [`/feed.xml`](https://jamesxdigital.com/feed.xml) — all projects and keynotes as RSS.
*   [`/.well-known/ai-catalog.json`](https://jamesxdigital.com/.well-known/ai-catalog.json)— the same surfaces as an agentic resource catalog.

## Contact API

The contact form posts to `POST /api/submit`. The request body is JSON, and all four fields are required:

{
  "name": "Your name",
  "email": "you@example.com",
  "message": "Your message",
  "cf-turnstile-response": "token minted by the Turnstile widget"
}

The response is JSON on every outcome:`{"ok": true}` on success;`{"ok": false, "errors": {"email": "Enter an email address I can reply to."}, "message": "Check the fields marked."}` with status 400 on validation failure; and`{"ok": false, "message": "Expected a JSON body."}` when the body is not the JSON object above.

Only the Turnstile widget on the [contact page](https://jamesxdigital.com/contact/) mints`cf-turnstile-response`, and each token is good for one submission. So this endpoint cannot be driven on its own, by design, and there is no key-based access to it. To reach James, open the contact page.

```json
{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://jamesxdigital.com/#website","url":"https://jamesxdigital.com/","name":"JAMESXDIGITAL","description":"James Milton — Creative Technologist and AI builder based in Amsterdam.","inLanguage":"en","publisher":{"@id":"https://jamesxdigital.com/#organization"}},{"@type":"Person","@id":"https://jamesxdigital.com/#person","name":"James Milton","alternateName":"JAMESXDIGITAL","givenName":"James","familyName":"Milton","description":"AI builder and agentic engineer based in Amsterdam","url":"https://jamesxdigital.com/","image":{"@type":"ImageObject","url":"https://jamesxdigital.com/_astro/james-milton-og.BziQMWO-.jpg"},"sameAs":["https://instagram.com/jamesxdigital","https://linkedin.com/in/jamesxdigital","https://youtube.com/@jamesxdigital","https://github.com/jamesxdigital","https://twitter.com/jamesxdigital"],"knowsLanguage":["en"],"knowsAbout":["Agentic engineering","AI pipelines","Creative technology","Virtual reality (VR)","Augmented reality (AR)","After Effects and Premiere Pro plugin development"],"jobTitle":"Creative Technologist","worksFor":{"@type":"Organization","name":"Triple Innovation Lab","url":"https://wearetriple.com"},"address":{"@type":"PostalAddress","addressLocality":"Amsterdam","addressCountry":"Netherlands"}},{"@type":"Organization","@id":"https://jamesxdigital.com/#organization","name":"JAMESXDIGITAL","url":"https://jamesxdigital.com/","sameAs":["https://instagram.com/jamesxdigital","https://linkedin.com/in/jamesxdigital","https://youtube.com/@jamesxdigital","https://github.com/jamesxdigital"],"logo":{"@type":"ImageObject","url":"https://jamesxdigital.com/_astro/james-milton-og.BziQMWO-.jpg"},"founder":{"@id":"https://jamesxdigital.com/#person"},"address":{"@type":"PostalAddress","addressLocality":"Amsterdam","addressCountry":"Netherlands"},"contactPoint":{"@type":"ContactPoint","contactType":"inquiries","url":"https://jamesxdigital.com/contact/"}}]}
```
