AfredTX
AfredTX

Reputation: 5

REST API post request results in successful request but not creation

I've been trying to make a Post Request to my CRM API. The CRM API is very vague:

"You can use POST request when you wish to create records. You POST a JSON encoded string to the servers and it will return a single instance of the record."

POST /{object_name}

Example: Request URL (POST):

/accounts

Request Body (JSON):

{
    "name": "testing API"
}

I've had plenty of success making GET requests regularly, but POST is not working out so easily.

url = "https://apiv4.reallysimplesystems.com/accounts?<KEY>"

payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
headers = {
  'Content-Type': 'application/json',
  'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'
}

response = requests.post(url, headers=headers, data=payload)

I get a status code 200 when I run this, but I'm really looking for that 201. The only clue that I've got to follow at this point is that when I run:

response.json()

I get the error:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

I've tried switching the response parameters to json:

response = requests.post(url, headers=headers, json=payload)

I've tried ensuring that my payload is json by using json.dumps():

payload = {"name":"Ziggy","owner":"XYZ","addresscounty/state":"Awe","source":"Space"}
payload = json.dumps(payload)

And I've tried all sorts of other shenanigans that I can't even recall at this point. Does anyone have any idea where I'm going wrong here? The 200 status code makes me feel painfully close.

Upvotes: 0

Views: 1416

Answers (2)

AfredTX
AfredTX

Reputation: 5

Problem solved:

import json
import requests

url = "https://apiv4.reallysimplesystems.com/accounts"

payload = {"name":"RSS Test Joe Bloggs","addresscounty/state":"Maryland","source":"Word of Mouth"}
payload = json.dumps(payload)
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <AUTH KEY>'
}

response = requests.post(url, headers=headers, data=payload)

Rather than using Postman's code which included the in the URL and used :

'Cookie': 'XSRF-TOKEN=<TOK>; really_simple_systems_session=<KEY>'

I replaced it with a standard Authorization header. Secondly, I found that using json.dumps(payload) and json = payload was resulting in a Bad Request.

Upvotes: 0

Agyey Arya
Agyey Arya

Reputation: 240

Replace <AUTH_TOKEN> with your auth token

url = "https://apiv4.reallysimplesystems.com/accounts/"

payload = {"name":"Ziggy"}
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer <AUTH_TOKEN>',
}

response = requests.post(url, headers=headers, data=payload)

Upvotes: 1

Related Questions