Not able to PUT multiple users to https://api.vimeo.com/channels/{channel_id}/privacy/users - vimeo

In reading https://developer.vimeo.com/api/reference/channels#PUT/channels/{channel_id}/privacy/users it looks like it should be possible to allow multiple users to view a private channel by sending a body with multiple users.
When I issue the following cURL
curl -X PUT \
https://api.vimeo.com/channels/1407898/privacy/users \
-H 'Authorization: Bearer {bearer token}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Postman-Token: 8a5288c3-1352-4c90-8874-aa622930c4e7' \
-d users=89969174
I get back
{
"error": "Something strange occurred. Please try again.",
"link": null,
"developer_message": "The body of this HTTP request is not formatted properly. Please check the content-type header and raw body.",
"error_code": 2205
}
I'm not certain what I'm doing wrong, here?

The documentation on that endpoint is a bit lacking - Vimeo will fix that soon.
To add multiple users, you'll need to send an array of objects:
curl -X PUT
https://api.vimeo.com/channels/*channel_id*/privacy/users
-H 'Accept: application/vnd.vimeo.*+json;version=3.4'
-H 'Authorization: bearer *token*'
-H 'Content-Type: application/json'
-d '[
{"uri":"/users/*userid1*"},{"uri":"/users/*userid2*"}
]
'

Related

How to add Policy value while creating Policy in HashiCorp Vault using curl?

curl -k --request POST --url https://vault:8200/v1/sys/policy/policy-test --header 'Authorization: Bearer <Token>' --header 'Content-Type: application/json' --data '"policy":"{""path\\"" //*\" { \n capabilities = [\"create\",\"read\",\"list\",\"update\"]}}}"'
While trying this command, I am getting this error:
{"errors":["error parsing JSON"]}
Could anyone help with syntax for Vault policy here?
It's easy to visualize (and fix the errors) if you use the "#-" --data option and a here-document, like shown following:
curl -k --request POST --url https://vault:8200/v1/sys/policy/policy-test --header 'Authorization: Bearer ' --header 'Content-Type: application/json' --data #- <<EOF
{
"policy":
{
"path \"/*\"
{
capabilities = [\"create\", \"read\", \"list\", \"update\"]
}"
}
}
EOF

How to Parse Data into a POST request for MRPeasy

TLDR
For my API project I require to send a POST request to MRP to update some of the fields.
What I am currently struggling with is the ability to parse in the parameters as data, every time I send the request I get a code 400.
Full Explanation
MRPeasy has a documentation page which I am using heavily for this project as that is the only source of info.
In that article they give 2 examples, 1 for GET and 1 for POST, I have no issues whatsoever with the get request, it works perfectly fine. However, the POST does not, they are as follows:
curl -X "GET" "https://app.mrpeasy.com/rest/v1/items" \
-H 'Content-Type: application/json' \
-H 'api_key: xxxxxxxxxxxxx' \
-H 'access_key: xxxxxxxxxxxxx'
curl -X "PUT" "https://app.mrpeasy.com/rest/v1/items/5" \
-H 'Content-Type: application/json' \
-H 'api_key: xxxxxxxxxxxxx' \
-H 'access_key: xxxxxxxxxxxxx' \
-d '{"selling_price": "2.54"}'
Below is my representation of the above code in python:
```python
url = "https://app.mrpeasy.com/rest/v1/manufacturing-orders/69"
headers = {
"Content-Type": "application/json",
"api_key": my_api_key,
"access_key": my_access_key
}
print(requests.get(url, headers=headers).json()["custom_3338"])
url = "https://app.mrpeasy.com/rest/v1/manufacturing-orders/69"
headers = {
"Content-Type": "application/json",
"api_key": my_api_key,
"access_key": my_access_key
}
data = json.dumps({"custom_3338": "1654642800.0000000000"})
print(requests.post(url, headers=headers, data=data).status_code)
```
Regarding the data variable, I have tried all of the below:
'{"custom_3338": "1654642800.0000000000"}'
{"custom_3338": "1654642800.0000000000"}
{"due_date": "1654642800.0000000000"}
{"quantity": 3}
'{"quantity": 3}'
I hope that is sufficient information. If you need anything else from me, please let me know, I'll be more than happy to provide.
Many Thanks,
Greg
P.S. This is my first post so I apologise if I didn't follow some rules or best practices.
You can create a json File contains the data you want to send as data and send the request with the JSON file itself.
JSON
{"custom_3338": "1654642800.0000000000"}
curl
curl -X POST \
-H 'Content-Type: application/json' \
-H 'api_key: xxxxxxxxxxxxx' \
-H 'access_key: xxxxxxxxxxxxx'
--data "#./processGroup.json" \
https://app.mrpeasy.com/....
Or easier actually, pass the data directly in the body :
curl -X POST \
-H 'Content-Type: application/json' \
-H 'api_key: xxxxxxxxxxxxx' \
-H 'access_key: xxxxxxxxxxxxx'
--data '{"custom_3338": "1654642800.0000000000"}' \
https://app.mrpeasy.com/....

curl command for REST API which takes json input

I want to call REST API by passing json input.
I have following details-
username
apitoken
apiurl
Jsonfile
I have already tried
curl -d #Metadata.json -H "Content-Type: application/json" <> --user xyz:apitoken --insecure
but i m getting null values for all the parameters in the json file.
What am i doing wrong here?
Simple Solution would be to create a sample postman with above details then follow below steps -
Click on the code icon.
Choose cURL from the drop-down.
There’s your cURL command
Sample curl command -
curl -X POST \
https://something.com/endpoint \
-H 'Content-Type: application/json' \
-H 'Postman-Token: 1f0fcc007739' \
-H 'apikey: CSZftBtR0WaN' \
-H 'cache-control: no-cache' \
-d '{
"Id": "5de675",
"xxxxx": "500081"
}'

OPENIDM- HTTP PUT cURL request

I'm new to openIDM, I'm trying to execute the following query, getting proper results as expected which is POST.
$ curl -k -s https://localhost/openidm/managed/zzzz?_action=create -H 'Content-Type: application/json' -H 'X-OpenIDM-Username: '"openidm-admin"'' -H 'X-OpenIDM-Password: '"openidm-admin"'' -H 'Accept: application/json' -d
'{ "x": "'"AA1"'", "xx": "'"xx"'", "xxx": "'"xxx"'","xxxx": "'"xxxx"'"}'
Results:
{"_id":"db0489f6-d390-481f-8708-0970b3e42469","_rev":"0","x":"AA1","xx":"xx","xxx":"xxx","xxxx":"xxxx"}
But I want to have id value to be created as client Assigned ID not the one generated by openidm, and for that I am using PUT command as below
$ curl -k -s PUT https://xxxx/openidm/managed/zzzz/AA1 -H 'Content-Type: application/json' -H 'X-OpenIDM-Username: '"openidm-admin"'' -H 'X-OpenIDM-Password: '"openidm-admin"'' -H 'Accept: application/json' -d '{ "x": "'"AA1"'", "xx": "'"xx"'", "xxx": "'"xxx"'","xxxx": "'"xxxx"'"}'
Result :
{"code":400,"reason":"Bad Request","message":"The resource instance
/managed/zzzz/AA1 cannot be created"}
Output what I want is
{"_id":"AA1","_rev":"0","x":"AA1","xx":"xx","xxx":"xxx","xxxx":"xxxx"}
I am not sure what I'm doing wrong, Any suggestion ? I followed openidm documentation and below is the link for that.
https://backstage.forgerock.com/docs/idm/5.5/integrators-guide/#about-crest-create

How to pass payload via JSON file for curl?

I can successfully create a place via curl executing the following command:
$ curl -vX POST https://server/api/v1/places.json -d "
auth_token=B8dsbz4HExMskqUa6Qhn& \
place[name]=Fuelstation Central& \
place[city]=Grossbeeren& \
place[address]=Buschweg 1& \
place[latitude]=52.3601& \
place[longitude]=13.3332& \
place[washing]=true& \
place[founded_at_year]=2000& \
place[products][]=diesel& \
place[products][]=benzin \
"
The server returns HTTP/1.1 201 Created.
Now I want to store the payload in a JSON file which looks like this:
// testplace.json
{
"auth_token" : "B8dsbz4HExMskqUa6Qhn",
"name" : "Fuelstation Central",
"city" : "Grossbeeren",
"address" : "Buschweg 1",
"latitude" : 52.3601,
"longitude" : 13.3332,
"washing" : true,
"founded_at_year" : 2000,
"products" : ["diesel","benzin"]
}
So I modify the command to be executed like this:
$ curl -vX POST http://server/api/v1/places.json -d #testplace.json
This fails returning HTTP/1.1 401 Unauthorized. Why?
curl sends POST requests with the default content type of application/x-www-form-urlencoded. If you want to send a JSON request, you will have to specify the correct content type header:
$ curl -vX POST http://server/api/v1/places.json -d #testplace.json \
--header "Content-Type: application/json"
But that will only work if the server accepts json input. The .json at the end of the url may only indicate that the output is json, it doesn't necessarily mean that it also will handle json input. The API documentation should give you a hint on whether it does or not.
The reason you get a 401 and not some other error is probably because the server can't extract the auth_token from your request.
To clarify how to actually specify a file that contains the JSON to post, note that it's with the # sign as shown in the OP
e.g. a typical post to a local .NET Core API:
curl -X POST https://localhost:5001/api -H "Content-Type: application/json" -d #/some/directory/some.json
You can cat the contents of a json file to curl via the --data-raw parameter
curl https://api.com/route -H 'Content-Type: application/json' --data-raw "$(cat ~/.json/payload-2022-03-03.json | grep -v '^\s*//')"
curl https://api.com/route -H 'Content-Type: application/json' -d #<(jq . ~/.json/payload-2022-03-03.json)
curl https://api.com/route -H 'Content-Type: application/json' -d #<(jq '{"payload": .}' < ~/.json/payload-2022-03-03.json)
Note: comments in the json file are filtered out via grep -v '^\s*//'
You can also pass the data to curl via stdin using grep or cat or jq
grep -v '^\s*//' ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d #-
cat ~/.json/payload-2022-03-03.json | grep -v '^\s*//' | curl https://api.com/route -H 'Content-Type: application/json' -d #-
jq . ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d #-
jq '{"payload": .}' < ~/.json/payload-2022-03-03.json | curl https://api.com/route -H 'Content-Type: application/json' -d #-