Can't create topic with tag using admin API due to insufficient trust level


I have not been able to create a topic with a tag using the admin API (i.e. when I include api_key and api_username on the query string).

POSTing to /posts, I attempted to use the tags[] param I see in the UI’s calls to the API, which were happily ignored. I also tried to post with a tag param which caused the server to 500:

NoMethodError in PostsController#create
undefined method `-' for "testing123":String Did you mean? -@

Extracted source (around line #163):
    staff_tags = SiteSetting.staff_tags.split("|")

    tag_diff = tags - staff_tags
    tag_diff = tags - tag_diff

    tag_diff.present? ? tag_diff : nil

Rails.root: /vagrant

lib/discourse_tagging.rb:163:in `staff_only_tags'
lib/topic_creator.rb:28:in `valid?'
lib/has_errors.rb:10:in `validate_child'
lib/post_creator.rb:93:in `valid?'
lib/post_creator.rb:124:in `create'
lib/new_post_manager.rb:145:in `perform_create_post'
lib/new_post_manager.rb:119:in `perform'
app/controllers/posts_controller.rb:142:in `block in create'
lib/distributed_memoizer.rb:28:in `memoize'
app/controllers/posts_controller.rb:141:in `create'
config/initializers/100-quiet_logger.rb:13:in `call_with_quiet_assets'
config/initializers/100-silence_logger.rb:26:in `call'
lib/middleware/missing_avatars.rb:21:in `call'
lib/middleware/turbo_dev.rb:33:in `call'



{"title"=>"sdaf dsfa sdfa sfd sfda sfd sfd sfd sfda ",
 "raw"=>"wr  awd wa w adaw aw dn lef galgj ",
 "api_key"=> (scrubbed),

Using the API, is there a way to create a topic with a tag? Failing that, is there a way to add a tag after the fact?

(Neil Lalonde) #2

Did you enable tagging? Check your settings in admin. It’s disabled by default.

You can add tags by editing the topic:

If you don’t see the tag input field, then you haven’t enabled tagging.


Tagging is enabled, and I have topics with tags that have been created via the UI. I can do this, and it works, but when calling the same API with api_key and api_username in lieu of a user token, it doesn’t work.

(Neil Lalonde) #4

This worked for me and added two tags:

curl --data "api_key=asdf...asdf&api_username=neill&title=this%20one%20has%20two%20tags&raw=and%20it%20is%20twice%20as%20delicious&tags[]=mazda&tags[]=protege" http://localhost:3000/posts.json

So I’m not sure why it isn’t working for you…


No dice. I’m putting the api_key and api_host on the query string, not the body? But I tried to move them and yeah, same result. To be clear, the topic is created, but there aren’t any tags on it.

What commit are you on? Maybe it’s a quirk with the version I’ve checked out? I’m at b1fb1831df5f48aac22d76ad75d6f12edeaf9c03 on the beta branch.

(Neil Lalonde) #6

Show me the curl command that isn’t working. I’m not clear if your creating a new topic (POST), updating one (PUT), or adding a reply (can’t add tags to topics from a reply).


Thanks for the help. Here’s what I’m sending:

curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: b22a11c2-5b79-e4e5-2c8c-4c8423e5e76b" -H "Content-Type: application/x-www-form-urlencoded" -d 'title=whatissobadaboutthistitle&raw=asdfasdfasdfasdfweiurasdfkjbawerad&tags[]=thisisatest&tags[]=thisisanothertest&api_key=...&api_username=user8' "http://localhost:4000/posts.json"

(Neil Lalonde) #8

That looks right. Does user8 have permission to tag topics? min trust level to tag topics

(cpradio) #9

Also check the TL required for creating tags?


Ugh, no, of course not. Minimum trust level to create was set to 3 (the default, I think). Early on I had thought of the admin as being the one creating tags and so assumed it would work, but of course setting api_username to arbitrary users changing that makes sense.

Thank you both very much for the help.