function addProperties() {
        $requiredProperties = [
            'api' => '\\'.$this->apiClassname,
            'parameters' => 'array',
            'response' => '\Amp\Artax\Response',
            'originalResponse'  => '\Amp\Artax\Response', 
        ];

        //TODO - deal with clashes between this and bits of the actual api
        foreach ($requiredProperties as $propertyName => $typehint) {
            $propertyGenerator = new PropertyGenerator($propertyName, null);
            $docBlock = new DocBlockGenerator('@var '.$typehint);
            $propertyGenerator->setDocBlock($docBlock);
            $this->classGenerator->addPropertyFromGenerator($propertyGenerator);
        }

        //We have to allow access to the last response for crappy APIs
        //that return information in the response headers.
        $docBlock = new DocBlockGenerator('Get the last response.');
        $body = 'return $this->response;';

        $methodGenerator = $this->createMethodGenerator('getResponse', $body, $docBlock, [], '\Amp\Artax\Response');
        $this->classGenerator->addMethodFromGenerator($methodGenerator);

        $docBlock = new DocBlockGenerator('Set the last response. This should only be used by the API class when the operation has been dispatched. Storing the response is required as some APIs store out-of-bound information in the headers e.g. rate-limit info, pagination that is not really part of the operation.');
        $body = '$this->response = $response;';

        $methodGenerator = $this->createMethodGenerator('setResponse', $body, $docBlock, [['response', 'Amp\Artax\Response']]);
        $this->classGenerator->addMethodFromGenerator($methodGenerator);
        
    }