Salta al contenuto

Piero Bosio Social Web Site Personale Logo Fediverso

Social Forum federato con il resto del mondo. Non contano le istanze, contano le persone
  • 0 Votazioni
    3 Post
    35 Visualizzazioni
    hongminhee@hollo.social
    @smallcircles@social.coop Fair, and I'll be honest, I haven't read the linked post yet, it's a long one and I want to give it a proper read rather than skim it. I'd like to be more involved in the standardization side of this too. Language is a real hurdle for me there, participating in that kind of discussion in a second language is harder than it looks, so bear with me if I'm slower to engage than I'd like. That said, writing this case up as a FEP seems worth trying, and I might take a shot at it.
  • 0 Votazioni
    1 Post
    31 Visualizzazioni
    botkit@hackers.pub
    We're pleased to announce BotKit 0.5.0. This release changes how both the docs site and every bot's own pages look, and it stops limiting a server to one bot: a single process can now host a whole fleet of them. Quoting, and being quoted, goes through a consent step under FEP-044f, and a Redis-backed repository joins the SQLite and PostgreSQL ones for shared production storage. A few of these changes are breaking; see below for what to check before you upgrade. A new look for botkit.fedify.dev Until this release, botkit.fedify.dev read like a stock VitePress site: a workable but generic shell wrapped around the docs, with none of BotKit's own personality showing through. The theme and the landing page are both new. The palette now matches the real logo greens instead of a generic default, and headlines are set in Space Grotesk, paired with Inter for everything else; the display font is self-hosted, so no visitor's IP is handed to a font CDN. The new landing page frames BotKit's dinosaur mascot inside its signature unassembled-model-kit sprue frame, then leads with a tabbed installer for Deno, npm, pnpm, and Yarn and a one-file bot example before getting into what BotKit actually does: messages, events, multi-bot instances, and the pages it builds for a bot without any extra work from you. [image: 15aa3e0fb9912dd140ff5aa180beddf035d8c34e4eaa04c60fd3502bd3d938f8.webp] The deployment guides grew alongside the new landing page: they were split apart and fleshed out, and a new Cloudflare Workers guide joins the existing Deno Deploy, Docker, and self-hosting guides. A new look for your bot's pages The pages BotKit serves for your bot (its profile, its posts, its follower list) got the same attention, in the opposite direction. Until now they were built on Pico CSS pulled from an external CDN: a fine default, but a generic one that made every BotKit-hosted bot look like a demo of the same template, and that quietly sent every visitor's browser off to fetch a stylesheet from someone else's server. That's gone. Bot pages now use a self-contained design system, bundled with the package and served from BotKit's own content-addressed, cache-forever path: no external CDN, no build step, on either Deno or Node.js. The whole look is driven by a single accent color you choose (twenty names, the same legend Pico CSS uses, so your existing choice of color still works), tinting links, the follow button, and small highlights, while everything else stays quiet so your bot's name, avatar, and posts are what a visitor actually notices. A new PagesOptions.theme option ("auto", "light", or "dark") controls the color scheme independently of the accent. A repost is now marked and attributed to its original author instead of blending into the bot's own timeline. [image: d6a84e47a619cff04164ebec091f67d4ff20cc1e83c686da742e8b399ed22981.webp] If you want to go further than the accent color allows, PagesOptions.css still lets you inject custom CSS on top of BotKit's own stylesheet. Multi-bot instances Until this release, a BotKit process could only ever be one bot. Running a second bot meant standing up a whole second server, even when the two bots could easily have shared the same infrastructure. That limitation, raised in #16, is gone: the new createInstance() function creates an Instance that owns the shared plumbing (the key–value store, the message queue, the repository, and HTTP handling), and any number of bots can live on it side by side, each with its own actor identity and event handlers. For a fixed, known set of bots, Instance.createBot() takes an identifier and a profile: import { createInstance, text } from "@fedify/botkit"; import { MemoryKvStore } from "@fedify/fedify"; const instance = createInstance<void>({ kv: new MemoryKvStore() }); const greetBot = instance.createBot("greet", { username: "greetbot", name: "Greeting Bot", }); greetBot.onFollow = async (session, followRequest) => { await followRequest.accept(); await session.publish(text`Welcome, ${followRequest.follower}!`); }; For a family of bots resolved on demand (one per region, one per customer, thousands of them backed by a database), pass a dispatcher function instead of a fixed identifier, and BotKit resolves and federates each one lazily: const weatherBots = instance.createBot(async (ctx, identifier) => { if (!identifier.startsWith("weather_")) return null; const region = await db.getRegion(identifier.slice("weather_".length)); if (region == null) return null; return { username: identifier, name: `${region.name} Weather Bot` }; }); weatherBots.onMention = async (session, message) => { const code = session.bot.identifier.slice("weather_".length); await message.reply(text`Current weather: ${await db.getWeather(code)}`); }; Incoming activities are routed only to the bots they actually concern: the followed bot, the owner of a liked or replied-to message, mentioned bots, and bots followed by the sender. Multi-bot instances also serve a list of hosted bots at the web root, with each bot's own pages moving to /@{username}; a reserved instance actor signs shared-inbox requests when there's no single bot whose key obviously should. None of this touches single-bot deployments: createBot() keeps working exactly as it always has, with the bot's pages staying at the web root and its data migrated to the new storage layout automatically on startup. If you maintain a custom Repository implementation, though, this is a breaking change worth planning for: every method now takes the owning bot's identifier as its first parameter, Session.bot is a read-only ReadonlyBot instead of a mutable Bot, and local object URIs carry the owning bot's identifier (old-format URIs are still recognized and permanently redirected, so links other servers stored keep working). The full picture, including how to move an existing single-bot deployment onto a multi-bot instance later, is in the new Instance concept document. Thanks to @moreal@hackers.pub, whose early work-in-progress explorations of this problem surfaced its two hardest design questions (mapping usernames to identifiers for dynamic bots, and routing object URIs that used to carry no owner information) well before this implementation settled on its final shape. Consent-respecting quotes with FEP-044f BotKit has supported quoting since 0.2.0, but only in the Misskey family's style: a quoteUrl property and a Link tag, sent without ever asking the quoted author. Mastodon 4.4 and 4.5 do things differently: they verify quotes through FEP-044f's consent handshake before showing them as quotes at all. Without that handshake, a BotKit bot's quotes never rendered as quotes on Mastodon, and quotes of a BotKit bot showed up as unverifiable. BotKit now handles the FEP-044f handshake in both directions. When you quote a message, it sets the FEP-044f quote property and sends a QuoteRequest to the quoted author, alongside the Create it already sent. Publishing stays non-blocking: the post goes out immediately, and the quote is upgraded once (or if) approval arrives: const message = await session.publish(text`This message quotes another one.`, { quoteTarget: quoted, }); console.log(message.quoteApprovalState); // "pending" On the receiving side, a new quotePolicy option (on createBot(), and per message on Session.publish()) controls how your bot answers incoming quote requests: automatically for everyone ("public", the default), automatically for followers only, never ("nobody"), or held for manual review through the new Bot.onQuoteRequest event: bot.onQuoteRequest = async (session, request) => { if (request.state === "pending") await request.accept(); }; Bot.onQuoteAccepted, Bot.onQuoteRejected, and Bot.onQuoteRevoked cover what happens next for quotes your own bot sent, Message.quoteApproved reports whether an incoming quote carries a valid authorization stamp, and AuthorizedMessage.unauthorizeQuote() lets you revoke one you previously granted. The legacy quoteUrl and Misskey-style tags are still sent alongside the new property, so nothing about quoting on Misskey and its relatives changes. The full design is spread across #27 through #33. A Redis repository (@fedify/botkit-redis) BotKit has had a SQLite repository since 0.3.0 and a PostgreSQL one since 0.4.0, but neither is the natural fit for a bot that runs as several worker processes sharing one store, which is exactly the shape a Redis-backed deployment usually takes. The new @fedify/botkit-redis package fills that gap with RedisRepository, built directly on Redis strings, sets, and sorted sets rather than going through a generic key–value abstraction: import { createBot, MemoryKvStore } from "@fedify/botkit"; import { RedisRepository } from "@fedify/botkit-redis"; const bot = createBot({ username: "mybot", kv: new MemoryKvStore(), repository: new RedisRepository({ url: "redis://localhost:6379/0" }), }); Because several workers can share one Redis instance, the read-modify-write paths that matter most under concurrency (message updates, follower bookkeeping, quote authorization indexes) are protected by short-lived locks that get renewed while a slow update is still running, rather than by assuming only one process ever touches the data at a time. The package supports both a connection URL it manages itself and an existing node-redis client you inject and keep control of, and it's available for both Deno and Node.js. #12 and #35 cover the rest of it. Smaller improvements The npm package's TypeScript declaration files no longer accidentally include the runtime Temporal polyfill code, which had been leaking into consumers' .d.ts output. Fedify was upgraded to 2.3.1, Hono to 4.12.27, and LogTape to 2.2.3. As always, the full list of changes is in CHANGES.md, and every API mentioned above is documented at botkit.fedify.dev. Thank you to everyone who filed issues, opened discussions, and tried BotKit out. If you build something with BotKit, run into a rough edge, or just want to talk through an idea before opening an issue, GitHub Discussions is the place for exactly that. For something closer to real time, BotKit's chat now lives on Matrix at #fedify:matrix.org. Drop in and say hello.
  • 0 Votazioni
    5 Post
    0 Visualizzazioni
    hongminhee@hollo.social
    @silverpill@mitra.social Mostly because ap: is a very broad scheme name. If ap: becomes the long-term ActivityPub portable identifier scheme, that is fine, and Fedify should support it. The concern is that FEP-ef61 is still a draft, and making a library emit ap: as the canonical form today can make the current draft semantics look more settled, and more general, than they are. ap+ef61: has a narrower meaning: this is the portable-object URI model defined by FEP-ef61. That gives implementations room to experiment with the current DID authority, gateway dereferencing, compatible ID, and proof-policy rules without implicitly claiming the whole ap: scheme for this exact design. It also avoids a possible future conflict if ap: is later standardized with slightly different semantics. This is not a strong objection to ap: itself. Fedify should accept ap: because the current FEP requires it, and interoperability with existing implementations matters more than a local naming preference. My current thinking is: accept both ap: and ap+ef61:; canonicalize them through the same comparison algorithm; emit ap+ef61: for newly generated portable IDs while the FEP is still draft, unless the FEP settles on ap: or another scheme; keep this easy to change if the FEP chooses ap:, ap+portable:, ap+nomad:, or something else. Between the alternatives, ap+ef61: is precise but tied to the FEP number. ap+portable: or ap+nomad: would be better if the goal is a stable human-readable scheme name. I do not have a strong preference there. The main point is that a draft-specific or portable-specific scheme feels safer than treating the generic ap: scheme as permanently settled before the FEP reaches consensus.
  • 0 Votazioni
    2 Post
    22 Visualizzazioni
    drfed@hackers.pub
    Some of you have already heard of us as #Fedify Studio. We now have a proper name: DrFed, short for “Doctor Fed.” We've also just received funding from @nlnet@nlnet.nl, through the NGI0 Commons Fund. #DrFed is a web app for debugging #ActivityPub interoperability failures. When two implementations don't federate, the slow part is usually figuring out where the exchange broke: signing, JSON-LD processing, WebFinger, or something less obvious. DrFed's first job is to show where it failed. We're the team behind @fedify@hollo.social: @2chanhaeng@hackers.pub, @gaebalgom@hackers.pub, @hongminhee@hollo.social, and @z9mb1@hackers.pub. We'll post updates when there's something to try. #fedidev #fediverse
  • 1 Votazioni
    7 Post
    30 Visualizzazioni
    hongminhee@hollo.social
    @liaizon@wake.st Yeah, it's so-called Misskey-style quotes, and as far as I know, Pleroma/Akkoma also implements this style of quotes!
  • 0 Votazioni
    2 Post
    27 Visualizzazioni
    evan@cosocial.ca
    @reiver yes!
  • 0 Votazioni
    1 Post
    34 Visualizzazioni
    fedify@hollo.social
    We're working on a new #tutorial for #Fedify: Building a Federated Blog with Astro! It walks you through creating a hybrid blog—static Markdown posts powered by #Astro content collections, with #ActivityPub federation layered on top. By the end, your blog will be followable from Mastodon, send Create/Update/Delete activities when you publish or edit posts, and display #fediverse replies as comments. Preview the draft here: https://d180af62.fedify.pages.dev/tutorial/astro-blog. We'd love your feedback—especially if you spot anything incorrect, unclear, or missing. Please leave comments on the GitHub PR #695 or issue #691. #fedidev
  • 1 Votazioni
    1 Post
    25 Visualizzazioni
    hongminhee@hollo.social
    The #CFP for the Fediverse & Social Web track at COSCUP 2026 (Taipei, Aug 8–9) is now open! If you're working on #ActivityPub, the #fediverse, or anything in the open social web space, we'd love to hear from you. The deadline is May 9. #COSCUP is free to attend. 👉 https://hackers.pub/@fedidevkr/2026/fediverse-social-web-track-at-coscup-2026-cfp (Boosts appreciated!) #SocialWeb #fedidev
  • 0 Votazioni
    1 Post
    0 Visualizzazioni
    fedidevkr@hackers.pub
    #COSCUP 2026(타이베이, 8월 8–9일) Fediverse & Social Web 트랙 발표자 모집이 시작되었습니다! #ActivityPub, #연합우주, 오픈 소셜 웹 관련 주제라면 무엇이든 환영합니다. 마감은 5월 9일이고, COSCUP 참가는 무료입니다. 👉 https://hackers.pub/@fedidevkr/2026/fediverse-social-web-track-at-coscup-2026-cfp-ko #페디버스 #SocialWeb #fedidev
  • 1 Votazioni
    1 Post
    28 Visualizzazioni
    fedidevkr@hackers.pub
    The #CFP for the Fediverse & Social Web track at COSCUP 2026 (Taipei, Aug 8–9) is now open! If you're working on #ActivityPub, the #fediverse, or anything in the open social web space, we'd love to hear from you. The deadline is May 9. #COSCUP is free to attend. 👉 https://hackers.pub/@fedidevkr/2026/fediverse-social-web-track-at-coscup-2026-cfp (Boosts appreciated!) #SocialWeb #fedidev
  • 0 Votazioni
    1 Post
    24 Visualizzazioni
    fedidevkr@hackers.pub
    <small>他の言語で読む:English(英語)、한국어(韓国語)。</small> FediLUGとFediDev KRは、COSCUP 2026 フェディバース & ソーシャルウェブトラックを開設し、発表の提案を募集します。 COSCUP(Conference for Open Source Coders, Users, and Promoters)は、台湾・台北で毎年開催される無料のオープンソースカンファレンスです。東アジア版のFOSDEMとイメージしていただければわかりやすいかと思います。今年は8月8–9日に国立台湾科技大学にてUbuCon Asia 2026と共同開催されます。 フェディバース & ソーシャルウェブトラックは1日間、計6時間を予定しています。東アジアの主要なオープンソースカンファレンスで開かれる初のフェディバース専用トラックとして、東アジアのフェディバースコミュニティが定期的に集まる場になることを願っています。 発表形式 発表時間のデフォルトは30分です。それより長い・短い時間が必要な場合は、提出時に希望する時間をお知らせください。 トピック フェディバースおよびオープンなソーシャルウェブに関するテーマであれば、幅広く歓迎します。 ActivityPub または関連プロトコルの実装 ActivityPub 対応ソフトウェア向けクライアント フェディバース開発のためのライブラリ、ツールキット、フレームワーク 検索・オンボーディング・モデレーションなどの支援サービス インスタンスの運営・管理 ガバナンス、ポリシー、連合コミュニティ運営の社会的側面 より広いオープンソーシャルウェブと相互運用性 重要な日程 募集開始:2026年3月28日 募集締め切り:2026年5月9日(AoE:世界のどのタイムゾーンでも当日中) 採否通知:2026年6月9日 カンファレンス:2026年8月8–9日 提出方法 https://pretalx.coscup.org/coscup-2026/cfpから提出できます。トラックのドロップダウンでFediverse & Social Webを選択してください。 提案は英語または中国語でご記入ください。COSCUPはセッションの説明を英語と中国語の両言語で掲載しますが、翻訳は採択後に行われるため、提出時に両言語を用意する必要はありません。 すべてのセッションは録画され、CC BY-SA 4.0のもとで公開されます。録画や当該条件での公開が難しい内容が含まれる場合は、提出時にその旨をお知らせください。 行動規範 すべての発表者と参加者は、COSCUP 行動規範(英文)を確認し、遵守してください。 お問い合わせ トラック、トピック、フェディバース全般に関するご質問は、contact@fedidev.krまたはフェディバースアカウント「@fedidevkr@hackers.pub」までお気軽にどうぞ。
  • 0 Votazioni
    1 Post
    28 Visualizzazioni
    fedidevkr@hackers.pub
    <small>다른 언어로 읽기: English (영어), 日本語 (일본어).</small> 한국 연합우주 개발자 모임(FediDev KR)과 FediLUG(일본)이 COSCUP 2026 연합우주(fediverse) & 소셜 웹 트랙을 열고, 발표 제안을 받습니다. COSCUP은 매년 대만 타이베이에서 열리는 무료 오픈소스 컨퍼런스입니다. FOSDEM의 동아시아판이라고 생각하시면 됩니다. 올해는 8월 8–9일 국립대만과학기술대학교에서 UbuCon Asia 2026과 공동 개최됩니다. 연합우주 & 소셜 웹 트랙은 하루 종일, 총 6시간 진행됩니다. 동아시아의 주요 오픈소스 컨퍼런스에서 열리는 첫 번째 연합우주 전용 트랙으로, 이 자리가 동아시아 연합우주 커뮤니티의 정기적인 모임으로 이어지기를 바랍니다. 발표 형식 기본 발표 시간은 30분입니다. 더 길거나 짧은 시간이 필요하다면 제출 시 희망 시간을 적어주세요. 주제 연합우주 및 오픈 소셜 웹과 관련된 주제라면 무엇이든 환영합니다. ActivityPub 또는 관련 프로토콜 구현 ActivityPub 기반 소프트웨어용 클라이언트 연합우주 개발을 위한 라이브러리, 툴킷, 프레임워크 검색, 온보딩, 모더레이션 등 지원 서비스 인스턴스 운영 및 관리 거버넌스, 정책, 연합 커뮤니티 운영의 사회적 측면 더 넓은 의미의 오픈 소셜 웹과 상호운용성 주요 일정 제출 시작: 2026년 3월 28일 제출 마감: 2026년 5월 9일 (AoE, 세계 어느 시간대 기준으로도 해당 날짜 내) 결과 통보: 2026년 6월 9일 컨퍼런스: 2026년 8월 8–9일 제출 방법 https://pretalx.coscup.org/coscup-2026/cfp에서 제출하실 수 있습니다. 트랙 드롭다운에서 Fediverse & Social Web을 선택해 주세요. 발표 제안은 영어 또는 중국어로 작성해 주세요. COSCUP은 세션 설명을 영어와 중국어로 함께 게시하지만, 번역은 채택 이후에 이루어지므로 제출 시 두 언어를 모두 작성할 필요는 없습니다. 모든 세션은 녹화되어 CC BY-SA 4.0으로 공개됩니다. 녹화하거나 해당 조건으로 공개할 수 없는 내용이 포함되어 있다면 제출 시 명시해 주세요. 행동 강령 모든 발표자와 참가자는 COSCUP 행동 강령(영문)을 숙지하고 준수해야 합니다. 문의 트랙, 주제, 연합우주 전반에 대한 문의는 contact@fedidev.kr 또는 연합우주 계정 @fedidevkr@hackers.pub 쪽으로 연락해 주세요.
  • 1 Votazioni
    1 Post
    29 Visualizzazioni
    fedidevkr@hackers.pub
    <small>Read it in other languages: 日本語 (Japanese), 한국어 (Korean).</small> FediDev KR and FediLUG (Japan) are pleased to announce the Fediverse & Social Web track at COSCUP 2026, and invite participants to submit proposals for talks. COSCUP (Conference for Open Source Coders, Users, and Promoters) is a free, community-run open source conference held annually in Taipei, Taiwan. Think FOSDEM, but in East Asia. This year it takes place August 8–9 at the National Taiwan University of Science and Technology, and is co-hosted with UbuCon Asia 2026. The Fediverse & Social Web track runs for a full day, six hours in total. It is the first dedicated fediverse track at a major open source conference in East Asia, and we hope it becomes a regular gathering point for the fediverse community in the region. Format The default talk length is 30 minutes. If you need more or less time, note your preferred length when submitting. Topics We welcome proposals on anything related to the fediverse and the open social web, including: Implementations of ActivityPub or related protocols Clients for ActivityPub-enabled software Libraries, toolkits, and frameworks for fediverse development Supporting services: search, onboarding, moderation tooling Instance administration and operations Governance, policy, and the social dimensions of running federated communities The broader open social web and interoperability Important dates Submission opens: March 28, 2026 Submission deadline: May 9, 2026 (AoE) Acceptance notifications: June 9, 2026 Conference: August 8–9, 2026 Submissions Submit proposals at https://pretalx.coscup.org/coscup-2026/cfp. Select Fediverse & Social Web from the track dropdown. You can write your proposal in English or Chinese. COSCUP publishes session descriptions bilingually in English and Chinese, but that translation happens after acceptance; you don't need to provide both languages when submitting. All sessions will be recorded and released under CC BY-SA 4.0. If your talk contains material that cannot be recorded or released under those terms, please note this in your submission. Code of conduct All speakers and attendees are expected to follow the COSCUP Code of Conduct. Contact Questions about the track, topics, or the fediverse in general are welcome at contact@fedidev.kr or @fedidevkr@hackers.pub on the fediverse.
  • 0 Votazioni
    7 Post
    57 Visualizzazioni
    julian@activitypub.space
    Yup do as @trwnh@mastodon.social and @silverpill@mitra.social say and implement fb2a. It is supported by NodeBB and WordPress already.
  • 0 Votazioni
    1 Post
    10 Visualizzazioni
    hongminhee@hollo.social
    Update: we've decided to go ahead and submit the CFP to @COSCUP@floss.social 2026. The track will be called Fediverse & Social Web—think FOSDEM's Social Web devroom, but in Taipei. #COSCUP is free to attend, like FOSDEM. If the track is accepted, would you be interested in coming to Taipei (Aug 8–9) to give a talk? (Boosts appreciated!) https://hollo.social/@hongminhee/019ca8b2-ecca-7150-a237-37f35de45401 #fedidev #fediverse #SocialWeb #ActivityPub
  • Thanks to @nyanrus@mi.rerac.dev

    Mondo moimlive fedidev
    1
    3
    0 Votazioni
    1 Post
    8 Visualizzazioni
    kodingwarrior@hackers.pub
    Thanks to @nyanrus@mi.rerac.dev https://moim.live now supports Mastodon OAuth, Misskey MiAuth #moim_live #fedidev
  • 1 Votazioni
    7 Post
    90 Visualizzazioni
    hongminhee@hollo.social
    @ayo@ayco.io Thank you! COSCUP is an in-person event, so there isn't much to do remotely—but spreading the word when we announce the CFP and the schedule would be a huge help. I'll make sure to post updates here!
  • #moim_live #fedidev

    Mondo moimlive fedidev
    1
    3
    0 Votazioni
    1 Post
    6 Visualizzazioni
    kodingwarrior@hackers.pub
    #moim_live #fedidev I'm building an open source ActivityPub service called "Moim" — 모임 in Korean, meaning gathering or meetup. It started as a federated RSVP service, but I realized I wanted to connect people even beyond events. Events are where people come together, yes — but places carry meaning on their own, even in quiet, ordinary moments. So Moim is about helping people feel connected: through events, and through the simple act of sharing where they are. Right now, I'm focusing on three areas: CRM for Event Organizers A proper SaaS-like experience built for people who run events. I'm actively reaching out to organizers to shape this. A Federated RSVP Service I want Moim's RSVP experience to feel just as polished as anything outside the Fediverse — and ideally, better. Being federated shouldn't mean settling for less. A Check-in Sharing System I miss what Foursquare Swarm used to be. I want to bring that feeling back, built for the Fediverse. I don't know yet if I'm building the right thing. But I'll keep going, and do my best to make it something worth using. If I'm ready, I will officially announce to public.
  • 1 Votazioni
    27 Post
    85 Visualizzazioni
    julian@activitypub.space
    @hongminhee@hollo.social I think maybe there will be an announcement soon. @reiver@mastodon.social was teasing something yesterday.
  • 0 Votazioni
    6 Post
    67 Visualizzazioni
    julian@activitypub.space
    @hongminhee@hollo.social ah yes, implements would be a good thing to support. It would allow you to cache the value temporarily (maybe a quick recheck every 7 days or so) so as to avoid needing a double knock at all. Caching based on first knock success also works. I wonder if sending HTTP 426 is doable too... 🤔 https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/426