Direct Download API does not work

Nextcloud version (eg, 12.0.2): 18.0.3
Operating system and version (eg, Ubuntu 17.04): Ubuntu 18.04.4 LTS
Apache or nginx version (eg, Apache 2.4.25): Apache/2.4.29 (Ubuntu) (apache2handler)
PHP version (eg, 7.1): 7.2.24

The issue you are facing:
when using the Direct Download Endpoint I get a Syntax Error.

The PHP I use to make the Request:

$curl=curl_init("cloud.domain.tld/ocs/v2.php/apps/dav/api/v1/direct");
curl_setopt_array($curl,[
CURLOPT_USERPWD => "User:XXXXX-XXXXX-XXXXX-XXXXX",
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => "fileID=42",
CURLOPT_USERAGENT => 'NerdsClub Nextcloudsuche',
CURLOPT_HTTPHEADER => ["OCS-APIRequest: true"],
]);
$response=curl_exec($curl);

Response is:
failure 404 Invalid query, please check the syntax. API specifications are here:

http://www.freedesktop.org/wiki/Specifications/open-collaboration-services.

Is this the first time you’ve seen this error? (Y/N): Y

Steps to replicate it:

  1. create app password for API auth
  2. obtain a file ID
  3. invoke the direct Download API endpoint: https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#direct-download

The output of your Nextcloud log in Admin > Logging:

{"reqId":"TMPy6bmJqJYEzWiHiKCO","level":3,"time":"2020-04-17T12:00:03+00:00","remoteAddr":"192.168.42.254","user":"My1","app":"no app in context","method":"POST","url":"/ocs/v2.php/apps/dav/api/v1/direct","message":{"Exception":"Exception","Message":"Argument 1 passed to OCA\\DAV\\Controller\\DirectController::getUrl() must be of the type integer, null given, called in /var/www/cloud/lib/private/AppFramework/Http/Dispatcher.php on line 170","Code":0,"Trace":[{"file":"/var/www/cloud/lib/private/AppFramework/App.php","line":125,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\DAV\\Controller\\DirectController"},"getUrl"]},{"file":"/var/www/cloud/lib/private/AppFramework/Routing/RouteActionHandler.php","line":47,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\DAV\\Controller\\DirectController","getUrl",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"ocs.dav.direct.getUrl"}]},{"function":"__invoke","class":"OC\\AppFramework\\Routing\\RouteActionHandler","type":"->","args":[{"_route":"ocs.dav.direct.getUrl"}]},{"file":"/var/www/cloud/lib/private/Route/Router.php","line":299,"function":"call_user_func","args":[{"__class__":"OC\\AppFramework\\Routing\\RouteActionHandler"},{"_route":"ocs.dav.direct.getUrl"}]},{"file":"/var/www/cloud/ocs/v1.php","line":82,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/ocsapp/apps/dav/api/v1/direct"]},{"file":"/var/www/cloud/ocs/v2.php","line":24,"args":["/var/www/cloud/ocs/v1.php"],"function":"require_once"}],"File":"/var/www/cloud/lib/private/AppFramework/Http/Dispatcher.php","Line":109,"Previous":{"Exception":"TypeError","Message":"Argument 1 passed to OCA\\DAV\\Controller\\DirectController::getUrl() must be of the type integer, null given, called in /var/www/cloud/lib/private/AppFramework/Http/Dispatcher.php on line 170","Code":0,"Trace":[{"file":"/var/www/cloud/lib/private/AppFramework/Http/Dispatcher.php","line":170,"function":"getUrl","class":"OCA\\DAV\\Controller\\DirectController","type":"->","args":[null]},{"file":"/var/www/cloud/lib/private/AppFramework/Http/Dispatcher.php","line":99,"function":"executeController","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\DAV\\Controller\\DirectController"},"getUrl"]},{"file":"/var/www/cloud/lib/private/AppFramework/App.php","line":125,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\DAV\\Controller\\DirectController"},"getUrl"]},{"file":"/var/www/cloud/lib/private/AppFramework/Routing/RouteActionHandler.php","line":47,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\DAV\\Controller\\DirectController","getUrl",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"ocs.dav.direct.getUrl"}]},{"function":"__invoke","class":"OC\\AppFramework\\Routing\\RouteActionHandler","type":"->","args":[{"_route":"ocs.dav.direct.getUrl"}]},{"file":"/var/www/cloud/lib/private/Route/Router.php","line":299,"function":"call_user_func","args":[{"__class__":"OC\\AppFramework\\Routing\\RouteActionHandler"},{"_route":"ocs.dav.direct.getUrl"}]},{"file":"/var/www/cloud/ocs/v1.php","line":82,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/ocsapp/apps/dav/api/v1/direct"]},{"file":"/var/www/cloud/ocs/v2.php","line":24,"args":["/var/www/cloud/ocs/v1.php"],"function":"require_once"}],"File":"/var/www/cloud/apps/dav/lib/Controller/DirectController.php","Line":84},"CustomMessage":"--"},"userAgent":"Download Tester","version":"18.0.3.0","id":"5e999c2382c81"}

The output of your config.php file in /path/to/nextcloud (make sure you remove any identifiable information!):


<?php
$CONFIG = array (
  'instanceid' => 'NOPE',
  'passwordsalt' => 'NOPE',
  'secret' => 'NOPE',
  'trusted_domains' =>
  array (
    0 => 'NOPE',
    1 => 'NOPE',
    2 => 'NOPE',
  ),
  'datadirectory' => '/var/www/nextcloud-data',
  'dbtype' => 'mysql',
  'version' => '18.0.3.0',
  'overwrite.cli.url' => 'NOPE',
  'htaccess.RewriteBase' => '/',
  'dbname' => 'nextcloud',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nextcloud',
  'dbpassword' => 'NOPE',
  'installed' => true,
  'maintenance' => false,
  'ldapIgnoreNamingRules' => false,
  'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory',
  'skeletondirectory' => '',
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'redis' =>
  array (
    'host' => '/var/run/redis/redis-server.sock',
    'port' => 0,
  ),
  'mysql.utf8mb4' => true,
  'app_install_overwrite' =>
  array (
    0 => 'twofactor_yubikey',
    1 => 'ldapcontacts',
    2 => 'secsignid',
    3 => 'onlyoffice',
    4 => 'afterlogic',
  ),
  'theme' => '',
  'loglevel' => 0,
  'updater.release.channel' => 'stable',
  'mail_domain' => 'NOPE',
  'mail_from_address' => 'NOPE',
  'mail_smtpmode' => 'smtp',
  'mail_sendmailmode' => 'smtp',
  'mail_smtpsecure' => 'ssl',
  'mail_smtpauthtype' => 'LOGIN',
  'mail_smtpauth' => 1,
  'mail_smtphost' => 'NOPE',
  'mail_smtpport' => '465',
  'mail_smtpname' => 'NOPE',
  'mail_smtppassword' => 'NOPE',
);

The output of your Apache/nginx/system log in /var/log/____:

nothing in the apache error logs