Skip to content

Piero Bosio Social Web Site Personale Logo Fediverso

Social Forum federato con il resto del mondo. Non contano le istanze, contano le persone

My hypothesis on why Lemmy is rejecting valid activities

General Discussion
10 4 50
  • I have not been able to successfully post to a Lemmy instance either as a post or a comment. A cryptic error message is returned where the error is unknown and the message is a generic message:

    {"error":"unknown","message":"data did not match any variant of untagged enum AnnouncableActivities"}

    From my logs, it seems this is happening:

    1. I make a valid ActivityPub request with the audience of a community (or cc a user).
    2. Lemmy makes an ActivityPub request back at me at /.
    3. My web site does not handle ActivityPub at /, and responds with a text/plain error message. This is default behavior in Drupal.
    4. Lemmy rejects my request with a 400 response with the error message above.

    I tested other instances by making the following get request to the root of each instance (thank you, Daniel Sternberg for maintaining curl):

    curl -v -H "Accept: application/activity+json" -H "Content-Type: application/activity+json" <url>
    • With the following results
      • Lemmy returns an Application Actor.
      • Misskey returns a 200 response in text/html.
      • Mastodon returns a 406 response in application/json.
      • NodeBB returns text/html.
      • GoToSocial returns a 406 response in application/json.
      • Mitra returns a 200 response in text/html.
      • Pixelfed returns a 200 response in text/html.
      • Peertube returns an empty 406 response.

    My hypothesis is that Lemmy is rejecting the request because I return text/plain and/or it cannot handle a response with that content type.

    To test that I am working on changing the default behavior. I will need to dynamically add a route based on system.site.page.front and return a 406 response in JSON. This is simple enough. If my hypothesis is correct, I can also make a merge request into drupal/activitypub module, which would have the same problem. If not, then I’ll need to go digging further.

  • I have not been able to successfully post to a Lemmy instance either as a post or a comment. A cryptic error message is returned where the error is unknown and the message is a generic message:

    {"error":"unknown","message":"data did not match any variant of untagged enum AnnouncableActivities"}

    From my logs, it seems this is happening:

    1. I make a valid ActivityPub request with the audience of a community (or cc a user).
    2. Lemmy makes an ActivityPub request back at me at /.
    3. My web site does not handle ActivityPub at /, and responds with a text/plain error message. This is default behavior in Drupal.
    4. Lemmy rejects my request with a 400 response with the error message above.

    I tested other instances by making the following get request to the root of each instance (thank you, Daniel Sternberg for maintaining curl):

    curl -v -H "Accept: application/activity+json" -H "Content-Type: application/activity+json" <url>
    • With the following results
      • Lemmy returns an Application Actor.
      • Misskey returns a 200 response in text/html.
      • Mastodon returns a 406 response in application/json.
      • NodeBB returns text/html.
      • GoToSocial returns a 406 response in application/json.
      • Mitra returns a 200 response in text/html.
      • Pixelfed returns a 200 response in text/html.
      • Peertube returns an empty 406 response.

    My hypothesis is that Lemmy is rejecting the request because I return text/plain and/or it cannot handle a response with that content type.

    To test that I am working on changing the default behavior. I will need to dynamically add a route based on system.site.page.front and return a 406 response in JSON. This is simple enough. If my hypothesis is correct, I can also make a merge request into drupal/activitypub module, which would have the same problem. If not, then I’ll need to go digging further.

    @mradcliffe

    >Mitra returns a 200 response in text/html.

    But it federates with Lemmy

    >data did not match any variant of untagged enum AnnouncableActivities

    Did you wrap your activity in Announce?

  • @mradcliffe

    >Mitra returns a 200 response in text/html.

    But it federates with Lemmy

    >data did not match any variant of untagged enum AnnouncableActivities

    Did you wrap your activity in Announce?

    @silverpill

    >Mitra returns a 200 response in text/html.

    But it federates with Lemmy

    My hypothesis is it's the text/plain is the problem, and that everyone else is doing something acceptable.

    Did you wrap your activity in Announce?

    Is that necessary? I could not find that in the Federation documentation. I know that Lemmy sends Announces out when it forwards activities, but to me when the documentation states

    When a user creates a new post, it is sent to the respective community as Create/Page. Editing a previously created post sends an almost identical activity, except the type being Update.

    A reply to a post, or to another comment as Create/Note

    that means I should do similarly, right?

  • I have not been able to successfully post to a Lemmy instance either as a post or a comment. A cryptic error message is returned where the error is unknown and the message is a generic message:

    {"error":"unknown","message":"data did not match any variant of untagged enum AnnouncableActivities"}

    From my logs, it seems this is happening:

    1. I make a valid ActivityPub request with the audience of a community (or cc a user).
    2. Lemmy makes an ActivityPub request back at me at /.
    3. My web site does not handle ActivityPub at /, and responds with a text/plain error message. This is default behavior in Drupal.
    4. Lemmy rejects my request with a 400 response with the error message above.

    I tested other instances by making the following get request to the root of each instance (thank you, Daniel Sternberg for maintaining curl):

    curl -v -H "Accept: application/activity+json" -H "Content-Type: application/activity+json" <url>
    • With the following results
      • Lemmy returns an Application Actor.
      • Misskey returns a 200 response in text/html.
      • Mastodon returns a 406 response in application/json.
      • NodeBB returns text/html.
      • GoToSocial returns a 406 response in application/json.
      • Mitra returns a 200 response in text/html.
      • Pixelfed returns a 200 response in text/html.
      • Peertube returns an empty 406 response.

    My hypothesis is that Lemmy is rejecting the request because I return text/plain and/or it cannot handle a response with that content type.

    To test that I am working on changing the default behavior. I will need to dynamically add a route based on system.site.page.front and return a 406 response in JSON. This is simple enough. If my hypothesis is correct, I can also make a merge request into drupal/activitypub module, which would have the same problem. If not, then I’ll need to go digging further.

    If I do need to wrap it an Announce, then I think I will need to do the following based on how it works on my end.

    1. Create my post as normal, but don’t address it to the community initially.
    2. Announce my own post making sure I address it to the community.

    I guess that might show up as me boosting my own post on some instances (tooting my own horn? Horning my own toot?), which I would feel ashamed of.

     

  • If I do need to wrap it an Announce, then I think I will need to do the following based on how it works on my end.

    1. Create my post as normal, but don’t address it to the community initially.
    2. Announce my own post making sure I address it to the community.

    I guess that might show up as me boosting my own post on some instances (tooting my own horn? Horning my own toot?), which I would feel ashamed of.

     

    mradcliffe@nokoto.org no, Lemmy doesn't check the root for an Application actor (and as you discovered, NodeBB doesn't send one either, and we federate with Lemmy fine.)

    Can you share a sample Create you're sending Lemmy? You should only need to have the group actor ID in to or cc, and probably as:Public somewhere in there too.

  • If I do need to wrap it an Announce, then I think I will need to do the following based on how it works on my end.

    1. Create my post as normal, but don’t address it to the community initially.
    2. Announce my own post making sure I address it to the community.

    I guess that might show up as me boosting my own post on some instances (tooting my own horn? Horning my own toot?), which I would feel ashamed of.

     

    @mradcliffe

    >Is that necessary? I could not find that in the Federation documentation.

    The error message says that server expects an Announce activity. But yes, group's inbox should also accept replies wrapped in Create, as well as Likes.

  • @mradcliffe

    >Is that necessary? I could not find that in the Federation documentation.

    The error message says that server expects an Announce activity. But yes, group's inbox should also accept replies wrapped in Create, as well as Likes.

    silverpill@mitra.social the group's inbox should, if the post is in local category, but what if it's a post in a remote category? It doesn't ever make it over to the remote server...

  • I have not been able to successfully post to a Lemmy instance either as a post or a comment. A cryptic error message is returned where the error is unknown and the message is a generic message:

    {"error":"unknown","message":"data did not match any variant of untagged enum AnnouncableActivities"}

    From my logs, it seems this is happening:

    1. I make a valid ActivityPub request with the audience of a community (or cc a user).
    2. Lemmy makes an ActivityPub request back at me at /.
    3. My web site does not handle ActivityPub at /, and responds with a text/plain error message. This is default behavior in Drupal.
    4. Lemmy rejects my request with a 400 response with the error message above.

    I tested other instances by making the following get request to the root of each instance (thank you, Daniel Sternberg for maintaining curl):

    curl -v -H "Accept: application/activity+json" -H "Content-Type: application/activity+json" <url>
    • With the following results
      • Lemmy returns an Application Actor.
      • Misskey returns a 200 response in text/html.
      • Mastodon returns a 406 response in application/json.
      • NodeBB returns text/html.
      • GoToSocial returns a 406 response in application/json.
      • Mitra returns a 200 response in text/html.
      • Pixelfed returns a 200 response in text/html.
      • Peertube returns an empty 406 response.

    My hypothesis is that Lemmy is rejecting the request because I return text/plain and/or it cannot handle a response with that content type.

    To test that I am working on changing the default behavior. I will need to dynamically add a route based on system.site.page.front and return a 406 response in JSON. This is simple enough. If my hypothesis is correct, I can also make a merge request into drupal/activitypub module, which would have the same problem. If not, then I’ll need to go digging further.

    Hi, I had a look at the activities sent from your account. Looks like the only problem is that you are missing a @context field. After adding that it parses just fine. What you serve from / is irrelevant, that one is completely optional.

  • Hi, I had a look at the activities sent from your account. Looks like the only problem is that you are missing a @context field. After adding that it parses just fine. What you serve from / is irrelevant, that one is completely optional.

    nutomic oh that's interesting, does Lemmy do JSON-LD validation? I didn't think it would.

  • I have not been able to successfully post to a Lemmy instance either as a post or a comment. A cryptic error message is returned where the error is unknown and the message is a generic message:

    {"error":"unknown","message":"data did not match any variant of untagged enum AnnouncableActivities"}

    From my logs, it seems this is happening:

    1. I make a valid ActivityPub request with the audience of a community (or cc a user).
    2. Lemmy makes an ActivityPub request back at me at /.
    3. My web site does not handle ActivityPub at /, and responds with a text/plain error message. This is default behavior in Drupal.
    4. Lemmy rejects my request with a 400 response with the error message above.

    I tested other instances by making the following get request to the root of each instance (thank you, Daniel Sternberg for maintaining curl):

    curl -v -H "Accept: application/activity+json" -H "Content-Type: application/activity+json" <url>
    • With the following results
      • Lemmy returns an Application Actor.
      • Misskey returns a 200 response in text/html.
      • Mastodon returns a 406 response in application/json.
      • NodeBB returns text/html.
      • GoToSocial returns a 406 response in application/json.
      • Mitra returns a 200 response in text/html.
      • Pixelfed returns a 200 response in text/html.
      • Peertube returns an empty 406 response.

    My hypothesis is that Lemmy is rejecting the request because I return text/plain and/or it cannot handle a response with that content type.

    To test that I am working on changing the default behavior. I will need to dynamically add a route based on system.site.page.front and return a 406 response in JSON. This is simple enough. If my hypothesis is correct, I can also make a merge request into drupal/activitypub module, which would have the same problem. If not, then I’ll need to go digging further.

    Actually I was wrong, there is a context so thats fine. The problem is that audience should be a simple string but you are sending an error, thats why it fails. Anyway that field is optional, so you can leave it out and put the community in to or cc instead.

    julian No but still the field is mandatory (mainly because that hasnt caused any problems so far).


Gli ultimi otto messaggi ricevuti dalla Federazione
Post suggeriti
  • 0 Votes
    1 Posts
    8 Views
    Destroying Autocracy – November 27, 2025Welcome to this week’s “Destroying Autocracy”.It’s your source for curated news affecting democracy in the cyber arena with a focus on protecting it. That necessitates an opinionated Butlerian jihad against big tech as well as evangelizing for open-source and the Fediverse. Since big media’s journalism wing is flailing and failing in its core duty to democracy, this is also a collection of alternative reporting on the eternal battle between autocracy and democracy. We also cover the cybersecurity world. You can’t be free without safety and privacy.FYI, my opinions will be in bold. And will often involve cursing. Because humans. Especially tech bros. And fascists. Fuck ’em.The Programmer’s Fulcrum is the future (and smaller) home for a fusion of Symfony Station and Battalion. Its tagline is Devs Defending Democracy, Developing the OMN.You can sign up now and for 2025 get an email with links to each week’s Symfony Station Communiqué and Battalion “Destroying Autocracy” post along with their featured articles. And you’ll be set with TPF after the fusing in January.We are posting on the Fediverse now at @thefulcrum @thefulcrum.dev and original website content will start in 2026.Featured Item(s)The Atlantic writes:Over the weekend, Elon Musk’s X rolled out a feature that had the immediate result of sowing maximum chaos. The update, called “About This Account,” allows people to click on the profile of an X user and see such information as: which country the account was created in, where its user is currently based, and how many times the username has been changed.Nikita Bier, X’s head of product, said the feature was “an important first step to securing the integrity of the global town square.” Roughly four hours later, with the update in the wild, Bier sent another post: “I need a drink.”Almost immediately, “About This Account” stated that many prominent and prolific pro-MAGA accounts, which signaled that they were run by “patriotic” Americans, were based in countries such as Nigeria, Russia, India, and Thailand.@MAGANationX, an account with almost 400,000 followers and whose bio says it is a “Patriot Voice for We The People,” is based in “Eastern Europe (Non-EU),” according to the feature, and has changed its username five times since the account was made, last year.On X and Bluesky, users dredged up countless examples of fake or misleading rage-baiting accounts posting aggressive culture-war takes to large audiences. An account called “Maga Nadine” claims to be living in and posting from the United States but is, according to X, based in Morocco. An “America First” account with 67,000 followers is apparently based in Bangladesh. Poetically, the X handle @American is based in Pakistan, according to the feature.Elon Musk’s Worthless, Poisoned Hall of MirrorsJust FYI, December 25th will be the day I stop exploring the stupidity of our current timeline and the last Destroying Autocracy post. Again, see the notes above about The Fulcrum.We start and end with good news to make the middle bearable.The response to Russia’s War Crimes, Techno Feudalism, and other douchebaggeryEuroNews reports:Life after chatbots: Meet the ‘AI vegans’ refusing to accept a virtual realityKagi is:Introducing SlopStop: Community-driven AI slop detection in Kagi SearchOrion 1.0 ✴︎ Browse BeyondFucking awesome if you use Macs.TechPolicy Press reports:Why Civil Society Is Sounding the Alarm on the EU’s Omnibus RollbackThe Guardian reports:European parliament calls for social media ban on under-16sThe Free Software Foundation Europe shares:Germany Stack: Only Free Software Enables Digital SovereigntyWikimedia announces:Unifying our mobile and desktop domainsDecidim reviews:Decidim Fest 2025: Collective energy, digital sovereignty and a common roadmapThe Conversation reports:Tim Berners-Lee wants everyone to own their own data – his plan needs state and consumer support to workMullvad reports:An important victory – but we still need to stop Chat Control.Ploum says:Don’t Do Snake Oil WritingFiona Fokus says:I don’t care how well your “AI” worksAbso-fucking-lutely.NeutralThe Guardian asks:Has Britain become an economic colony?England always makes sure to ape the shitty parts of America.W3C shares:Preventing Abuse of Digital CredentialsBen Werdmuller covers:The EFF we need nowThe Evil Empire (AKA Autocracy) Strikes BackHeise reports:Analysis of the Digital Sovereignty Summit: Open Source Gets ScoldedWe Are Solomon reports:Hungry for data: Inside Europol’s secretive AI programThe Intercept reports:The FBI wants to use Surveillance Drones with Facial Recognition TechnologyHow Corporate Partnerships Powered University Surveillance of Palestine ProtestsThe Counter Offensive reports:Witkoff was secretly giving Russians advicePariah StatesThe Register reports:CISA warns spyware crews are breaking into Signal and WhatsApp accountsDarkReading reports:DPRK’s FlexibleFerret Tightens macOS GripBig MediaThe Columbia Journalism Review reports:Could Public Skepticism of the Press Actually Be Good for Democracy?It could since most Big Media is owned by right-wing c^nts.ProPublica shares:ProPublica’s May-August 2025 Impact Report: Independent Investigations That Spur ChangeBig TechSage JournalsAlgorithms at your service: Understanding how X’s systems of recommendation likely fueled the far-right riots in the United Kingdom by amplifying visual representations of racist conspiracy theoriesRenée DiResta reports:On the internet, nobody knows you’re a MAGA influencer… in LagosThe Daily Beast reports:Top MAGA Influencers Accidentally Unmasked as Foreign Trolls404 Media reports:America’s Polarization Has Become the World’s Side HustleThe Register reports:Meta knows how bad its sites are for kids, say lawyersMM+M reports:What healthcare marketers need to know about Meta’s censoring of abortion adsThe Markup reports:How American Big Tech guards the profits it extracts around the worldCybersecurity/PrivacyBleepingComputer reports:Cox Enterprises discloses Oracle E-Business Suite data breachHmm, cable companies are literally shit at everything.Code beautifiers expose credentials from banks, govt, tech orgsDarkReading reports:Infamous Shai-hulud Worm Resurfaces From the DepthsThe Register reports:FCC guts post-Salt Typhoon telco rules despite ongoing espionage riskFediverseTerence Eden has:Now witness the power of this fully operational Fediverse!Ghost has:Explore the independent webRadWeb Hosting shares:How to Host Your Own Mastodon Server on a VPS (5 Minute Quick-Start Guide)How to Install Pleroma on Ubuntu VPS (5 Minute Quick-Start Guide)NodeBB announces:NodeBB v4.7.0 — category boost fixes, remote media/emoji in chats, and more!Slightly Decentralized Social MediaConnected Places has:ATmosphere Report – 144CTAs (aka show us some free love)That’s it for this week. Please share this edition of Destroying Autocracy.Follow me on the Fediverse. Or this site via the button in the footer. Or via RSS. Or even our future home in 2026, if you want a head start.Keep fighting!Ringleader, BattalionReuben Walker Follow me on the Fediverse#activitypub #ai #atproto #autocracy #bigJournalism #bigTech #democracy #fascism #fediverse #mastodon #nodebb #pleroma #stopChina #stopIsrael #stopRedAmerica #stopRussia #supportUkraine #technoanarchism #technofeudalismhttps://battalion.mobileatom.net/?p=3992
  • 0 Votes
    1 Posts
    16 Views
    Vacations are wonderful. It is a privilege to be able to travel without worry. It's also wonderful to be home, and to have the time to work on projects I care about. With those thoughts in mind, I present release v3.1.1 of Ktistec, an ActivityPub server written in the Crystal programming language!This release is a mixed bag of small features and improvements:AddedAuto-link URLs in posts. (fixes #24)Support searching by actor username. (fixes #102)Support hourly granularity in metrics charts.FixedMark actor as down if refresh fails.Remove draft posts from the everything collection.Ignore charts with no points in the date range.Ensure HTTP::Client instances are closed.I added support for multiple users at the beginning of the month. I'm very interested in feedback on how that's working out for anyone using it.#ktistec #fediverse #activitypub #crystallang
  • 1 Votes
    30 Posts
    82 Views
    If I used an object observer for a topic/context, and proceeded to delete that context, the object observer would go away too. That is, unless you're inferring that I take steps to preserve the object observer for some period of time (if not forever?)
  • 0 Votes
    13 Posts
    46 Views
    @julian no, mastodon doesn't use salmon anymore, not since a long time ago. they switched to websub then activitypub direct delivery.on the indieweb side, salmention is an extension to webmention, where upon receiving a webmention where someone replied to you, you add that reply to your html then send a webmention up the reply chain to whoever you replied to, and they will fetch your html and find the new downstream reply, add it to *their* html, send a webmention upstream, and so on.