1. Visit https://www.cgtrader.com/oauth/applications/new and create new oauth application.
2. Make sure you have environment variables set to something like this:
export CLIENT_ID=".." # Application Id
export CLIENT_SECRET=".." # Secret
export API_BASE="https://api.cgtrader.com/"
export REDIRECT_URI=".."
export IMAGE_PATH="/absolute/path/to/image.png"
export FILE_PATH="/absolute/path/to/model.max"
3. Initialize oauth client. In Ruby programming language it looks like this:
require 'oauth2'
client = OAuth2::Client.new(ENV['CLIENT_ID'], ENV['CLIENT_SECRET'], site: ENV['API_BASE']) do |stack|
stack.request :multipart
stack.request :url_encoded
stack.adapter Faraday.default_adapter
end
4. Generate authorization url with the following code:
authorize_url = client.auth_code.authorize_url(redirect_uri: ENV['REDIRECT_URI'])
puts "Log in to application and open: \n#{authorize_url}"
5. Log in to cgtrader.com and visit authorization url in the browser. Acquire access token with authorization_code displayed in the browser:
puts "\nEnter authorization code:"
authorization_code = gets
access_token = client.auth_code.get_token(authorization_code.strip, redirect_uri: ENV['REDIRECT_URI'])
6. Post new model attributes to the API endpoint and store model id from the result:
model = {
"category" => "aircraft",
"subcategory" => "aircraft-part",
"description" => "description",
"license" => "royalty_free",
"title" => "title",
"tags" => [ "tag1", "tag2", "tag3", "tag4", "tag5" ]
}
puts "Creating new model"
response = access_token.post('v1/models', body: model)
model_id = JSON.parse(response.body)['id']
puts "Success, id = #{model_id}"
7. Attach model images & files to the newly created model:
upload = Faraday::UploadIO.new(ENV['IMAGE_PATH'], nil)
response = access_token.post("v1/models/#{model_id}/images", params: {}, body: { image: upload })
puts "Image upload success: #{JSON.parse(response.body)}"
upload = Faraday::UploadIO.new(ENV['FILE_PATH'], nil)
response = access_token.post("v1/models/#{model_id}/files", params: {}, body: { file: upload })
puts "File upload success: #{JSON.parse(response.body)}"
8. When you are finished with editing, update model status
puts "Update model status to published"
response = access_token.put("v1/models/#{model_id}", body: { status: 'published' })
puts "Success, open #{JSON.parse(response.body)['url']}"
9. Now you should be able to find model in the https://www.cgtrader.com/3d-models