See docs @ https://docs.github.com/en/rest/gists/gists?apiVersion=2022-11-28#create-a-gist
content=$(awk '{gsub(/\\/, "\\\\"); gsub(/"/, "\\\""); printf "%s\\n", $0}' /path/to/your/file | sed ':a;N;$!ba;s/\n/\\n/g')
cat <<EOF > payload.json
{
"description": "<description>",
"public": true,
"files": {
"filename.ext": {
"content": "$content"
}
}
}
EOF
NOTE: This uses a fine-grained access token with gist permissions
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <your_token>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/gists \
-d @payload.json