Question: I'm learning to work with requests and JSON, so I decided to use API of the app I heavily use. I've successfully made requests to receive an auth code and access token, so I can get the content with the request like this:

```
requests.post('https://getpocket.com/v3/get',
               data = {'consumer_key' : consumer_key,
                       'access_token' : access_token,
                         'detailType' : 'simple',
                              'count' : '50'})

```

But when I want to modify entries, I build the similar request, which doesn't work for some reason:

```
requests.post('https://getpocket.com/v3/send',
               data = {'consumer_key' : consumer_key,
                       'access_token' : access_token,
                            'actions' : [{'item_id':'1000000000','action':'archive'}]})

```

The [API guide](https://getpocket.com/developer/docs/v3/modify#action_archive) suggests the following valid example (I decoded it for visibility):

```
https://getpocket.com/v3/send?actions=[{"action":"archive","time":1348853312,"item_id":229279689}]&access_token=ACCESS_TOKEN&consumer_key=CONSUMER_KEY

```

I get the error "400 Bad Request" and one of the headers says: "Invalid request, please refer to API documentation".

Is there anything I'm doing wrong with the syntax?

Answer: 
I see you are using `requests` library. From version 2.4.2 onwards, you can use `json` as parameter. It should have better json encoding than `data`.

```
requests.post('https://getpocket.com/v3/send', json={
    'consumer_key': consumer_key,
    'access_token': access_token,
    'actions': [{
        'item_id':'1000000000',
        'action':'archive'
     }]
})

```

See here for more information: <http://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests>

EDIT: If only `action` key should be a json string, you can try following:

```
import simplejson as json

requests.post('https://getpocket.com/v3/send', data={
        'consumer_key': consumer_key,
        'access_token': access_token,
        'actions': json.dumps([{
            'item_id':'1000000000',
            'action':'archive'
         }])
    })

```

I would recommend `simplejson` over `json` package as it is updated more frequently.
It seems that the API requires the parameters to be on the URL, but you're sending on the post body.

You should encode you dictionary into the URL:

```
from urllib.parse import urlencode

data = {
        'consumer_key' : consumer_key,
        'access_token' : access_token,
        'actions' : [{'item_id':'1000000000','action':'archive'
       }
requests.post('https://getpocket.com/v3/send/?' + urlencode(data))

```