'object', 'properties' => ['id' => ['type' => 'integer', 'minimum' => 1]], 'required' => ['id'], 'additionalProperties' => false, ]; } public function outputSchema(): ?array { return MediaPresenter::fullSchema(); } public function annotations(): array { return ['readonly' => true, 'destructive' => false, 'idempotent' => true]; } public function isDirect(): bool { return false; } public function permission(array $input): bool|WP_Error { $attachment = MediaGuard::attachment($input['id'] ?? null, 'edit_post', true); return $attachment instanceof WP_Error ? $attachment : true; } public function execute(array $input): mixed { $attachment = MediaGuard::attachment($input['id'] ?? null, 'edit_post', true); if ($attachment instanceof WP_Error) { return $attachment; } return $this->presenter->full($attachment, $this->finder->usages((int) $attachment->ID)); } }